2010-05-12 88 views
9

Sé que uno de los puntos de alarde de LaTeX es que no tiene este comportamiento de Microsoft. Sin embargo, a veces es útil.Capitaliza automáticamente la primera letra de la primera palabra en una nueva oración en LaTeX

LaTeX ya agrega un espacio extra después de escribir un período (no retrocede), por lo que debería ser posible hacer que también se escriba automáticamente en mayúscula la siguiente letra.

¿Existe alguna manera obvia de escribir una macro que haga esto, o hay un paquete LaTeX que ya lo hace?

+1

¿desea escribir sus archivos tex con letras minúsculas solamente? ¿por qué? – aioobe

+1

porque a menudo soy demasiado flojo para escribir mayúsculas. – memius

+11

Creo que el lugar para que se entregue a tu holgazanería es en tu editor de texto. –

Respuesta

1

decidí resolverlo de la siguiente manera:

Como siempre compilo el código LaTeX tres veces antes de ordenar el resultado (para obtener la paginación y las referencias correctas), decidí construir las mayúsculas de las oraciones en ese proceso.

Por lo tanto, ahora tengo un script de shell que llama mi script de mayúsculas (escrito en CRM114) primero, luego pdflatex tres veces, y luego okular. De esta manera, todo sucede ns como resultado de un solo comando.

+0

El script CRM114 usa una expresión regular y el comando linux 'tr' para convertir cualquier letra minúscula precedida por un punto (que, a su vez, no va precedido de abreviaturas conocidas) y algunos espacios en blanco en letras mayúsculas. – memius

4

El siguiente código soluciona el problema.

\let\period. 
\catcode`\.\active 
\def\uppercasesingleletter#1{\uppercase{#1}} 
\def.{\period\afterassignment\periodx\let\next= } 
\def \periodx{\ifcat\space\next \next\expandafter\uppercasesingleletter \else\expandafter\next\fi} 

First. second.third. relax.relax. up 

\let\period. período de ahorro

\catcode\.\active maquillaje todos los períodos que sean símbolo activo (como macro).

\def\uppercasesingleletter#1{\uppercase{#1}} define macro \uppercasesingleletter para hacer que se ponga automáticamente en mayúscula la siguiente letra.

\def.{\period\afterassignment\periodx\let\next= } escribe el período guardado y comprueba el siguiente símbolo.

\def \periodx{\ifcat\space\next \next\expandafter\uppercasesingleletter \else\expandafter\next\fi} Si la siguiente letra es un espacio, se inserta \uppercasesingleletter.

+0

que produjo el siguiente error: ! Secuencia de control Indefinido. .-> \ periodo \ afterassignment \ periodx \ let \ next = l.18 \ parskip = 0. 5 \ baselineskip \ advance \ parskip por 0pt más 2pt ? – memius

+0

podría agregar un par de comentarios a su código, por favor :) – memius

+1

Le falta un '\ let \ period = .' antes del catcode, creo. Este tipo de manipulación de tokens solo funcionará si te comportas bien acerca de cómo usas los períodos: '{\ em first.} Second' no funciona tan bien. +1 ingenioso, sin embargo. –

2

Hace años hubo discusión de esta idea en comp.text.tex, y la conclusión general fue que no se puede hacer de manera satisfactoria. satisfactorio, en mi libro, implica no hacer personajes activos, pero no puedo ver cómo eso podría funcionar en absoluto.

personalmente, me gustaría hacer espacio activo, y tienen que luego ver \ spacefactor y \ MakeUppercase el siguiente carácter si el factor es 3000.

algo así como

\catcode\ \active % latex already has a saved space character -- \space 
\def {\ifhmode% \spacefactor is invalid 
% (or something) in vertical mode 
\ifnum\spacefactor<3000\else% note: with space active, 
% even cs-ended lines need %-termination 
\expandafter\gobbleandupper\fi}% 
\def\gobbleandupper#1{\def\tempa{#1}\def\tempb{ }% 
\ifx\tempa\tempb% can''t indent the code, either :-(
% here, we have another space 
\expandafter\gobbleandupper% try again 
\else\space% insert a "real" space to soak up the 
% space factor 
\expandafter\MakeUppercase\fi}% 

este doesn' Realmente hace el trabajo: hay suficientes cabos sueltos para tejer un jersey de salón. por ejemplo, dado que no podemos confiar en \ everypar en látex, ¿cómo se mayúscula la primera letra de un párrafo?

no ... por mucho que duela (que es por lo que evitar operaciones innecesarias clave) que necesitamos para escribir látex "adecuadamente" :-(

Cuestiones relacionadas