如何以不同的方式对两个词汇表(首字母缩略词列表和符号列表)进行排序?

如何以不同的方式对两个词汇表(首字母缩略词列表和符号列表)进行排序?

我使用该glossaries包创建了一个首字母缩略词列表以及一个符号列表。

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

对于符号列表,使用标准词汇表。

现在我想按字母顺序 ( sort=standard) 对首字母缩略词列表进行排序,但按出现顺序 ( ) 对符号列表进行排序sort=def。我该怎么做?

我在 Windows 7 上使用带有 TeXnicCenter 2(测试版)的 MikTeX 2.9。我的项目包含该hyperref软件包。

答案1

更新

glossaries4.04 版本(我刚刚上传到 CTAN)开始,现在有三个用于生成词汇表的选项:

  1. 使用 TeX 对词汇表进行排序(新)。
  2. 用于makeindex对词汇表进行排序。
  3. 用于xindy对词汇表进行排序。

选项 2 和 3 仍然不能对不同的词汇表使用独立的排序方法,但新选项可以:

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

这仅需要运行两次 LaTeX(无需使用xindymakeindex)。首字母缩略词列表按字母排序(使用 的datatool处理\dtlletterindexcompare程序),主词汇表按用途排序。其他排序选项包括:(使用 的处理程序word进行单词排序)、(定义顺序)、 (使用 的处理程序区分大小写)和(使用 的处理程序不区分大小写)。datatool\dtlwordindexcomparedefcasedatatool\dtlcomparenocasedatatool\dtlicompare

第 1 页:

第 1 页图片

第2页:

第 2 页图片

主要缺点:

  • 排序比使用makeindex/时慢xindy(方法除外use,它不需要任何排序)。
  • 连续的位置不会变成一个范围(尽管可以重新定义显示位置列表的宏)。
  • 必须在环境启动之前定义条目document

解决方案使用datagidx

这是我原来的解决方案datagidx(部分数据工具包):

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

结果:

结果图像

答案2

谢谢!我实际上刚刚找到了一种使用词汇表包来实现这一点的方法。这是可能的,因为我无论如何都会为所有符号定义一个命令...

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

然后它看起来像这样:

在此处输入图片描述

它不如另一种方法好,因为必须定义\manifoldDNA\vfieldDNA命令以避免在词汇表中两次打印相同的页码(一次正常,一次粗体)。

相关内容