我有多个浮动环境(scheme
、figure
和table
),分别带有\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}