Para LaTeX un punto no es una orden de imprimir un punto: es una orden que cambia la anchura del espacio siguiente. El hueco de Dr. Smith mide 3,33252 pt y el de ends here. Next mide 4,44336 pt: el mismo . del teclado, 1,11084 pt de diferencia en un documento de 10 pt. Y la prueba decisiva es el carácter anterior al punto: una minúscula significa fin de frase, una mayúscula significa abreviatura. Esa única regla está detrás del hueco estirado tras NASA. Next, del espacio raro de Fig. 1 y de la extrañeza que se siente tras e.g.. Esta página cubre el mecanismo (\sfcode), los remedios (\@, \ , ~, \frenchspacing), la diferencia entre \ldots y \dots, el separador de miles \, y cómo elegir comas, puntos y corchetes japoneses.
Por qué el espacio tras un punto se ensancha: el mecanismo \sfcode
Porque cada carácter lleva un factor de espacio, y cuando el valor dejado por el carácter anterior supera 2000, TeX añade al hueco siguiente \fontdimen7, el «espacio extra» de la fuente. Medido en un article de 10 pt: el espacio interpalabra ordinario \fontdimen2 vale 3,33252 pt y el extra 1,11084 pt, en total 4,44336 pt: un espacio de fin de frase es exactamente 1,33 veces un espacio interpalabra. Los valores se consultan haciendo seguir \the\sfcode de un carácter; un punto informa 3000. Ese 3000 es el punto de partida de todo.
| Carácter | sfcode por defecto | Efecto en el espacio siguiente |
|---|---|---|
. ? ! | 3000 | espacio de fin de frase; +1,11084 pt a 10 pt |
: | 2000 | hueco algo mayor; justo en el umbral |
; | 1500 | solo cambian levemente el estiramiento y la compresión |
, | 1250 | ídem; nunca cuenta como fin de frase |
) | 0 | transparente; deja pasar el valor del carácter anterior |
A B C | 999 | menor que 1000, lo que anula el 3000 de un . posterior |
Dr. Smith va justo y ends here. Next va ancho: por qué las mayúsculas tienen sfcode 999
Porque el sfcode de una mayúscula es 999, justo por debajo de 1000. La regla de TeX dice: cuando el factor de espacio actual está por debajo de 1000, un carácter siguiente con factor superior a 1000 solo lo eleva hasta 1000. Así, un . (3000) tras una A deja en realidad un factor de 1000 y el espacio extra de fin de frase no aparece. Una a minúscula, en cambio, vale exactamente 1000, de modo que el 3000 del . siguiente pasa intacto. Medido: A. a da 18,60657 pt, y A.\ a —con el espacio escrito explícitamente— da exactamente los mismos 18,60657 pt. En cambio a. a da 17,21802 pt y baja a 16,10718 pt con \frenchspacing. Esa diferencia de 1,11084 pt es justamente el espacio extra de fin de frase.
Este diseño no hace más que codificar el hábito tipográfico inglés de la época en que se escribió TeX: las frases se separaban más que las palabras. Para que los puntos de abreviatura —Dr., Ph.D., Mr.— no se confundieran con finales de frase, TeX adoptó una heurística de una línea: «si acaba en mayúscula, es una abreviatura». Al ser heurística, falla en ambos sentidos. NASA. Next sí es un final de frase pero se compone estrecho, y Fig. 1 sí es una abreviatura pero se compone ancho. Las dos secciones siguientes corrigen cada caso.
\@ para decir «aquí sí acaba la frase»: NASA\@. Next
\@ significa «trata la puntuación que sigue como final de frase», y se coloca antes del punto. Escriba He joined NASA\@. Then he left. y el 999 dejado por la mayúscula A queda anulado, de modo que el 3000 del . pasa. Medido, A. a da 18,60657 pt y A\@. a da 19,7174 pt: una diferencia de 1,11083 pt, exactamente el espacio extra de fin de frase. Colocado del lado equivocado, NASA.\@ Next no hace nada. Recuérdelo así: \@ va delante del punto. Es una herramienta para unas pocas veces al año: solo cuando la frase acaba en una sigla (NASA, USA, DNA) o en un nombre terminado en mayúscula.
Tras una abreviatura, \ o ~: e.g. y Fig.~1
El fallo inverso —una abreviatura terminada en minúscula tomada por final de frase— se corrige escribiendo el espacio como orden. \ (barra invertida más espacio) significa «pon aquí un espacio interpalabra ordinario» e ignora por completo el factor de espacio. Medido, Fig. 1 da 26,5213 pt y Fig.\ 1 da 25,41046 pt: 1,11084 pt menos, es decir, el espacio interpalabra correcto. e.g., i.e., etc., cf., vs., Fig., Eq. y No. caen todos en esta trampa.
Para los números de referencia como Fig. 1, en cambio, ~ (tilde) es mejor que \ . Un ~ es «un espacio del ancho de un espacio interpalabra en el que no se permite corte de línea»; medido, Fig.~1 da los mismos 25,41046 pt que Fig.\ 1. Misma anchura, más la prohibición de cortar. Como un número de figura, un número de ecuación o una inicial separados por un salto de línea se leen mal, lo habitual es escribir Fig.~\ref{fig:one}, Eq.~\eqref{eq:main}, D.~E.~Knuth. Recuérdelo así: ~ para números de referencia, \ para las demás abreviaturas.
% a sentence really ending on a capital
He joined NASA\@. Then he left.
% abbreviations that must NOT get a sentence space
See, e.g.\ Knuth (1984); cf.\ the appendix.
% reference numbers: same width, but unbreakable
Fig.~\ref{fig:one} and Eq.~\eqref{eq:main}, after D.~E.~Knuth.\frenchspacing: la línea que casi todo documento no inglés necesita
\frenchspacing es una declaración que desactiva en bloque el espacio extra de fin de frase; basta una línea en el preámbulo. Su interior es asombrosamente simple: la definición en latex.ltx pone seis valores de sfcode a 1000, de modo que ., ?, !, :, ; y , se tratan como caracteres ordinarios (el \nonfrenchspacing por defecto restaura 3000/3000/3000/2000/1500/1250). Medido, a. a baja de 17,21802 pt a 16,10718 pt mientras A. a se queda en 18,60657 pt: los lugares que nunca recibieron el espacio extra, naturalmente, no cambian.
Pese al nombre, ese espaciado más ceñido no es una peculiaridad francesa. El francés, el alemán, el español, el italiano y la mayoría de las lenguas distintas del inglés no separan las frases más que las palabras. Incluso la composición inglesa moderna se ha decantado en gran medida por el espacio simple. Pasar un idioma a babel suele cambiarlo por usted, pero declarar \frenchspacing uno mismo es la vía fiable. LaTeX lo usa, por cierto, dentro del entorno verbatim: en código no interesa un hueco estirado tras un .. Mantener o no el espacio ancho de fin de frase es una política que conviene acordar de antemano con los coautores; cambiarla a mitad de camino extiende un diff por todas las páginas.
\documentclass{article}
\usepackage[T1]{fontenc}
\frenchspacing % . ? ! : ; , all behave like ordinary letters
\begin{document}
This ends here. Next sentence starts with an ordinary space.
\end{document}Los puntos suspensivos son \ldots, no ...: y la diferencia con \dots
Tres puntos tecleados, ..., miden 8,3313 pt; \ldots mide 13,33008 pt: 1,6 veces más. En ... los puntos se apelmazan y dejan de leerse como una omisión, mientras que \ldots pone entre ellos el hueco correcto. Use, pues, siempre \ldots o \dots para los puntos suspensivos en texto corrido. ¿Y la diferencia entre ambos? En LaTeX desnudo, ninguna. latex.ltx define \dots y a continuación escribe \let\ldots\dots: es literalmente la misma orden; medidos, ambos dan 13,33008 pt en modo texto, igual que \textellipsis.
La diferencia aparece solo si amsmath está cargado, y solo en modo matemático. amsmath redeclara ambos: \ldots pasa a ser siempre los puntos bajos, mientras que \dots se convierte en una orden que mira lo que sigue y elige la altura de los puntos según el contexto. En una serie de comas toma puntos bajos (\dotsc); entre operadores binarios o relaciones, puntos centrados (\dotsb, es decir \cdots); con integrales \dotsi, con multiplicación \dotsm. Compílelo y extraiga con pdftotext: $a+\dots+b$ sale como «a + · · · + b» y $a+\ldots+b$ como «a + . . . + b»: caracteres realmente distintos. En modo texto ambos siguen cayendo en \textellipsis, así que en prosa no hay nada que sopesar.
| Comando | Salida | Cuándo usarlo |
|---|---|---|
\ldots | … (en la línea base) | omisión en prosa; en fórmulas, siempre los puntos bajos |
\dots | depende del contexto | con amsmath elige la altura según el contexto; el defecto en fórmulas |
\cdots | ⋯ (centrados) | entre operadores, como en a+\cdots+b |
\vdots | ⋮ (verticales) | omitir filas en una matriz o un sistema |
\ddots | ⋱ (diagonales) | omisión a lo largo de la diagonal de una matriz |
\usepackage{amsmath}
% ...
He hesitated\ldots{} then went on.
\[
x_1, x_2, \dots, x_n \qquad a_1 + a_2 + \dots + a_n
\]
\[
\begin{pmatrix} a & \cdots & b \\ \vdots & \ddots & \vdots \end{pmatrix}
\]Separar cifras con \,: construir «1 000» con 1,6663 pt
\, inserta un espacio fino y mide 1,6663 pt, la sexta parte de un cuadratín. Mida 1\,000: 21,66142 pt frente a 19,99512 pt de 1000, una diferencia de exactamente 1,6663 pt. Como el convenio coma/punto para agrupar cifras está invertido entre países (1,000 inglés es 1.000 alemán), la práctica internacional recomienda desde hace tiempo separar los grupos con un espacio fino. \, es justamente ese espacio. La misma orden se pone delante de una unidad: 5\,\mathrm{kg}.
Ahora bien, esparcir \, a mano deja de compensar cuando crece el número de cifras. En un original repleto de números y unidades, delegue en siunitx y escriba \num{1000000} o \qty{5}{\kilogram}; la agrupación, el espacio ante la unidad e incluso el tratamiento del signo menos se mantendrán coherentes. Piense en \, como la herramienta para el número suelto que aparece en una frase.
Japonés: ¿、。 o ,.? No hay opción de clase en jsclasses
Qué signos aparecen lo decide lo que se escribe en el código fuente; ninguna opción de clase lo cambia. jsclasses —jsarticle, jsbook y compañía— no tiene opción alguna que cambie la puntuación a ,.. Si quiere coma y punto de ancho completo, lo más directo es escribir ,. en el cuerpo del texto. El estilo desciende de JIS Z 8301, la norma que rige la presentación de los documentos normativos japoneses, que usaba ,y .en escritura horizontal, y sigue muy extendido en libros de matemáticas y artículos de ciencias e ingeniería. Por otro lado, el dictamen del Consejo de Asuntos Culturales de 2022 sobre la redacción de documentos oficiales fijó la coma japonesa 「、」 como opción por defecto, admitiendo ,en escritura horizontal según las circunstancias. Siga las normas de la publicación y el uso de su campo, y sea coherente dentro de un mismo documento: en eso se agota la decisión.
% comma-period style: just type the marks you want
\documentclass{ltjsarticle}
\begin{document}
本稿では,記法を次のように定める.まず,集合 $A$ を……
\end{document}Corchetes japoneses 「」『』(): cuál para qué
El diálogo, la cita y el realce de una expresión llevan corchetes de esquina 「」; los títulos de libros y obras, y toda cita anidada dentro de 「」, llevan corchetes de esquina dobles 『』. Los incisos y las lecturas llevan paréntesis de ancho completo (). En japonés use corchetes de ancho completo y no mezcle los () occidentales de medio ancho: estos llevan blancos distintos, de modo que uno solo basta para que el texto flote visiblemente en la línea. A la inversa, dentro de una cita occidental (latina), use ( ) de medio ancho.
| Corchete | Nombre | Uso habitual |
|---|---|---|
「 」 | kagi-kakko, corchetes de esquina | diálogo, cita, realce; las comillas japonesas primarias |
『 』 | corchetes de esquina dobles | títulos de obras y anidamiento dentro de 「」 |
( ) | paréntesis de ancho completo | incisos, notas, lecturas |
[ ] | corchetes de ancho completo | añadidos editoriales y elisiones señaladas |
【 】 | corchetes lenticulares | títulos y etiquetas con realce fuerte |
〔 〕 | corchetes de caparazón | notas e incisos; alternativa a los corchetes |
Cómo obtiene realmente sus blancos la puntuación japonesa —las anchuras registradas en el JFM, el ajuste aplicado cuando se suceden corchetes de cierre, \inhibitxspcode, el \xkanjiskip insertado automáticamente entre japonés y latín, y las prohibiciones de inicio y fin de línea con sus penalizaciones— se trata en la página de detalles de composición japonesa. El punto práctico que hay que llevarse de aquí es simple: no escriba espacios propios alrededor de la puntuación. Se sumarían al blanco que el motor ya prevé y abrirían un hueco antinatural.
Rastree el código antes de entregar: elimine la deriva de puntuación de una pasada
La deriva de puntuación nunca provoca un error de compilación; solo se manifiesta como una molestia en el PDF. Lo fiable es, pues, un barrido mecánico del código al final. En escritura colaborativa es seguro que un capítulo se escribió suponiendo \frenchspacing, otro deja un espacio desnudo tras e.g. y un tercero mezcla paréntesis de medio ancho en el japonés. Pase estos cuatro puntos por grep.
- Espacios desnudos tras abreviatura. Busque el espacio que sigue a
e.g.,i.e.,cf.,etc.,Fig.y sustitúyalo por\o~(innecesario si usa\frenchspacing). - Frases que acaban en mayúscula. Busque sigla más
.(NASA.,USA.,DNA.) e inserte\@allí donde de verdad acabe la frase. - Puntos suspensivos. Busque tres puntos seguidos
...y cámbielos por\ldots; dentro de fórmulas, déjelo en manos de\dotsdeamsmath. - Paréntesis de medio ancho en japonés. Busque
(y)dentro de líneas japonesas y páselos a ( ) de ancho completo. De paso, compruebe que no se haya tecleado ningún espacio a mano junto a un signo de puntuación.
# abbreviation followed by a bare space
grep -nE "(e\.g\.|i\.e\.|cf\.|etc\.|Fig\.) " *.tex
# a sentence that may end on an acronym
grep -nE "[A-Z]{2,}\." *.tex
# three typed periods instead of \ldots
grep -n "\.\.\." *.tex