Re: Come si usa il pachetto xkeyval

#22135
Up
0
Down
::

Voglio imparare ad usare il pacchetto xkeyval. Mettiamo che io abbia questo ambiente un po’ stupido:
`
\usepackage{xkeyval,xcolor}
\newenvironment{scatola}[2][black]{\par\color{#1}\hrule\vskip3pt\textcolor{#2}\bgroup}{\egroup\vskip3pt\hrule\par}
\begin{document}
\begin{scatola}[blue]{red}
testo
\end{scatola}
\end{document} `

Io con xkeyval voglio poter scrivere
`
\begin{scatola}[colorrule=black,colortext=green]
testo
\end{scatola}
`

per avere i rulli neri e il testo verde, o
`
\begin{scatola}
testo
\end{scatola}`

per avere, di default, i rulli blu e il testo rosso.

Così il codice è più comprensibile. Ho letto la documentazione di xkeyval ma non ci ho capito un tubo. Ho visto anche il topic
http://www.guit.sssup.it/phpbb/viewtopic.php?t=3316&highlight=longmedal
dell’ambiente di Agostino, ma per ora è un po’ troppo complesso per me.

`\makeatletter
\newenvironment{scatola}[1][]
{\setkeys{scatola}{#1}%
\par\scatola@rulecolor%
\hrule\vskip3pt\begingroup\scatola@textcolor}
{\endgroup\vskip3pt\hrule}
\define@key{scatola}{rulecolor}{\def\scatola@rulecolor{\color{#1}}}
\define@key{scatola}{textcolor}{\def\scatola@textcolor{\color{#1}}}
\def\scatola@rulecolor{\color{black}}
\def\scatola@textcolor{\color{black}}
\makeatother`
Vediamo una prova:
`\begin{scatola}
testo nero righe nere
\end{scatola}
\medskip
\begin{scatola}[textcolor=green]
testo verde righe nere
\end{scatola}
\medskip
\begin{scatola}[rulecolor=red]
testo nero righe rosse
\end{scatola}
\medskip
\begin{scatola}[textcolor=blue,rulecolor=red]
testo blu righe rosse
\end{scatola}`
Passi l’argomento opzionale, dove stabilisci i valori, a \setkeys; il primo argomento serve per poter avere chiavi con lo stesso nome anche con impieghi diversi.

Con \define@key dici come usare il valore. Siccome ci sono questioni di gruppi, do anche un valore di default ai comandi usati per i colori, in modo che questi comandi abbiano sempre una definizione.

Ciao
Enrico

Go to top