每章或每节的词汇表

每章或每节的词汇表

我正在寻找一种在包的帮助下glossaries按章节或部分创建词汇表的方法。

特定章节的词汇表中应仅包含该章节中使用的术语。如果术语在多个章节中使用 - 则出现在相应的词汇表中。

示例(在环境的帮助下完成description,仅作为示例):

在此处输入图片描述

我怎样才能实现这个目标?

答案1

由于您似乎对位置列表不感兴趣,您可以将位置计数器更改为section并定义一个词汇表样式,以检查当前部分是否在位置列表中。 您可能希望整理词汇表,但这里有一个例子:¹

\documentclass{article}

\usepackage{datatool-base}
\usepackage[counter=section,xindy]{glossaries}

\GlsSetXdyMinRangeLength{0}

\makeglossaries

\newglossaryentry{E}{name={\ensuremath{E}},
 description={energy}}

\newglossaryentry{m}{name={\ensuremath{m}},
  description={mass}}

\newglossaryentry{c}{name={\ensuremath{c}},
  description={speed of light}}

\newglossaryentry{v}{name={\ensuremath{v}},
  description=velocity}

\newglossarystyle{mystyle}%
{%
  \setglossarystyle{list}%
  \renewcommand*{\glossaryentrynumbers}[1]{\striprelax##1\endstriprelax}%
  \renewcommand*{\glsXsectionXglsnumberformat}[2]{##2}%
  \renewcommand*{\delimR}{,}%
  \renewcommand*{\glossentry}[2]{%
    \edef\doifinlocation{\noexpand\ifinlocation{\thesection}{##2}}%
    \doifinlocation
    {%
      \item \glossentryname{##1} \glossentrydesc{##1}%
    }%
  }%
}

% \ifinlocation{number}{location list}{body}

\newcommand{\ifinlocation}[3]{%
 \DTLifinlist{#1}{#2}{#3}{}%
}

\def\striprelax\relax#1\endstriprelax{#1}

\setglossarystyle{mystyle}

\begin{document}

\section{Sample Section}

\printglossary

\begin{equation}
\gls{E} = \gls{m}\cdot \gls{c}^2
\end{equation}

\section{Another Section}

\printglossary

\begin{equation}
\gls{E} = \frac{\gls{m}\gls{v}^2}{2}
\end{equation}

\end{document}

请注意,这使用 xindy 而不是 makeindex 来抑制范围形成,这使得测试当前部分是否在列表中变得更容易。

结果如下:

文件图像

这是使用bib2glsglossaries-extra扩展包。条目现在在.bib文件中定义,例如syms.bib

@symbol{E,
 name={\ensuremath{E}},
 description={energy}
}

@symbol{m,
  name={\ensuremath{m}},
  description={mass}
}

@symbol{c,
  name={\ensuremath{c}},
  description={speed of light}
}

@symbol{v,
  name={\ensuremath{v}},
  description={velocity}
}

文档代码现在如下所示:

\documentclass{article}

\usepackage[record]{glossaries-extra}

\GlsXtrRecordCounter{section}

\GlsXtrLoadResources[
  src={syms}, % entries defined in syms.bib
]

\newcommand{\printsectionglossary}[1][]{%
  \printunsrtglossary*[nonumberlist,#1]{%
    \renewcommand{\printunsrtglossaryhandler}[1]{%
     \glsxtrfieldxifinlist{##1}{record.section}{\thesection}
     {\glsxtrunsrtdo{##1}}%
     {}%
    }%
  }%
}

\begin{document}

\section{Sample Section}

\printsectionglossary

\begin{equation}
\gls{E} = \gls{m}\cdot \gls{c}^2
\end{equation}

\section{Another Section}

\printsectionglossary

\begin{equation}
\gls{E} = \frac{\gls{m}\gls{v}^2}{2}
\end{equation}

\end{document}

结果和以前一样。如果你想使用该hyperref包,那么你需要做一些小调整以防止目标名称重复:

\documentclass{article}

\usepackage[colorlinks]{hyperref}
\usepackage[record]{glossaries-extra}

\GlsXtrRecordCounter{section}

\GlsXtrLoadResources[
  src={syms}, % entries defined in syms.bib
]

\newcommand{\printsectionglossary}[1][]{%
  \printunsrtglossary*[nonumberlist,#1]{%
    \renewcommand{\printunsrtglossaryhandler}[1]{%
    \glsxtrfieldxifinlist{##1}{record.section}{\thesection}
    {\glsxtrunsrtdo{##1}}%
    {}%
   }%
   \ifcsundef{theHsection}%
   {%
     \setkeys{printgloss}{targetnameprefix={record.\csuse{thesection}.}}%
   }%
   {%
     \setkeys{printgloss}{targetnameprefix={record.\csuse{theHsection}.}}%
   }%
  }%
}

\begin{document}

\section{Sample Section}

\printsectionglossary

\begin{equation}
\gls{E} = \gls{m}\cdot \gls{c}^2
\end{equation}

\section{Another Section}

\printsectionglossary

\begin{equation}
\gls{E} = \frac{\gls{m}\gls{v}^2}{2}
\end{equation}

\printunsrtglossary
\end{document}

这会\gls在文档末尾建立到主(完整)词汇表的链接。

文件图像


¹ 原始答案使用了一些现已弃用的命令\glossarystyle(现在\setglossarystyle)和\glossaryentryfield

\newglossarystyle{mystyle}%
{%
  \glossarystyle{list}%
  \renewcommand*{\glossaryentrynumbers}[1]{\striprelax##1\endstriprelax}%
  \renewcommand*{\glsXsectionXglsnumberformat}[2]{##2}%
  \renewcommand*{\delimR}{,}%
  \renewcommand*{\glossaryentryfield}[5]{%
    \edef\doifinlocation{\noexpand\ifinlocation{\thesection}{##5}}%
    \doifinlocation
    {%
      \item ##2 ##3%
    }%
  }%
}

这些不应与 v4.0 及更高版本一起使用。

相关内容