我正在使用词汇表包来介绍我的书中的术语。现在我想向printglossary
名为“column”的命令添加另一个选项,如下所示:
\printglossary[column=X]% which X is 1 or 2
描述:
我希望column=1
默认处于活动状态,但是当用户输入时column=2
,我希望输出的排版方式就像用户在正文中使用以下代码一样:
\twocolumn
\printglossary
\onecolumn
这是我的代码:
\documentclass{book}
\usepackage[xindy]{glossaries}
\makeglossaries
\newglossaryentry{maths}{
name=mathematics,
description={Mathematics is what mathematicians do in foo bar}}
\begin{document}
I'm talking about \gls{maths}.
\printglossary[title=Special Terms]
\end{document}
您能帮我添加这个选项吗?
答案1
该glossaries
包使用xkeyval
包来定义 key=value 选项。使用的键系列\printglossary
称为printgloss
,因此您可以使用任何命令xkeyval
(例如)定义新键\define@choicekey
。困难在于如何将选项与接口\printglossary
。\onecolumn
词汇表之后的部分可以通过重新定义来实现\glossarypostamble
。\twocolumn
之前的部分\printglossary
需要以不同的方式处理,因为\glossarypreamble
在标题之后,此时更改列布局为时已晚。相反,column=2
可以修改选项\glossarysection
,使其首先切换到两列模式,然后打印标题。
在下面的 MWE 中,我曾经将\define@choicekey
用户的选择限制为column=1
或column=2
。任何其他值都会导致错误。
\documentclass{book}
\usepackage[xindy]{glossaries}
\makeatletter
\let\orgglossarysection\glossarysection
\newcommand*\twocolumnglossarysection[2][\glossarytoctitle]{%
\twocolumn
\orgglossarysection[#1]{#2}%
}
\define@choicekey{printgloss}{column}[\val\nr]{1,2}%
{%
\ifcase\nr\relax
% column=1
\let\glossarysection\orgglossarysection
\renewcommand*{\glossarypostamble}{}
\or
% column=2
\let\glossarysection\twocolumnglossarysection
\renewcommand*{\glossarypostamble}{\onecolumn}
\fi
}
\makeatother
\makeglossaries
\newglossaryentry{maths}{
name=mathematics,
description={Mathematics is what mathematicians do in foo bar}}
\begin{document}
I'm talking about \gls{maths}.
\printglossary[title=Special Terms,column=2]
\end{document}