Carissimi, sto cercando di capire la sintassi del comando di listings \lstnewenvironment, che, stando a quel che dice l’autore del pacchetto, dovrebbe essere analoga a \newenvironment:
`\lstnewenvironment
{}[ ][ ]
{}
{}`
Non capisco che cosa sia e a che cosa serva quell'[]. Viene proposto il seguente esempio:
`\lstnewenvironment{pascalx}[1][]
{\lstset{language=pascal,numbers=left,numberstyle=\tiny,float,#1}}
{}`
Come si usa? Nel documento, dove devo scrivere l’argomento corrispondente a #? Mi fate un esempio?Più importante, perché se lascio vuoto il secondo argomento opzionale, ottengo un errore in compilazione?
`\lstnewenvironment{pascalx}[1]%[] se elimino questo ottengo un errore
{\lstset{language=pascal,numbers=left,numberstyle=\tiny,float,#1}}
{}`
È molto semplice: con la definizione proposta, puoi aggiungere opzioni al tuo ambiente pascalx:
`\begin{pascalx}[morekeywords=…,
codice
\end{pascalx}`
oppure usarlo com’è:
`\begin{pascalx}
codice
\end{pascalx}`
Già che ci siamo, c’è una cosa che penso sia utile quando si usa listings. Supponi di scrivere un pacchetto che definisce un ambiente per il codice TeX:
`\istnewenvironment{texcode}[1][]
{\lstset{language=TeX,basicstyle=\ttfamily}{}`
L’utente del pacchetto usa volentieri questo ambiente, finché nel corso del lavoro gli capita un brano di codice che richiede \small per poter stare nella pagina. Facile, basterebbe dire
`\begin{texcode}[basicstyle=\ttfamily\small]
codice
\end{texcode}`
C’è un problema, come penso ti accorgerai subito: l’utente è obbligato a sapere quale sia il valore di “basicstyle” definito nel pacchetto. Evidente contraddizione con i principi di LaTeX. 🙂
Soluzione: metti nel pacchetto anche
`\lst@Key{addtobasicstyle}\relax{%
\toks@=\expandafter{\lst@basicstyle #1}%
\edef\lst@basicstyle{\the\toks@}}`
e insegna all’utente di scrivere, se vuole qualche modifica,
`\begin{texcode}[addtobasicstyle=\small]
codice
\end{texcode}`
Ci sono altre parole chiave che possono essere trattate in modo analogo.
Penso che sia un’estensione interessante che si potrebbe proporre al curatore di listings.
Ciao
Enrico