答案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 来抑制范围形成,这使得测试当前部分是否在列表中变得更容易。
结果如下:
这是使用bib2gls
与glossaries-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 及更高版本一起使用。