具有“词汇表”的条目的多个父级

具有“词汇表”的条目的多个父级

我正在使用该包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}

这会产生与以前相同的结果,但现在示例条目链接到第一个父级而不是第二个父级下的条目。

相关内容