如何让浮动 \caption 条目中的第一个 \gls 显示为 \glsfirst

如何让浮动 \caption 条目中的第一个 \gls 显示为 \glsfirst

我有多个浮动环境(schemefiguretable),分别带有\caption,我希望能够重复使用(我\include从另一个文件中浮动,因此它们不会弄乱我的文本部分)。在使用\gls条目时出现了一个问题,对于某些文档,我希望条目的第一个条目为\glsfirst,其余用途为\gls

理想情况下,我只想\gls在我的所有方案/图表/表格中使用并定义一个命令,允许\gls每个唯一条目的第一个充当,\glsfirst但我的尝试失败了。对于某些文档,只需让其为是有意义的,\gls\gls对于其他文档,第一个\gls需要在第一次使用时在浮动内定义。起初,我尝试:

\AtBeginEnvironment{figure}{\let\gls\glsfirst}
\AtBeginEnvironment{figure*}{\let\gls\glsfirst}

用作figure示例。这不起作用,因为它在第一次使用后仍然存在\gls(我不知道为什么我甚至尝试这样做)。然后我尝试:

\AtBeginEnvironment{figure}{\glsresetall}
\AtBeginEnvironment{figure*}{\glsresetall}

这在标题内有效,但随后超出浮动环境的范围并扩展到随后的主文档文本\include{float}(例如),我不确定是\AtBeginEnvironment在浮动环境内部还是外部起作用。

有没有办法让第一个唯一\gls条目表现为\glsfirst并且仅适用于其各自的浮动环境?这可以通过仅对\glsfirst每个术语使用来手动完成,但如果需要,我不介意每个浮动都可以在不同的文档中重复使用。

梅威瑟:

\documentclass{article}

\usepackage{biblatex}   % For \autocap
\usepackage{glossaries}

\makeglossaries

\newglossaryentry{adh}
    {%
    name={ADH},
    description={Alcohol dehydrogenase},
    user1={\autocap{a}lcohol dehydrogenase},
    first={\glsuseri{\glslabel} (\glsname{\glslabel})},
    }

\newglossaryentry{vspm}
    {%
    name={VSPM},
    description={Very small polar molecule},
    first={\autocap{v}ery small polar molecule (VSPM)},
    }

\begin{document}

Foo \gls{adh} and \gls{vspm}.

\begin{figure}[h!]
\caption{Foo bar \gls{adh} baz foo \gls{vspm}. Foo bar \gls{adh} baz foo \gls{vspm}.}
\end{figure}

Foo \gls{adh} and \gls{vspm}.

\end{document}

目前的情况:

在此处输入图片描述

答案1

在此处输入图片描述

一种解决方法(因为使用的方法\patchcmd无法etoolbox\caption或一起使用\@caption)只需在序言中设置

\let\cccc\glslocalresetall

\cccc并在文本前面加上(或随便你怎么称呼它),例如

\caption{\cccc Foo bar  baz foo \gls{vspm}. \gls{vspm}.}

令人惊讶的是,当这种情况相当典型时,在浮动标题中自动重置词汇表似乎是多么困难(除非我忽略了新glossaries-extra包中的设置或某些内容)。

\documentclass{article}

\usepackage{etoolbox}
\usepackage{biblatex}   % For \autocap
\usepackage{glossaries}

\makeglossaries

\newglossaryentry{adh}
    {%
    name={ADH},
    description={Alcohol dehydrogenase},
    user1={\autocap{a}lcohol dehydrogenase},
    first={\glsuseri{\glslabel} (\glsname{\glslabel})},
    }

\newglossaryentry{vspm}
    {%
    name={VSPM},
    description={Very small polar molecule},
    first={\autocap{v}ery small polar molecule (VSPM)},
    }

\let\cccc\glslocalresetall

\begin{document}

\noindent Foo \gls{adh} and \gls{vspm}.

\begin{figure}[t]
\caption{\cccc Foo bar  baz foo \gls{vspm}. \gls{vspm}.}
\end{figure}

Foo \gls{adh} and \gls{vspm}.

\end{document}

相关内容