我在 Windows 上使用 texmaker,在使用 \printglossaries 正确使用词汇表时遇到了严重问题。安装并重新安装 activeperl 后,什么都没有改变。每当我尝试输出词汇表时,什么都没有显示出来。
所以我使用 \printnoidxglossaries。这是缺点吗?或者有人能告诉我 \printglossaries 功能失调的可能原因是什么吗?我的主要目标是创建多个词汇表来显示我在论文中使用的符号和首字母缩略词。现在我使用了一些替代解决方案(表格)来解决问题。
我到处寻找关于如何设置这样的事情的正确解释,但是无济于事。任何帮助都将不胜感激!!!
提前谢谢
A
我想要创建的词汇表的示例(现在为表格)
这是我尝试创建多个词汇表的代码。
\documentclass[12pt,twoside,booktabs,a4paper]{book}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[acronym,toc,shortcuts]{glossaries}
\newglossary[ch1]{formel}{ch2}{ch3}{Formelverzeichnis}
\makenoidxglossaries
\setacronymstyle{long-short}
\newglossarystyle{formel_altlong4colheader}{%
\setglossarystyle{altlong4colheader}%
%
%------Acronym---------
\renewcommand*{\acronymname}{Abkürzungsverzeichnis}
\newacronym[shortplural={BLKs},longplural={Belastungskollektive}]{BLK}{BLK}{Belastungskollektiv}
\newacronym{DL}{DL}{Dauerlauf}
\newacronym[shortplural={Fzg-DL},longplural={Fahrzeugdauerläufen}]{Fzg-DL}{Fzg-DL}{Fahrzeug
Dauerlauf}
%-----Formel---
\newglossaryentry{re}
{%
name={$R_e$},
description={Streckgrenze},
symbol={Pa},
sort=streckgrenze,
type=formel
}
\newglossaryentry{rm}
{%
name={$R_m$},
description={Zugfestigkeit},
symbol={Pa},
sort=Zugfestigkeit,
type=formel
}
\begin{document}
\printnoidxglossary[type=acronym]
\printnoidxglossary[type=formel,style=formel_altlong4colheader]
\setglossarystyle{formel_altlong4colheader}
\newpage
\gls{BLK}
\gls{DL}
\gls{Fzg-DL}
\gls{re}
\end{document}
答案1
实际上,生成词汇表的方法有五种(总结在第1.1 索引选项用户glossaries
手册)。第一个使用\printnoidxglossaries
,第二个使用\printglossaries
,最后一个(需要glossaries-extra
) 使用\printunsrtglossaries
。表 1.1:词汇表选项:优点和缺点总结了每种方法的优点和缺点。
使用稍微精简的 MWE 版本,所有方法如下:
1.\printnoidxglossaries
此方法不需要任何外部工具,但它是为 ASCII 排序值设计的,并且可以显著减慢文档构建速度如果sort值包含fragrance命令,则需要使用该sanitizesort
设置。
梅威瑟:
\documentclass[12pt,twoside,a4paper]{book}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[acronym,toc,shortcuts]{glossaries}
\newglossary[ch1]{formel}{ch2}{ch3}{Formelverzeichnis}
\makenoidxglossaries
\setacronymstyle{long-short}
%------Acronym---------
\renewcommand*{\acronymname}{Abkürzungsverzeichnis}
\newacronym[shortplural={BLKs},longplural={Belastungskollektive}]{BLK}{BLK}{Belastungskollektiv}
\newacronym{DL}{DL}{Dauerlauf}
\newacronym[shortplural={Fzg-DL},longplural={Fahrzeugdauerläufen}]{Fzg-DL}{Fzg-DL}{Fahrzeug
Dauerlauf}
%-----Formel---
\newglossaryentry{re}
{%
name={$R_e$},
description={Streckgrenze},
symbol={Pa},
sort=streckgrenze,
type=formel
}
\newglossaryentry{rm}
{%
name={$R_m$},
description={Zugfestigkeit},
symbol={Pa},
sort=Zugfestigkeit,
type=formel
}
\begin{document}
\printnoidxglossary[type=acronym]
\printnoidxglossary[type=formel,style=altlong4colheader]
\newpage
\gls{BLK}
\gls{DL}
\gls{Fzg-DL}
\gls{re}
\end{document}
如果文档名为myDoc.tex
,则完整的文档构建过程需要:
pdflatex myDoc
pdflatex myDoc
UTF-8 字符(例如 ü 和 ä)将无法正确排序。
第 1 页:
第 3 页:
由于rm
在文档中没有被引用(例如\gls{rm}
),它没有出现在列表中。
使用此方法时,符号通常会出现问题,但由于您已使用键sort
分配字母值(sort=streckgrenze
),因此在这种情况下不会造成问题。
此方法也不能在位置(页面)列表中形成范围。
2. makeindex
(\printglossaries
)
此方法使用辅助应用程序makeindex
生成排序列表。\makeglossaries
需要该命令来确保为以下项创建适当的文件makeindex
:
\documentclass[12pt,twoside,a4paper]{book}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[acronym,toc,shortcuts]{glossaries}
\newglossary[ch1]{formel}{ch2}{ch3}{Formelverzeichnis}
\makeglossaries
\setacronymstyle{long-short}
%------Acronym---------
\renewcommand*{\acronymname}{Abkürzungsverzeichnis}
\newacronym[shortplural={BLKs},longplural={Belastungskollektive}]{BLK}{BLK}{Belastungskollektiv}
\newacronym{DL}{DL}{Dauerlauf}
\newacronym[shortplural={Fzg-DL},longplural={Fahrzeugdauerläufen}]{Fzg-DL}{Fzg-DL}{Fahrzeug
Dauerlauf}
%-----Formel---
\newglossaryentry{re}
{%
name={$R_e$},
description={Streckgrenze},
symbol={Pa},
sort=streckgrenze,
type=formel
}
\newglossaryentry{rm}
{%
name={$R_m$},
description={Zugfestigkeit},
symbol={Pa},
sort=Zugfestigkeit,
type=formel
}
\begin{document}
\printglossary[type=acronym]
\printglossary[type=formel,style=altlong4colheader]
\newpage
\gls{BLK}
\gls{DL}
\gls{Fzg-DL}
\gls{re}
\end{document}
如果调用该文档,myDoc.tex
则完整的文档构建过程是:
pdflatex myDoc
makeindex -s myDoc.ist -t myDoc.alg -o myDoc.acr myDoc.acn
makeindex -s myDoc.ist -t myDoc.ch1 -o myDoc.ch2 myDoc.ch3
pdflatex myDoc
请注意,每个词汇表必须有单独的makeindex
调用。由于本文档有两个列表,因此必须有两次makeindex
调用。这非常麻烦,因此该glossaries
软件包提供了两个脚本,以所需的设置运行makeindex
所需的次数。在这两种情况下,脚本都会读取文件.aux
以找出需要进行哪些系统调用。
第一个脚本是makeglossaries
Perl 脚本,需要安装 Perl。构建过程现在简化为:
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
第二个脚本是makeglossaries-lite
Lua 脚本。这是在 CTAN 上makeglossaries-lite.lua
但 TeX 发行版可能会更改扩展名。(例如,Linux 上的 TeX Live 创建了一个名为 的符号链接,但makeglossaries-lite
没有扩展名。)因此,如果没有扩展名,则构建过程如下:
pdflatex myDoc
makeglossaries-lite myDoc
pdflatex myDoc
但.lua
扩展名被保留,您可能需要执行以下操作:
pdflatex myDoc
makeglossaries-lite.lua myDoc
pdflatex myDoc
我怀疑你遇到的问题是将这一步集成到 TeXMaker 中。请参阅在 Windows 上使用 Texmaker 和词汇表以获得进一步的帮助。
另一种可能性是使用automake
package 选项。这将尝试使用 TeX 的 shell escape 来运行makeindex
:
\usepackage[acronym,toc,shortcuts,automake]{glossaries}
生成的文档与上例相同。同样,此方法不是为 UTF-8 设计的,因为makeindex
不支持 UTF-8。
由于makeindex
无法识别 LaTeX 命令,包含标记的排序值可能会导致奇怪的排序。例如,排序值\emph{word}
将根据字符进行排序\
e
m
p
h
{
w
o
r
d
}
,这会将其放入符号组中(而不是更直观的 W 字母组中)。
2. xindy
(\printglossaries
)
makeindex
从文档代码的角度来看,此方法与方法非常相似,但它需要xindy
包选项:
\documentclass[12pt,twoside,a4paper]{book}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[acronym,toc,shortcuts,xindy]{glossaries}
\newglossary[ch1]{formel}{ch2}{ch3}{Formelverzeichnis}
\makeglossaries
\setacronymstyle{long-short}
%------Acronym---------
\renewcommand*{\acronymname}{Abkürzungsverzeichnis}
\newacronym[shortplural={BLKs},longplural={Belastungskollektive}]{BLK}{BLK}{Belastungskollektiv}
\newacronym{DL}{DL}{Dauerlauf}
\newacronym[shortplural={Fzg-DL},longplural={Fahrzeugdauerläufen}]{Fzg-DL}{Fzg-DL}{Fahrzeug
Dauerlauf}
%-----Formel---
\newglossaryentry{re}
{%
name={$R_e$},
description={Streckgrenze},
symbol={Pa},
sort=streckgrenze,
type=formel
}
\newglossaryentry{rm}
{%
name={$R_m$},
description={Zugfestigkeit},
symbol={Pa},
sort=Zugfestigkeit,
type=formel
}
\begin{document}
\printglossary[type=acronym]
\printglossary[type=formel,style=altlong4colheader]
\newpage
\gls{BLK}
\gls{DL}
\gls{Fzg-DL}
\gls{re}
\end{document}
在这种情况下,\makeglossaries
仍然需要创建所需的关联文件xindy
( 的替代方法makeindex
),但xindy
包选项可确保信息以 的格式写入xindy
。构建过程现在是:
pdflatex myDoc
xindy -L german -C din5007-utf8 -I xindy -M myDoc -t myDoc.ch1 -o myDoc.ch2 myDoc.ch3
xindy -L german -C din5007-utf8 -I xindy -M myDoc -t myDoc.alg -o myDoc.acr myDoc.acn
pdflatex myDoc
同样,这非常麻烦,因此您可以使用makeglossaries
或makeglossaries-lite
脚本。在这种情况下,makeglossaries-lite
效果不太好,因为它不像那么智能makeglossaries
,但由于xindy
是 Perl 脚本,因此在这种情况下使用没有任何优势makeglossaries-lite
。因此,最佳文档构建是:
pdflatex myDoc
makeglossaries myDoc
pdflatex myDoc
换句话说,文档构建过程实际上与前面的示例相同。
这种方法比前两种方法的优势在于它支持 UTF-8 和非英语语言,因此它应该正确排序德语单词。
这种方法的缺点是不支持符号。Xindy 会从排序值中删除所有 LaTeX 命令和括号,这通常是可取的(例如,如果您的排序值为 ,\emph{word}
xindy 最好将其视为word
),但当整个排序值仅由命令组成时,它会导致问题。例如,\ensuremath{\alpha}
会演变为空字符串,xindy 不喜欢这样。另一个问题是 xindy 会合并具有相同排序值的条目,因此如果删除命令导致一个条目的排序值与另一个条目相同,则将合并这些条目。
您已经sort
在符号中使用了键(例如sort=streckgrenze
),因此这不是问题。
4. bib2gls
(\printunsrtglossaries
)
此方法需要glossaries-extra
扩展包和bib2gls
辅助应用程序(需要 Java)。这使用与其他方法不同的方法。所有条目都在.bib
文件中定义。
因此,您可能拥有包含以下内容的文件abbreviations.bib
:
% Encoding: UTF-8
@abbreviation{BLK,
short = {BLK},
long = {Belastungskollektiv},
longplural = {Belastungskollektive}
}
@abbreviation{DL,
short = {DL},
long = {Dauerlauf}
}
@abbreviation{Fzg-DL,
short = {Fzg-DL},
shortplural = {Fzg-DL},
long = {Fahrzeug Dauerlauf},
longplural = {Fahrzeugdauerläufen}
}
其中symbols.bib
包含:
% Encoding: UTF-8
@symbol{re,
name={$R_e$},
description={Streckgrenze},
symbol={Pa}
}
@symbol{rm,
name={$R_m$},
description={Zugfestigkeit},
symbol={Pa}
}
文档代码现在简单多了:
\documentclass[12pt,twoside,a4paper]{book}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[abbreviations,shortcuts,record]{glossaries-extra}
\newglossary[ch1]{formel}{ch2}{ch3}{Formelverzeichnis}
\setabbreviationstyle{long-short}
\GlsXtrLoadResources[
src={abbreviations}% entries defined in abbreviations.bib
]
\GlsXtrLoadResources[
src={symbols},% entries defined in abbreviations.bib
type = formel, % put these entries in the 'formel' list
sort-field=description % sort according to the 'description' field
]
\begin{document}
\printunsrtglossary[type=abbreviations,title=Abkürzungsverzeichnis]
\printunsrtglossary[type=formel,style=altlong4colheader]
\newpage
\gls{BLK}
\gls{DL}
\gls{Fzg-DL}
\gls{re}
\end{document}
文档构建过程现在是:
pdflatex myDoc
bib2gls myDoc
pdflatex myDoc
因此,您再次需要找到一种方法将辅助应用程序集成到您的构建过程中。这种方法比前两种方法的优势在于它支持 UTF-8 和非英语排序。(文档语言设置是从文件中获取的.aux
。)它的优势还xindy
在于bib2gls
允许空和相同的排序值,但它对一些基本的内核符号命令的理解也有限。例如,它将转换\ensuremath{\alpha}
为数学希腊小写字母 alpha