2010-04-20 16 views
6

Lorsque je déclare une option contenant un espace, LaTeX/XeLaTeX le mange.Comment passer une option contenant un espace à un paquet dans LaTeX/XeLaTeX

Dans la principale .tex, je:

\usepackage[test font]{test} 

Dans mon dossier .sty je:

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

Mais le moteur Tex passe au package TestFont option et non tester la police. Donc, la question est de savoir comment passer l'option contenant l'espace pour le paquet.

Répondre

1

Essayez


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

Ceci est tout à fait susceptible d'échouer, mais l'échec est peut-être des progrès sur ce que nous avons à ce jour.

+1

Oui cela ne fonctionne pas, mais avec un peu de changement, il compilera sans erreur: dans le fichier .tex \ catcode' \ = 11 \ usepackage [font de test ] {} test de et dans le fichier .sty \ DeclareOption * {\ typeout {Quoi \ CurrentOption}} \ ProcessOptions \ catcode' \ = 10 le problème étant que le déplacement du premier chat code dans le fichier .sty ne fonctionne pas. – anno

6

Protégez avec des accolades

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

Ne fonctionne pas et n'est pas une solution acceptable. – anno

+0

J'oubliais que vous auriez réellement besoin de deux ensembles d'accolades ici: \ documentclass {article} \ begin { filecontents} {} test.sty \ def \ options {} \ DeclareOption * {% \ edef \ options {\ options, \ CurrentOption} \ AtBeginDocument {\ options} } \ ProcessOptions \ end {filecontents} \ usepackage [{{option ici}}] {Test} \ begin {document} \ end {document} Malheureusement, le noyau supprime l'espace avant que votre paquet ne reçoive quoi que ce soit. L'alternative habituelle est de ne pas prendre les données au chargement du paquet mais d'avoir une macro configurée qui traite les choses après le chargement. Cela évite de perdre des espaces. –

+1

Oui avec 2 accolades cela fonctionne, mais je ne peux pas demander à l'utilisateur de le faire. – anno