¿Cómo clasifico dos glosarios (lista de acrónimos y lista de símbolos) de manera diferente?

¿Cómo clasifico dos glosarios (lista de acrónimos y lista de símbolos) de manera diferente?

Utilizo el glossariespaquete para crear una lista de acrónimos y una lista de símbolos.

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

Para la lista de símbolos se utiliza el glosario estándar.

Ahora quiero ordenar la lista de siglas alfabéticamente ( sort=standard), pero la lista de símbolos en orden de aparición ( sort=def). ¿Cómo puedo hacer eso?

Utilizo MikTeX 2.9 con TeXnicCenter 2 (beta) en Windows 7. Mi proyecto incluye el hyperrefpaquete.

Respuesta1

Actualizar:

A partir de glossariesla versión 4.04 (que acabo de subir a CTAN) ahora existen tres opciones para generar glosarios:

  1. Usando TeX para ordenar los glosarios (nuevo).
  2. Utilizando makeindexpara ordenar los glosarios.
  3. Utilizando xindypara ordenar los glosarios.

Las opciones 2 y 3 aún no pueden usar métodos de clasificación independientes para diferentes glosarios, pero la nueva opción sí puede:

\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}

Esto sólo requiere dos ejecuciones de LaTeX (no es necesario utilizar xindyo makeindex). La lista de siglas está ordenada por letra (usando datatoolel \dtlletterindexcomparecontrolador) y el glosario principal está ordenado según su uso. Otras opciones de clasificación son: word(ordenación de palabras usando datatoolel \dtlwordindexcomparecontrolador), def(orden de definición), case(distingue entre mayúsculas y minúsculas usando datatoolel \dtlcomparecontrolador) y nocase(distingue entre mayúsculas y minúsculas usando datatoolel \dtlicomparecontrolador).

Página 1:

Imagen de la página 1

Página 2:

Imagen de la página 2

Principales inconvenientes:

  • La clasificación es más lenta que cuando se usa makeindex/ xindy(excepto por el usemétodo, que no requiere ninguna clasificación).
  • Las ubicaciones consecutivas no se convertirán en un rango (aunque es posible redefinir la macro que muestra la lista de ubicaciones).
  • Las entradas deben definirse antes del inicio del documententorno.

Solución usando datagidx:

Aquí está mi solución original usando datagidx(parte delpaquete de herramientas de datos):

\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:

Imagen del resultado

Respuesta2

¡Gracias! De hecho, encontré una manera de hacer eso con el paquete de glosarios. Es posible, ya que de todos modos defino un comando para todos mis símbolos...

\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}

Entonces se ve así:

ingrese la descripción de la imagen aquí

No es tan agradable como el otro enfoque, porque hay que definir los comandos \manifoldDNAy \vfieldDNApara evitar que el mismo número de página se imprima dos veces en el glosario (una vez normal y otra en negrita).

información relacionada