Pregunta

¿Es posible tener un comando TeX que tendrá el conjunto siguiente palabra (o las letras siguientes hasta, pero sin incluir el siguiente símbolo puntuacion) como un argumento y no sólo la siguiente letra o {} grupo?

Me gustaría tener unas tapas \ comando en ciertos acrónimos, pero no quieren que escriba corchetes una y otra vez.

¿Fue útil?

Solución

En primer lugar crear su comando, por ejemplo

 \def\capsimpl#1{{\sc #1}}% Your main macro

La solución para coger un espacio o puntuacion:

\catcode`\@=11  
\def\addtopunct#1{\expandafter\let\csname punct@\meaning#1\endcsname\let} 
\addtopunct{ }
\addtopunct{.}    \addtopunct{,}    \addtopunct{?} 
\addtopunct{!}    \addtopunct{;}    \addtopunct{:} 

\newtoks\capsarg
\def\caps{\capsarg{}\futurelet\punctlet\capsx}
\def\capsx{\expandafter\ifx\csname punct@\meaning\punctlet\endcsname\let
       \expandafter\capsend  
       \else \expandafter\continuecaps\fi}

\def\capsend{\expandafter\capsimpl\expandafter{\the\capsarg}}
\def\continuecaps#1{\capsarg=\expandafter{\the\capsarg#1}\futurelet\punctlet\capsx}

\catcode`\@=12

Otros consejos

@Debilski - Me escribió algo similar a su activa * Código de las siglas en mi tesis. He activado para imprimir el acrónimo, así como la expansión si es la primera vez que se encontró. También fui un poco fuera de la parte más profunda, permitiendo la definición de las expansiones en línea y el uso de los archivos .aux para enviar las expansiones "atrás en el tiempo" si se utilizan antes de que sean declaradas, o para informar de errores si un acrónimo Nunca se declara.

En general, parecía que sería una buena idea en ese momento - que rara vez necesitaba muy caracteres de activación cuidadosos que son ni remotamente utilizan comúnmente.

Por otro lado, la XeTeX y caracteres Unicode más altas, probablemente es mucho más seguro, y hay maneras generalmente fácil de escribir estos caracteres adicionales, tales como hacer un multi (o componer) clave (por lo general Mapa cualquiera numlock o una de las teclas de windows a este), de modo que por ejemplo, multi-!-! produce ¡). O si se está ejecutando en emacs, puede utilizar C- \ para cambiar al modo de entrada de TeX brevemente para insertar Unicode escribiendo el comando TeX para él (aunque esto es un dolor para escribir documentos TeX realidad, ya que intercepta su real \ 's, y por favor, por favor, no trate de definir su propio carácter de escape!)

En cuanto a los espacios en blanco después de comandos:. xspace ver el paquete, y Tex elemento FAQ Comandos engullir siguiente espacio

Ahora ¿por qué esto es muy difícil: como usted señaló a sí mismo, cosas como que sólo se puede hacer cambiando catcodes, parece. Catcodes se asignan a los personajes cuando TeX los lee, y Tex lee una línea a la vez, por lo que no pueden hacer nada con otros espacios en la misma línea, en mi humilde opinión. Podría haber una forma de evitar esto, pero yo no lo veo.


código peligroso abajo!

Este código hará lo que usted quiere solamente al final de la línea, por lo que si lo que quiere es más escribir "fluidez" sin corchetes, pero que están dispuestos a golpear 'retorno' después de cada acrónimo (y no corre ningún auto-guión más adelante), puede utilizar la siguiente:

\def\caps{\begingroup\catcode`^^20 =11\mcaps}
\def\mcaps#1{\def\next##1 {\sc #1##1\catcode`^^20 =10\endgroup\ }\next}

Una solución podría ser la creación otro personaje tan activo y el uso de éste para escapar. Esto no elimina la necesidad de un personaje de cierre pero evita escribir la macro \caps, por lo que es en general más fácil de escribir.

Por lo tanto, en circunstancias muy especiales, las siguientes obras.

\catcode`\*=\active
\def*#1*{\textsc{\MakeTextLowercase{#1}}}

Now follows an *Acronym*.

Desafortunadamente, esto hace usos de \section*{} imposible sin definiciones de macro adicionales.

En XeTeX, parece ser posible explotar los caracteres Unicode para esto, así se podría definir

\catcode`\•=\active
\def•#1•{\textsc{\MakeTextLowercase{#1}}}

Now follows an •Acronym•.

lo que debería reducir los efectos sobre otros comandos, pero, por supuesto, tiene que tener el carácter ‘•’ asignada al teclado en algún lugar para ser de utilidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top