Descubrí el siguiente error con el nomencl
paquete al usar \pagenumbering{gobble}
. El siguiente ejemplo de MWE funciona bien, pero cuando \pagenumbering{gobble}
no está comentado, se rechazan mis elementos de nomenclatura.
MWE document.tex
\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{nomencl}
\usepackage{lipsum}
\makenomenclature
\begin{document}
%\pagenumbering{gobble}
\nomenclature{$c$}{Speed of light in a vacuum inertial frame}
\nomenclature{$h$}{Planck constant}
\lipsum[1]
\printnomenclature
\end{document}
Ejecutando los comandos:
pdflatex document.tex
makeindex -s nomencl.ist -o document.nls document.nlo
pdflatex document.tex
¿Por qué usé? \pagenumbering{gobble}
?
Debido a la popularidad deesta pregunta y respuesta.
SOLUCIÓN ALTERNA
Encontré la siguiente solución para usar \thispagestyle{empty}
en lugar de \pagenumbering{gobble}
, aunque esto no explica por qué ocurrió el problema en primer lugar.
\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{nomencl}
\usepackage{lipsum}
\makenomenclature
\begin{document}
\lipsum[1]
\thispagestyle{empty}
\clearpage
\setcounter{section}{0}
\pagenumbering{arabic}
\nomenclature{$c$}{Speed of light in a vacuum inertial frame}
\nomenclature{$h$}{Planck constant}
\lipsum[1]
\printnomenclature
\end{document}
Respuesta1
TLDR: No es un error, sino el resultado de makeindex
requerir un número de página válido, ya que está diseñado para crear índices.
Paquetes como nomencl
(y glossaries
etc.) tienen que ordenar y cotejar la información que debe aparecer en la lista de nomenclatura/símbolos/términos. TeX realmente no está diseñado para ese tipo de procesamiento de datos. (El glossaries
paquete tiene una opción que hace esto, pero adolece de graves limitaciones, como un tiempo de construcción prolongado y una clasificación frágil). Esto significa que se requiere una herramienta externa. El autor del paquete tiene dos opciones:
- Utilice una herramienta existente.
- Crea una nueva herramienta.
La primera opción es la más sencilla y es adoptada por nomencl
. Hay dos herramientas principales disponibles con distribuciones TeX que están diseñadas para este tipo de acción: makeindex
y xindy
. Sin embargo, estas herramientas están diseñadas específicamente para índices, que requieren números de página (ubicaciones). De los dos, xindy
es más flexible, pero aún requiere una ubicación válida o una referencia cruzada para cada entrada, mientras que makeindex
siempre requiere una ubicación y solo reconoce un estilo de ubicación específico. (Las referencias cruzadas se tratan descartando la ubicación).
En el caso de listas de nomenclatura/términos/símbolos que tienen una descripción adjunta, el número de página a menudo no se muestra (o simplemente aparece en el índice), pero debido a que se utiliza una herramienta de indexación, se requiere un número de página válido para la herramienta para aceptar los datos incluso aunque LaTeX pueda ignorar la lista de ubicaciones formada por la aplicación de indexación.
Este es un inconveniente fundamental de utilizar una herramienta de indexación para algo que es como un índice pero no exactamente igual. La ventaja de utilizar una herramienta de indexación existente (especialmente makeindex
, que existe desde hace mucho tiempo) es que la mayoría de las distribuciones TeX deberían tener la aplicación instalada y lista para usar. En el caso de makeindex
, también ha existido el tiempo suficiente para que el código haya sido inspeccionado y ahora se considera lo suficientemente seguro como para agregarlo a la lista de aplicaciones confiables de TeX, lo que significa que se puede ejecutar en el escape de shell restringido.
En el caso de \pagenumbering{@gobble}
, la ubicación (obtenida al expandir \thepage
) se convierte en una cadena vacía, que no es una ubicación válida, por lo que es rechazada por makeindex
.
La segunda opción (crear una nueva herramienta) es más complicada, especialmente para los autores de paquetes que pueden escribir código LaTeX pero no están familiarizados con los lenguajes de programación. Las nuevas aplicaciones tardan en llegar a las distribuciones TeX:
- Si están escritos en un lenguaje compilado (como C), sólo se ejecutan en el sistema operativo en el que fueron compilados. (Por ejemplo, si escribo un programa en C, solo se ejecutará en Linux, no en Windows, etc.) Si desea ejecutarlo en otro sistema operativo, debe portar el código y compilarlo para su plataforma.
- Si están escritos en un lenguaje interpretado (como Perl) o en un lenguaje compilado en código que requiere un entorno de ejecución (como Java), se ejecutarán en cualquier sistema operativo que tenga instalado el intérprete o el entorno de ejecución.
En cualquier caso, la distribución de la nueva aplicación se limita a sistemas que pueden ejecutar la aplicación compilada o que pueden ejecutar el intérprete/entorno de ejecución necesario para ejecutar la aplicación. Por lo general, esto excluye los sistemas operativos antiguos.
Elglossaries-extra
El paquete combina ambos enfoques: al igual que el glossaries
paquete base, se puede usar con makeindex
o xindy
, pero a diferencia del paquete base, también se puede usar conbib2gls
, que fue diseñado específicamente para el glossaries-extra
paquete y, por lo tanto, permitirá ubicaciones vacías (de hecho, permitirá cualquier ubicación, pero solo formará rangos cuando pueda determinar valores numéricos).
MWE:
\documentclass[11pt, a4paper, twoside]{extarticle}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@symbol{speedoflight,
name={\ensuremath{c}},
description={Speed of light in a vacuum inertial frame}
}
@symbol{planck,
name={\ensuremath{h}},
description={Planck constant}
}
\end{filecontents*}
\usepackage{lipsum}
\usepackage[record]{glossaries-extra}% 'record' option required for bib2gls
\GlsXtrLoadResources[
src={\jobname},% entries in \jobname.bib
selection={all},% select all defined entries
sort={none},% don't bother sorting
save-locations=false% location lists not required
]
\begin{document}
\pagenumbering{gobble}
\lipsum[1]
\printunsrtglossary
\end{document}
Compilación del documento (donde se llama el archivo test.tex
):
pdflatex test
bib2gls test
pdflatex test
Resultado: