2010-04-20 13 views
6

Cuando declaro una opción que contiene un espacio, LaTeX/XeLaTeX se lo come.Cómo pasar una opción que contiene un espacio a un paquete en LaTeX/XeLaTeX

En el .tex principal, tengo:

\usepackage[test font]{test} 

En mi archivo tengo .sty:

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

Pero el motor Tex pasa al paquete TestFont opción y no fuente de prueba.

Entonces la pregunta es cómo pasar la opción que contiene el espacio al paquete.

Respuesta

1

Trate


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

Esto es bastante probable que falle, pero el fracaso podría ser el progreso en lo que tenemos hasta ahora.

+1

Sí, esto va a fracasar, pero con un pequeño cambio se compilará sin error: en el archivo .tex \ catcode' \ = 11 \ usepackage [font prueba ] {prueba} y en el archivo .sty \ DeclareOption * {\ {typeout ¿Qué hay de \ CurrentOption}} \ ProcessOptions \ catcode' \ = 10 el problema es que se mueve el primer gato el código en el archivo .sty no funciona. – anno

6

protegerlo con apoyos

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

No funciona y no es una solución aceptable. – anno

+0

me olvidaba que te gustaría realmente necesita dos juegos de llaves aquí: \ documentclass {article} \ begin { filecontents} {} test.sty \ def \ Opciones {} \ DeclareOption * {% \ EDEF \ Opciones {\ Opciones, \ CurrentOption} \ AtBeginDocument {\ Opciones} } \ ProcessOptions \ end {filecontents} \ usepackage [{{opción aquí}}] {prueba} \ begin {document} \ end {document} Desafortunadamente, el kernel elimina el espacio antes de que su paquete llegue a algo. La alternativa habitual es no tomar los datos en la carga del paquete, sino tener una macro de configuración que procesa las cosas después de la carga. Eso evita perder espacios. –

+1

Sí, con 2 llaves funciona, pero no puedo pedirle al usuario que lo haga. – anno

Cuestiones relacionadas