使用此网站中的一些示例以及词汇表文档,我能够为我的论文报告获得一些自定义词汇表样式。但是,我注意到我使用的数组表中存在一个非常奇怪的格式问题:
每当我将词汇表条目名称字段置于数学模式时(例如,在下面的 mwe 中用 $ABC$ 代替 ABC),这个问题就会得到解决。但这种卑鄙的伎俩并不是我想要的以非斜体粗体显示首字母缩略词的好方法。它最终会变成这样:
我花了好几个小时试图弄清楚这一点,考虑了代码中的几乎每一行,包括索引和编译的替代方法以及使用多个 loadglsentries(未包含在下面的 mwe 中)。有人能向我解释一下这里发生了什么吗?非常感谢您的帮助。
使用以下方式编译此 mwe
pdflatex %.tex|makeindex -s %.ist -t %.alg -o %.acr %.acn|pdflatex %.tex.
平均能量损失
\documentclass{article}
\usepackage{array}
\usepackage{glossaries}
\newglossarystyle{tabx3col}{%
% put the glossary in a longtable environment:
\renewenvironment{theglossary}%
{\begin{longtable}{p{0.1\textwidth}p{0.2\textwidth}p{0.7\textwidth}}}%
{\end{longtable}}%
% Set the table's header:
\renewcommand*{\glossaryheader}{}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Main (level 0) entries displayed in a row:
\renewcommand*{\glossaryentryfield}[5]{%
\glstarget{##1}{\textbf{##2}}% Name
& \glsentryuseri{##1}
& ##3 % Description
\\ % end of row
}%
}
\newglossary[alg]{acronym}{acr}{acn}{Nomenclature}
%% glossary entries
%\loadglsentries[acronym]{acronyms.tex}
\newglossaryentry{abc}{name={ABC},description={First three letters alphabet},type={acronym}}
\newglossaryentry{123}{name={123},description={First three numbers},type={acronym}}
\newglossaryentry{TEX}{name={TEX},description={Latex scripting language},type={acronym}}
\makeglossaries
\begin{document}
\glsaddall
\printglossary[type={acronym},style={tabx3col}]
\end{document}
答案1
默认情况下,每个字母组之间有一个垂直间隙。这是由\ifglsnogroupskip
可以使用 packagenogroupskip
包选项设置的条件决定的。该命令\glsgroupskip
通常会查询此条件以确定是否添加垂直间隙。您的样式不会覆盖默认定义,其\glsgroupskip
定义为:
\ifglsnogroupskip \else \indexspace \fi
这意味着你的样式试图插入\indexspace
字母组之间,这与longtable
环境冲突。要解决这个问题,你只需添加
\renewcommand*{\glsgroupskip}{}%
符合你的风格。
您的样式中还使用了已弃用的命令。较新的用法应该重新定义,\glossentry
而不是\glossaryentryfield
:
\newglossarystyle{tabx3col}{%
% put the glossary in a longtable environment:
\renewenvironment{theglossary}%
{\begin{longtable}{p{0.1\textwidth}p{0.2\textwidth}p{0.7\textwidth}}}%
{\end{longtable}}%
% Set the table's header:
\renewcommand*{\glossaryheader}{}%
% No heading between groups:
\renewcommand*{\glsgroupheading}[1]{}%
% Main (level 0) entries displayed in a row:
\renewcommand*{\glossentry}[2]{%
\glstarget{##1}{\textbf{\glossentryname{##1}}}% Name
& \glsentryuseri{##1}
& \glossentrydesc{##1} % Description
\\ % end of row
}%
\renewcommand*{\glsgroupskip}{}%
}