Re: Opzioni ad una nuova classe

#39267
Up
0
Down
::

Ciao a tutti, come va?
Sto creando una nuova classe per beamer che mi permetta di avere sempre lo stesso “stile”, ma di cambiare i colori con un’opzione.

Ecco la prima parte del codice:
`\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{colorbeamer}[2009/11/15 v0.1 Mirko's version of Beamer]

\ExecuteOptions{hyperref={pdfpagelabels=false},green,bibart}
\ProcessOptions
\RequirePackage[svgnames]{xcolor}
\LoadClassWithOptions{beamer}%[2005/06/12]
\RequirePackageWithOptions{graphicx}
\hypersetup{colorlinks=false}
\RequirePackage{xifthen}

\newboolean{colorbeamergreen}
\newboolean{colorbeamerblue}
\newboolean{colorbeamerred}
\newboolean{colorbeamerbib}

\DeclareOption{green}{\setboolean{colorbeamergreen}{true}\setboolean{colorbeamerblue}{false}\setboolean{colorbeamerred}{false}}
\DeclareOption{blue}{\setboolean{colorbeamergreen}{false}\setboolean{colorbeamerblue}{true}\setboolean{colorbeamerred}{false}}
\DeclareOption{red}{\setboolean{colorbeamergreen}{false}\setboolean{colorbeamerblue}{false}\setboolean{colorbeamerred}{true}}
\DeclareOption{bibbook}{\setboolean{colorbeamerbib}{true}}
\DeclareOption{bibart}{\setboolean{colorbeamerbib}{false}}
\ProcessOptions\relax
[…]
\ifthenelse{\boolean{colorbeamerbib}}{\setbeamertemplate{bibliography item}[book]}{\setbeamertemplate{bibliography item}[article]}
[…]
\ifthenelse{\boolean{colorbeamergreen}}{%
\setbeamercolor[…]
}{}
\ifthenelse{\boolean{colorbeamerblue}}{%
\setbeamercolor[…]
}{}
\ifthenelse{\boolean{colorbeamerred}}{%
\setbeamercolor[…]
}{}
[…]`Bene… se carico la classe con`\documentclass[italian]{colorbeamer}` con o senza le opzioni “green”, “bibart”, “bibbook” tutto fila liscio.
Non appena provo con`\documentclass[blue,italian]{colorbeamer}`o con red, ottengo un errore di

Missing \begin{document}

e una serie di altri errori.

Pobabilmente sbaglio nella definizione delle opzioni a 3 valori della classe, ma non riesco a individuare dove sia l’errore…

Qualcuno riesce ad aiutarmi?

Grazie e buona domenica,

Non puoi dare due volte \ProcessOptions.

`\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{colorbeamer}[2009/11/15 v0.1 Mirko's version of Beamer]
\RequirePackage{xifthen}

\newboolean{colorbeamergreen}
\newboolean{colorbeamerblue}
\newboolean{colorbeamerred}
\newboolean{colorbeamerbib}

\DeclareOption{green}{\setboolean{colorbeamergreen}{true}}
\DeclareOption{blue}{\setboolean{colorbeamerblue}{true}%
\setboolean{colorbeamergreen}{false}}
\DeclareOption{red}{\setboolean{colorbeamerred}{true}%
\setboolean{colorbeamergreen}{false}}
\DeclareOption{bibbook}{\setboolean{colorbeamerbib}{true}}
\DeclareOption{bibart}{\setboolean{colorbeamerbib}{false}}

\PassOptionsToPackage{svgnames}{xcolor}
\PassOptionsToClass{hyperref={pdfpagelabels=false}}{beamer}

\ExecuteOptions{green,bibart}
\ProcessOptions\relax

\LoadClass{beamer}%[2005/06/12]

\RequirePackage{graphicx}
\hypersetup{colorlinks=false}

`
Non userei affatto la sintassi di xifthen per quel tipo di impostazioni (non userei \ifthenelse nemmeno sotto minaccia fisica, per la verità :)). Forse sarebbe più semplice dire
`\DeclareOption{red}{\def\mirko@color{red}\chardef\mirko@colnumber\z@}
\DeclareOption{green}{\def\mirko@color{green}\chardef\mirko@colnumber\@ne}
\DeclareOption{blue}{\def\mirko@color{blue}\chardef\mirko@colnumber\tw@}`
Per il codice successivo puoi usare \mirko@color quando hai bisogno del nome del colore; per codice diverso a seconda dei colori puoi usare \ifcase:
`\ifcase\mirko@colnumber
\or
\or
\fi`
Molto più facile da mantenere, secondo me, e anche da estendere.

Ciao
Enrico

Go to top