Como classifico dois glossários (lista de siglas e lista de símbolos) de maneira diferente?

Como classifico dois glossários (lista de siglas e lista de símbolos) de maneira diferente?

Eu uso o glossariespacote para criar uma lista de siglas e também uma lista de símbolos.

\usepackage[acronym,style=long]{glossaries}

Para a lista de símbolos é utilizado o glossário padrão.

Agora quero ordenar a lista de siglas em ordem alfabética ( sort=standard), mas a lista de símbolos em ordem de aparecimento ( sort=def). Como faço isso?

Eu uso MikTeX 2.9 com TeXnicCenter 2 (beta) no Windows 7. Meu projeto inclui o hyperrefpacote.

Responder1

Atualizar:

A partir da glossariesversão 4.04 (que acabei de carregar no CTAN) agora existem três opções para gerar glossários:

  1. Usando TeX para classificar os glossários (novo).
  2. Usando makeindexpara classificar os glossários.
  3. Usando xindypara classificar os glossários.

As opções 2 e 3 ainda não podem usar métodos de classificação independentes para diferentes glossários, mas a nova opção pode:

\documentclass{article}

\usepackage[acronyms]{glossaries}

\makenoidxglossaries

\newacronym{cd}{CD}{covariant derivative}
\newacronym{gr}{GR}{general relativity}
\newacronym{pnd}{PND}{principle null direction}

\newglossaryentry{vfield}{
  name={\ensuremath{A^a}},
  description={Some vector field}
}

\newglossaryentry{manifold}{
  name={\ensuremath{\mathcal{M}}},
  description={Some manifold}
}

\begin{document}

Einstein developed the theory of \gls{gr}. Take the \gls{cd} and
apply it on the \glspl{pnd}. We define \gls[format=textbf]{manifold} to be some
manifold.

\clearpage

\gls[format=textbf]{vfield} is some vector field on \gls{manifold}
that has nothing to do with the \glspl{pnd}.

\printnoidxglossary[type=acronym,sort=letter]

\printnoidxglossary[sort=use]

\end{document}

Isso requer apenas duas execuções do LaTeX (não há necessidade de usar xindyou makeindex). A lista de siglas é ordenada por letra (usando datatoolo manipulador ' \dtlletterindexcompare) e o glossário principal é ordenado de acordo com o uso. Outras opções de classificação são: word(ordenação de palavras usando datatoolo manipulador de \dtlwordindexcompare), def(ordem de definição), case(diferencia maiúsculas de minúsculas usando o manipulador datatoolde \dtlcompare) e nocase(não diferencia maiúsculas de minúsculas usando datatoolo manipulador de \dtlicompare).

Página 1:

Imagem da página 1

Página 2:

Imagem da página 2

Principais desvantagens:

  • A classificação é mais lenta do que ao usar makeindex/ xindy(exceto para o usemétodo, que não requer nenhuma classificação).
  • Locais consecutivos não serão transformados em intervalo (embora seja possível redefinir a macro que exibe a lista de locais).
  • As entradas devem ser definidas antes do início do documentambiente.

Solução usando datagidx:

Aqui está minha solução original usando datagidx(parte dopacote de ferramentas de dados):

\documentclass{article}

\usepackage{datagidx}
\usepackage[colorlinks]{hyperref}

\newgidx{acronym}{Acronyms}
\newgidx{symbol}{Symbols}

\DTLgidxSetDefaultDB{acronym}

\newacro{html}{hypertext markup language}
\newacro{css}{cascading style sheet}
\newacro{xml}{extensible markup language}

\DTLgidxSetDefaultDB{symbol}

\newterm[description={sample 1}]{B}
\newterm[description={sample 2}]{X}
\newterm[description={sample 3}]{A}
\newterm[description={sample 4}]{C}

\begin{document}

\gls{B}, \gls{X}, \gls{C}, \gls{A}.

\acr{xml}, \acr{html}, \acr{css}.

% default sort is alphabetical
\printterms[database=acronym,columns=1,style=align]

% sort by definition (i.e. don't sort)

\printterms[database=symbol,sort={},columns=1,style=align]

\end{document}

Resultado:

Imagem do resultado

Responder2

Obrigado! Na verdade, acabei de encontrar uma maneira de fazer isso com o pacote glossários. É possível, já que defino um comando para todos os meus símbolos de qualquer maneira...

\documentclass[a4paper,twoside,11pt]{article}

\usepackage[acronym,style=long,sanitize={sort=false}]{glossaries}   % acronyms and list of symbols
\makeglossaries

% sort symbol index in order of appearance
% warning: this is only valid for less than 1000 pages!
\makeatletter
\def\three@digits#1{\ifnum#1<100 0\ifnum#1<10 0\fi\fi\number#1}

% \nomNoPrint declares a new glossary entry
\newcommand{\nomNoPrint}[3]{\newglossaryentry{#1}{
    name={#2},
    symbol={#2},
    description={#3},
    sort={A\three@digits{\value{page}}}
    }\glsadd[format=hyperbf]{#1}}   
\makeatother

% \nom declares the entry and prints the symbol
\newcommand{\nom}[3]{\nomNoPrint{#1}{#2}{#3}#2}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% define some acronyms
\newacronym{cd}{CD}{covariant derivative}
\newacronym{pnd}{PND}{principle null direction}
\newacronym{gr}{GR}{general relativity}

% define some symbols
\newcommand{\manifoldDNA}{\ensuremath{\mathcal{M}}} % the do-not-add definition
\newcommand{\manifold}{\glsadd{manifold}\manifoldDNA}

\newcommand{\vfieldDNA}{\ensuremath{A^a}}
\newcommand{\vfield}{\glsadd{vfield}\vfieldDNA}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}

Einstein developed the theory of \gls{gr}. Take the \gls{cd} and apply it on the \glspl{pnd}. We define
\nom{manifold}{\manifoldDNA}{Some manifold}\ 
to be some manifold.

\clearpage

\nom{vfield}{\vfieldDNA}{Some vector field} is some vector field on \manifold\ that has nothing to do with the \glspl{pnd}.

\printglossary[type=\acronymtype]
\printglossary

\end{document}

Então fica assim:

insira a descrição da imagem aqui

Não é tão agradável quanto a outra abordagem, porque é preciso definir os comandos \manifoldDNAe \vfieldDNApara evitar que o mesmo número de página seja impresso duas vezes no glossário (uma vez normal e uma vez em negrito).

informação relacionada