Lingüística (gb4e/tipa/avm)

Lo que hace a LaTeX verdaderamente imprescindible en un artículo de lingüística no son los árboles ni los símbolos fonéticos, sino la numeración. «Véase (1)», «compárese con (3b)»: los números de ejemplo se invocan una y otra vez desde el texto corrido, e insertar un ejemplo desplaza todo lo que viene después. Hacerlo a mano es imposible, y así es como los lingüistas llegan a gb4e y expex, los paquetes para ejemplos numerados y glosas. Esta página se organiza en torno a esa maquinaria de numeración y cubre las glosas interlineales (\gll y \glt), la transcripción IPA (tipa y Unicode), los tableaux de OT y las estructuras de rasgos. También deja constancia de las trampas realmente encontradas en TeX Live 2024: un solo guion bajo en el nombre de una etiqueta hace que gb4e muera sin producir PDF alguno.

Ejemplos numerados y subejemplos: dos maneras de obtener (1) y (1a)

Solo hay dos opciones realmente vivas: gb4e y expex. En gb4e se alinean \ex dentro de un entorno exe y se anida un entorno xlist allí donde hacen falta subejemplos: bajo (1) aparecen a. y b., y las referencias se apoyan en los \label / \ref estándar de LaTeX. expex procede de otro modo: los ejemplos se encierran en \pex\xe, los subejemplos toman \a, y las referencias pasan por su propio \getref y no por el \ref de LaTeX. La elección se reduce casi por completo a si desea apoyarse en la maquinaria de referencias de LaTeX o le basta con una aparte. linguex (v4.3) y covington (v2.14) también están en TeX Live 2024; el primero destaca por una notación breve, casi de puntuación, como \ex.

PaqueteEn TeX Live 2024Cómo funcionan las referenciasQué requiere cuidado
gb4esí (su registro de cambios se detiene en 2010)\label / \ref estándar de LaTeXmuere de forma fatal ante un guion bajo; necesita \noautomath
expexsí (v5.1b)sus propios \getref / \getfullref / \nextxel \ref de LaTeX no sirve, ni tampoco \cref
langsci-gb4esí (fechado 2022-10-21)como gb4euna revisión de gb4e mantenida por Language Science Press
linguexsí (v4.3)LaTeX estándarnotación breve, casi de puntuación, como \ex.
covingtonsí (v2.14)LaTeX estándaruna caja de herramientas veterana de ejemplos, glosas y símbolos
avmnoel avm.sty de Manning no viene incluido; use langsci-avm

Componer glosas interlineales con gb4e: \gll y \glt

La esencia de una glosa interlineal es la alineación vertical palabra por palabra, y de eso se encarga \gll. Ponga los datos fuente en la primera línea y la glosa palabra por palabra en la segunda, cierre cada una con \\ y gb4e partirá ambas por los espacios y alineará verticalmente las palabras correspondientes. La traducción libre va a \glt en una tercera línea (para tres líneas alineadas, \glll). Ojo con esto: la unidad de alineación es «una palabra separada por espacios». Si una palabra fuente pide dos palabras de glosa, únalas con un punto en un solo token, this.one, que es además lo que prescriben las Reglas de Glosado de Leipzig; el paquete leipzig incluido en TeX Live define las abreviaturas estándar como \Erg y \Pfv. Las marcas de gramaticalidad se pasan entre corchetes, como \ex[*]{...}. Para un ejemplo suelto existe además una forma breve que prescinde del entorno exe: encerrarlo entre \ea\z.

latex
\documentclass{article}
\usepackage{gb4e}
\noautomath          % see the next section: this line prevents a fatal error
\begin{document}

\begin{exe}
  \ex \label{ex:one}
  \gll Kore wa rei desu.\\
       this TOP example COP\\
  \glt `This is an example.'
  \begin{xlist}
    \ex \label{ex:sub} A sub-example, printed with the label a.
  \end{xlist}
  \ex[*]{ Sleep colorless green ideas furiously. }
\end{exe}

See (\ref{ex:one}) and (\ref{ex:sub}).
\end{document}

Cuando gb4e muere con ! TeX capacity exceeded, sorry [parameter stack size=20000].

La causa es el guion bajo, y el arreglo cabe en una línea: \noautomath justo después de \usepackage{gb4e}. Basta escribir \label{ex_one} para que pdfLaTeX en TeX Live 2024 se derrumbe así: ! TeX capacity exceeded, sorry [parameter stack size=20000]., con \gb@ifnextchar apareciendo en la traza y el proceso acabando en ==> Fatal error occurred, no output PDF file produced! No sale ni un byte de PDF. Lo mismo ocurre con \cite{smith_2020}: unir autor y año con un guion bajo es una clave BibTeX de lo más corriente, así que el documento se rompe en cuanto se añade una bibliografía. Con \noautomath puesto, ambos casos compilan.

Por qué ocurre está escrito en el propio código de gb4e. gb4e convierte _ y ^ en caracteres activos para que puedan escribirse subíndices y superíndices en el texto corriente. El efecto es realmente espectacular: con gb4e cargado se teclean NP_i, t_j y X^0 directamente en un párrafo. Sin él, la misma entrada da ! Missing $ inserted., y para un artículo de sintaxis que escribe centenares de veces etiquetas de categoría con índice, eso es una comodidad real. El precio es un choque frontal con cualquier otra macro que use _ en su sentido TeX. Una nota del código lo dice exactamente: este archivo permite _ y ^ en el texto corriente y por tanto debe cargarse después de cualquier archivo que los emplee en su sentido TeX, y menciona \noautomath como forma de desactivar la función. Esa es la sustancia del consejo habitual: «cargue gb4e el último en el preámbulo».

\cref imprime ?? 1: cref reference format for label type 'xnumi' undefined

El arreglo son dos líneas en el preámbulo: \crefname{xnumi}{example}{examples} y \crefname{xnumii}{example}{examples}. Cargue gb4e junto con cleveref y la compilación termina sin un solo error, pero \cref{ex:one} sale como ?? 1. Al mirar el .aux aparece \newlabel{ex:one@cref}{{[xnumi][1][]1}...}, mientras que el registro guarda LaTeX Warning: cref reference format for label type 'xnumi' undefined. cleveref tiene un nombre para cada clase de contador, pero desconoce el contador de ejemplos de gb4e, xnumi (los subejemplos usan xnumii), y por eso coloca ?? donde debería ir el nombre. Como es un aviso y no un error, la compilación pasa: así es como acaba entregándose un PDF con doscientas apariciones de ?? 1. Con esas dos líneas, \cref{ex:one} imprime example 1 y \cref{ex:sub} imprime example 1a.

En cambio, el choque con hyperref, que suele mencionarse a continuación, no se reprodujo en TeX Live 2024. Con \usepackage{hyperref} colocado antes o después de gb4e, los ejemplos con \gll se componen sin error y \ref devuelve correctamente (1). Las afirmaciones en línea de que «gb4e y hyperref no pueden usarse juntos» parecen información caducada, al menos para las versiones aquí incluidas. El principio del orden de carga sigue en pie, eso sí: si no usa \noautomath, cargue gb4e después de cualquier otro paquete que utilice _.

latex
\documentclass{article}
\usepackage{gb4e}
\usepackage{cleveref}
% Without these two lines \cref prints "?? 1" and the run still succeeds:
%   LaTeX Warning: cref reference format for label type `xnumi' undefined
\crefname{xnumi}{example}{examples}    % top-level examples: (1), (2), ...
\crefname{xnumii}{example}{examples}   % sub-examples: (1a), (1b), ...
\begin{document}
\begin{exe}
  \ex \label{ex:one} A top-level example.
  \begin{xlist}
    \ex \label{ex:sub} A sub-example.
  \end{xlist}
\end{exe}
See \cref{ex:one} and \cref{ex:sub}.   % -> "example 1 and example 1a"
\end{document}

La maquinaria de referencias de expex: \getref, \getfullref, \nextx

En expex, las etiquetas no se escriben con \label sino entre corchetes angulares justo después del ejemplo: \pex<top>, y \a<one> para un subejemplo. Las referencias pasan por \getref{top}, que da 1; un subejemplo lleva su padre como prefijo, así que \getref{top.one} da a; y \getfullref{top.two} da 1b, combinando el número principal con la subetiqueta. Para referencias hacia adelante existen \nextx (el número del ejemplo siguiente) y \lastx (el del anterior), de modo que «véase (1) más abajo» puede escribirse sin citar cifra alguna. Cuando una referencia no se resuelve, la salida lleva [one] entre corchetes y el registro contiene ====> EXPEX WARNING: tag one is called but not defined.: en eso, no dejar pasar en silencio una referencia sin resolver, resulta más seguro que la combinación con cleveref.

latex
\documentclass{article}
\usepackage{expex}     % lives in tex/generic: works under plain TeX too
\begin{document}
Consider (\nextx).     % forward reference to the example below

\pex<top>
  \a<one> \begingl
    \gla Kore wa rei desu.//
    \glb this TOP example COP//
    \glft `This is an example.'//
  \endgl
  \a<two> A second sub-example.
\xe

% \getref{top} -> 1   \getref{top.one} -> a   \getfullref{top.two} -> 1b
See (\getref{top}), (\getref{top.one}) and (\getfullref{top.two}).
\end{document}

expex lo escribió John Frampton, de la Northeastern University; el README lleva un copyright de 2006–2017, la versión incluida es la v5.1b, y la guía de usuario alcanza las 82 páginas. Técnicamente resulta revelador dónde vive: tex/generic/expex/. No es, pues, algo propio de LaTeX sino un juego de macros que corre también bajo plain TeX; expex.sty es solo una fina envoltura para LaTeX. La sintaxis de las glosas también difiere de gb4e: dentro de \begingl\endgl se alinean \gla (los datos fuente), \glb (la glosa palabra por palabra) y \glft (la traducción libre), y cada línea se cierra con //, no con \\. Ese // es lo primero que hacen mal quienes se estrenan con expex.

El instrumental de Language Science Press: langsci-gb4e y langsci-avm

El rincón más activamente mantenido del ecosistema LaTeX para la lingüística es hoy el conjunto de paquetes que publica Language Science Press, la editorial lingüística de acceso abierto. langsci-gb4e.sty (fechado 2022-10-21) es un gb4e puesto en orden que además integra las funciones de cgloss y jambox. El archivo reside en tex/xelatex/langsci/, pero kpsewhich lo encuentra sea cual sea el motor, y de hecho compila sin error tanto con pdfLaTeX como con XeLaTeX. En el mismo directorio está langscibook.cls, la clase real con la que la editorial compone sus propios libros. Una editorial que regala sus libros deposita además en CTAN la clase que los fabrica, de modo que un autor puede generar en casa el mismo PDF que la editorial.

Para las estructuras de rasgos —matrices atributo-valor— conviene saber que el paquete avm de Chris Manning, al que aluden los textos antiguos, no está en TeX Live 2024. \usepackage{avm} se detiene en ! LaTeX Error: File 'avm.sty' not found. El sustituto es langsci-avm (Felix Kopecky, v0.3.0, 21 de febrero de 2023), cuyo README afirma sin rodeos que «serves the same purpose as Christopher Manning's avm package, but shares no code base with that package». Su notación es una orden y no un entorno: \avm{ [ cat & [ head & noun \\ case & nom ] ] }, donde & separa atributo de valor y \\ separa filas. Corchetes, ángulos, paréntesis y llaves componen cada uno el delimitador correspondiente. El manual incluye una sección sobre la conversión desde el avm de Manning, que es por donde empezar si arrastra un manuscrito antiguo.

Cómo componer el IPA: tipa, Unicode o tipauni

pdfLaTeX pide tipa, XeLaTeX y LuaLaTeX piden Unicode tecleado directamente, y tipauni es el puente entre ambos. tipa (de Rei Fukui) escribe el IPA mediante una abreviatura ASCII: \textipa{[tSi:z]}, donde S es ʃ, T es θ, N es ŋ, @ es ə y P es ʔ. Aprender esa correspondencia es el primer escollo; una vez aprendida, la entrada es rápida y basta con pdfLaTeX. Allí donde se suceden varias transcripciones, el entorno IPA envuelve todo un tramo en lugar de repetir \textipa{...}. Si dispone de XeLaTeX o LuaLaTeX, la vía directa es elegir con fontspec una tipografía con cobertura IPA y teclear [tʃiːz] literalmente en el editor. TeX Live 2024 incluye Linguistics Pro (linguisticspro), una familia OpenType con símbolos IPA y letras de tono, así que esta vía está abierta sin instalar nada.

Ahora bien, las dos vías no producen el mismo PDF. Extraiga el texto de un PDF compuesto con tipa mediante pdftotext y lo que vuelve es [tSi:z]: la abreviatura que tecleó, no el IPA. pdffonts muestra como fuente incrustada TeX-tipa10, una Type 1 cuya codificación es Builtin; la capa de texto del PDF no es, por tanto, Unicode, así que copiar o buscar no dará con el IPA. Componga el mismo contenido con XeLaTeX y Linguistics Pro y pdftotext devuelve [tʃiːz], [θɔːt], [sɪŋ] y [ma˥˥]. Si imagina a un revisor buscando una transcripción, o a usted mismo recuperando sus datos desde el PDF, esa diferencia no se despacha con un encogimiento de hombros.

Aquí entra tipauni (autor निरंजन, v0.7a, 13 de febrero de 2023, GPL v3+): un paquete que conserva las órdenes de TIPA pero emite caracteres Unicode. Cambiar \usepackage{tipa} por \usepackage{tipauni} en un documento y compilarlo con LuaLaTeX hizo que pdftotext devolviera [tʃiːz], [θɔːt], [sɪŋ]. Dicho de otro modo, veinte años de \textipa{...} pueden migrar a un PDF consultable sin reescribirse. Su ejemplo incluido presupone Charis SIL, pero en una máquina sin esa tipografía recurrió a New Computer Modern y siguió funcionando. Como hermano de tipa, el mismo conjunto incluye vowel, que dibuja el cuadrilátero vocálico mediante \putcvowel; phonrule, para componer reglas fonológicas, también está en TeX Live 2024.

latex
% Three routes to IPA, and what pdftotext gets back from each PDF.

% 1. pdfLaTeX + tipa -> text layer is the shorthand, not IPA: "[tSi:z]"
\usepackage{tipa}
\textipa{[tSi:z]}   \textipa{[TO:t]}   \textipa{[sIN]}

% 2. LuaLaTeX + tipauni -> same commands, Unicode output: "[tSiz]" becomes IPA
\usepackage{tipauni}
\textipa{[tSi:z]}

% 3. XeLaTeX/LuaLaTeX + fontspec -> type the IPA directly
\usepackage{fontspec}
\setmainfont{LinguisticsPro-Regular.otf}[
  Path = /usr/local/texlive/2024/texmf-dist/fonts/opentype/public/linguisticspro/]
% then simply: [tʃiːz] [θɔːt] [sɪŋ] [ma˥˥]
EntradaMotorQué devuelve pdftotext
tipapdfLaTeX[tSi:z]: la abreviatura; la fuente incrustada es TeX-tipa10
tipauniLuaLaTeX / XeLaTeX[tʃiːz], con las órdenes de tipa sin cambios
fontspecXeLaTeX / LuaLaTeX[tʃiːz]; también pasan las letras de tono como ˥˥

Tableaux de la Teoría de la Optimidad: ot-tableau y dónde va el *!

Los tableaux de OT vienen del paquete ot-tableau y solo necesitan tres órdenes: entrada, restricción y candidato. \inp{/pat/} da la forma de entrada, una serie de \const{NoCoda} coloca las restricciones de izquierda a derecha, y cada candidato se escribe como \cand{pa}{}{*}{}: la forma candidata seguida de sus violaciones frente a cada restricción. Al ganador se lo marca con \cand[\Optimal]{...} y recibe la mano señaladora. Una violación fatal se teclea sin más como *! y se imprime así. Lo importante es que la jerarquía de restricciones no es otra cosa que el orden en que se escribe \const, de modo que reordenar para un experimento consiste en mover esas líneas y no en recolocar columnas a mano. El entorno tableau compiló sin error con la versión que trae TeX Live 2024.

latex
\usepackage{ot-tableau}
...
\begin{tableau}{c|c|c}
  \inp{/pat/}
  \const{NoCoda}\const{Max}\const{Dep}
  \cand[\Optimal]{pa}{}{*}{}
  \cand{pat}{*!}{}{}
  \cand{pati}{}{}{*!}
\end{tableau}

Dibujar árboles sintácticos: forest malinterpreta en silencio la notación con punto de qtree

Los árboles sintácticos tienen aquí su propia página («Árboles (forest/qtree)»), así que esta sección solo consigna el punto que muerde durante una migración. qtree y tikz-qtree ponen un punto delante de la etiqueta del nodo\Tree [.S [.NP ] [.VP ] ]—, mientras que la notación de forest es [S [NP] [VP]] y no usa punto alguno. Y si se le pasa a forest la notación de qtree, no se levanta ningún error: [.S [.NP Kim ]] se compone tan tranquilamente como un nodo llamado literalmente .S. Un árbol cuya forma es correcta pero cuyas etiquetas empiezan todas por un punto se explica por eso. Para la comparación completa y la maquetación automática de forest, siga el enlace de related.

Por último, lo que esta página deja fuera a propósito. Las fórmulas químicas y los esquemas de reacción (mhchem, chemfig) y la composición recreativa o de afición tienen cada una su propia página. Del lado lingüístico quedan al margen la sintaxis de covington y linguex si su elección recae en ellos, los corchetes semánticos de langsci-avm para LFG (la opción lfg, que exige XeLaTeX) y los glosarios mediante glossaries, ninguno de ellos central. La primera decisión en este campo sigue siendo, como se ha dicho, qué maquinaria de numeración de ejemplos adopta. Si es gb4e, escriba desde el principio las tres líneas de \noautomath y \crefname. Si es expex, acostúmbrese al modismo \getref. Cambiar cuando el manuscrito ya pasa de cien ejemplos cuesta más de lo que uno cree.