Problemas com o pacote de nomenclatura: pagenumber devorar

Problemas com o pacote de nomenclatura: pagenumber devorar

Eu descobri o seguinte bug com o nomenclpacote ao usar o \pagenumbering{gobble}. O exemplo de MWE a seguir funciona bem, mas quando \pagenumbering{gobble}não é comentado, meus itens de nomenclatura são rejeitados.

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}

Executando os comandos:

pdflatex document.tex
makeindex -s nomencl.ist -o document.nls document.nlo
pdflatex document.tex

Por que eu usei \pagenumbering{gobble}?

Por causa da popularidadeesta pergunta e resposta.

GAMBIARRA

Encontrei a seguinte solução alternativa usando \thispagestyle{empty}em vez de \pagenumbering{gobble}, embora isso não explique por que o problema ocorreu em primeiro 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}

Responder1

TLDR: não é um bug, mas é o resultado da makeindexexigência de um número de página válido, pois foi projetado para criar índices.


Pacotes como nomencl(e glossariesetc) precisam classificar e agrupar as informações que precisam aparecer na lista de nomenclatura/símbolos/termos. O TeX realmente não foi projetado para esse tipo de processamento de dados. (O glossariespacote tem uma opção que faz isso, mas sofre de severas limitações, como longo tempo de construção e classificação frágil.) Isso significa que é necessária uma ferramenta externa. O autor do pacote tem duas opções:

  1. Use uma ferramenta existente.
  2. Crie uma nova ferramenta.

A primeira opção é a mais simples e é adotada pelo nomencl. Existem duas ferramentas principais disponíveis nas distribuições TeX projetadas para esse tipo de ação: makeindexe xindy. No entanto, essas ferramentas são projetadas especificamente para índices, que exigem números de páginas (locais). Dos dois, xindyé mais flexível, mas ainda requer um local válido ou uma referência cruzada para cada entrada, ao passo que makeindexsempre requer um local e reconhece apenas um estilo específico de local. (As referências cruzadas são tratadas descartando-se a localização.)

No caso de listas de nomenclatura/termos/símbolos que possuem uma descrição acompanhante, o número da página muitas vezes não é exibido (ou é apenas listado no índice), mas como uma ferramenta de indexação é usada, um número de página válido é necessário para o ferramenta para aceitar os dados mesmo que a lista de locais formada pela aplicação de indexação possa ser ignorada pelo LaTeX.

Esta é uma desvantagem fundamental de usar uma ferramenta de indexação para algo que é semelhante a um índice, mas não exatamente igual. A vantagem de usar uma ferramenta de indexação existente (especialmente makeindexa que já existe há muito tempo) é que a maioria das distribuições TeX deve ter o aplicativo instalado e pronto para uso. No caso do makeindex, ele também existe há tempo suficiente para que o código tenha sido inspecionado e agora é considerado seguro o suficiente para ser adicionado à lista de aplicativos confiáveis ​​do TeX, o que significa que ele pode ser executado no escape restrito do shell.

No caso de \pagenumbering{@gobble}, o local (obtido pela expansão \thepage) torna-se uma string vazia, que não é um local válido, por isso é rejeitado por makeindex.

A segunda opção (criar uma nova ferramenta) é mais complicada, especialmente para autores de pacotes que sabem escrever código LaTeX, mas não estão familiarizados com linguagens de programação. Novos aplicativos levam tempo para chegar às distribuições TeX:

  • Se forem escritos em uma linguagem compilada (como C), eles serão executados apenas no sistema operacional em que foram compilados. (Por exemplo, se eu escrever um programa em C, ele só rodará no Linux, não no Windows, etc.) Se quiser rodar em outro sistema operacional, você precisa portar o código e compilá-lo para sua plataforma.
  • Se eles forem escritos em uma linguagem interpretada (como Perl) ou em uma linguagem compilada em código que requer um ambiente de tempo de execução (como Java), eles serão executados em qualquer sistema operacional que tenha o interpretador ou ambiente de tempo de execução instalado.

Em ambos os casos, a distribuição da nova aplicação é limitada a sistemas que podem executar a aplicação compilada ou que podem executar o ambiente de interpretação/tempo de execução necessário para executar a aplicação. Isso normalmente exclui sistemas operacionais antigos.

Oglossaries-extraO pacote combina ambas as abordagens: assim como o glossariespacote base, ele pode ser usado com makeindexou xindy, mas diferentemente do pacote base, ele também pode ser usado combib2gls, que foi projetado especificamente para o glossaries-extrapacote e, portanto, permitirá locais vazios (na verdade, permitirá qualquer local, mas só formará intervalos quando puder 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}

Construção do documento (onde o arquivo é chamado test.tex):

pdflatex test
bib2gls test
pdflatex test

Resultado:

imagem do documento

informação relacionada