Re: listings: gli argomenti opzionali di \lstnewenvironment

#28995
Up
0
Down
::

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

Go to top