comando tex que afecta a la siguiente palabra completa
-
20-09-2019 - |
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.
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
En general, parecía que sería una buena idea en ese momento - que rara vez necesitaba
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.