我正在使用该包glossaries
来生成索引。我正在使用sub-entries
和我的词汇表条目定义中的字段parent
。为了方便使用我的索引,我希望一些条目可以多次显示在不同的地方。我的第一次尝试是在词汇表条目中简单地声明该条目有多个父条目,方法是设置
parent={key1,key2}
但是这个软件包似乎不支持glossaries
。还有其他方法吗?
答案1
不支持多个父级glossaries
。如果您有超链接,那么像 这样的词汇表条目命令会链接到哪个词条命令就存在歧义\gls
。不过,有办法解决这个问题。
方法 1:
定义两个具有相同名称但不同父级的条目,并在其给定父级的上下文中使用相关条目。如果您没有位置列表,这种方法最有效。示例:
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
% arara: pdflatex
\documentclass{article}
\usepackage[colorlinks]{hyperref}
\usepackage[style=index,nonumberlist]{glossaries}
\makeglossaries
\newglossaryentry{parent1}
{%
name={parent 1},%
description={First parent}%
}
\newglossaryentry{parent2}
{%
name={parent 2},%
description={Second parent}%
}
\newglossaryentry{child1}
{%
name={sample},
description={an example},%
parent={parent1}%
}
\newglossaryentry{child2}
{%
name={sample},%
description={an example},%
parent={parent2}%
}
\begin{document}
Reference \gls{child1} in the context of \gls{parent1}.
Reference \gls{child2} in the context of \gls{parent2}.
\printglossaries
\end{document}
第一个引用链接到 下的条目First parent
。第二个引用链接到 下的条目Second parent
。
方法 2:
这种方法更先进。它存储与子条目关联的标签列表,并定义\mgls
使用 来遍历列表,\glsadd
但最后一个标签除外\gls
。示例:
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
% arara: pdflatex
\documentclass{article}
\usepackage{etoolbox}
\usepackage[colorlinks]{hyperref}
\usepackage[style=index]{glossaries}
\makeglossaries
\newglossaryentry{parent1}
{%
name={parent 1},%
description={First parent}%
}
\newglossaryentry{parent2}
{%
name={parent 2},%
description={Second parent}%
}
\newcommand{\dochild}[3]{%
\listcsadd{#2.labels}{#3.#2}%
\newglossaryentry{#3.#2}%
{%
#1,parent={#3}%
}%
}
% syntax: \addchild{label}{parent list}{key=val list}
\newcommand*{\addchild}[3]{%
\csdef{#1.labels}{}%
\forcsvlist{\dochild{#3}{#1}}{#2}%
}
\newcommand*{\mgls}[2][]{%
\def\glslastlabel{}%
\forlistcsloop
{%
\ifdefempty{\glslastlabel}{}{\glsadd[#1]{\glslastlabel}}%
\def\glslastlabel
}%
{#2.labels}%
\gls[#1]{\glslastlabel}%
}
\newcommand*{\mglsadd}[2][]{%
\forlistcsloop
{%
\glsadd[#1]%
}%
{#2.labels}%
}
\addchild{sample}{parent1,parent2}%
{%
name={sample},%
description={an example}%
}
\begin{document}
\mgls{sample}.
\printglossaries
\end{document}
这里\mgls
将链接到使用 定义子条目时使用的最后一个命名父条目下的条目\addchild
。
如果您希望链接到不同的词汇表条目,则可以使用\mglsadd
并明确使用\gls
标签形式父母.
孩子。 像这样:
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
% arara: pdflatex
\documentclass{article}
\usepackage{etoolbox}
\usepackage[colorlinks]{hyperref}
\usepackage[style=index]{glossaries}
\makeglossaries
\newglossaryentry{parent1}
{%
name={parent 1},%
description={First parent}%
}
\newglossaryentry{parent2}
{%
name={parent 2},%
description={Second parent}%
}
\newcommand{\dochild}[3]{%
\listcsadd{#2.labels}{#3.#2}%
\newglossaryentry{#3.#2}%
{%
#1,parent={#3}%
}%
}
% syntax: \addchild{label}{parent list}{key=val list}
\newcommand*{\addchild}[3]{%
\csdef{#1.labels}{}%
\forcsvlist{\dochild{#3}{#1}}{#2}%
}
\newcommand*{\mgls}[2][]{%
\def\glslastlabel{}%
\forlistcsloop
{%
\ifdefempty{\glslastlabel}{}{\glsadd[#1]{\glslastlabel}}%
\def\glslastlabel
}%
{#2.labels}%
\gls[#1]{\glslastlabel}%
}
\newcommand*{\mglsadd}[2][]{%
\forlistcsloop
{%
\glsadd[#1]%
}%
{#2.labels}%
}
\addchild{sample}{parent1,parent2}%
{%
name={sample},%
description={an example}%
}
\begin{document}
\mglsadd{sample}\gls{parent1.sample}.
\printglossaries
\end{document}
这会产生与以前相同的结果,但现在示例条目链接到第一个父级而不是第二个父级下的条目。