2010-04-20 9 views
6

Quando dichiaro un'opzione contenente uno spazio, LaTeX/XeLaTeX lo mangia.Come passare un'opzione contenente uno spazio in un pacchetto in LaTeX/XeLaTeX

Nel .tex principale, ho:

\usepackage[test font]{test} 

Nel mio file .sty ho:

\DeclareOption*{\newfontfamily\testfont[Scale=1]{\CurrentOption}} 
\ProcessOptions 

Ma il motore Tex passa al pacchetto TestFont opzione e non test font.

Quindi la domanda è come passare l'opzione che contiene lo spazio nel pacchetto.

risposta

1

Prova


\catcode`\ =11 
\usepackage[test font]{test} 
\catcode`\ =10 

Questo è abbastanza probabile che a fallire, ma il fallimento potrebbe essere progressi su quello che abbiamo finora.

+1

Sì, questo fallirà, ma con un piccolo cambiamento che verrà compilato senza errori: nel file .tex \ catcode' \ = 11 \ usepackage [font di prova ] {test} e nel file .sty \ DeclareOption * {\ typeout {Cosa c'è \ CurrentOption}} \ ProcessOptions \ catcode' \ = 10 il problema è che lo spostamento del primo gatto il codice nel file .sty non funziona. – anno

6

proteggerlo con bretelle

\usepackage[{test font}]{test} 
+0

Non funziona e non è una soluzione accettabile. – anno

+0

dimenticavo che avresti in realtà bisogno di due set di parentesi graffe qui: \ documentclass {article} \ begin { FileContents} {} test.sty \ def \ Options {} \ DeclareOption * {% \ edef \ Opzioni {\ Opzioni, \ CurrentOption} \ AtBeginDocument {\ Opzioni} } \ ProcessOptions \ end {FileContents} \ usepackage [{{un'opzione qui}}] {test} \ begin {document} \ end {document} Sfortunatamente, il kernel elimina lo spazio prima che il pacchetto arrivi a qualcosa. La solita alternativa non è prendere i dati al caricamento del pacchetto ma avere una macro di configurazione che elabora le cose dopo il caricamento. Ciò evita di perdere spazi. –

+1

Sì con 2 parentesi funziona, ma non posso chiedere all'utente di farlo. – anno

Problemi correlati