我使用該glossaries
包創建首字母縮略詞列表以及符號列表。
\usepackage[acronym,style=long]{glossaries}
對於符號列表,使用標準術語表。
現在我想按字母順序對首字母縮寫列表進行排序 ( sort=standard
),但按出現順序對符號列表進行排序 ( sort=def
)。我怎麼做?
我在 Windows 7 上使用 MikTeX 2.9 和 TeXnicCenter 2(測試版)hyperref
。
答案1
更新:
從glossaries
版本 4.04(我剛剛上傳到 CTAN)開始,現在有三個選項用於產生術語表:
- 使用 TeX 對術語表進行排序(新)。
- 用於
makeindex
對術語表進行排序。 - 用於
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 運行(無需使用xindy
或makeindex
)。首字母縮寫列表按字母排序(使用 的datatool
處理\dtlletterindexcompare
程序),主要詞彙表根據用途排序。其他排序選項有:(使用 的處理程序word
進行字排序)、(定義順序)、 (使用的處理程序區分大小寫)和(使用的處理程序不區分大小寫)。datatool
\dtlwordindexcompare
def
case
datatool
\dtlcompare
nocase
datatool
\dtlicompare
第 1 頁:
第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
命令以避免相同的頁碼在術語表中列印兩次(一次正常,一次粗體)。