我知道有人问过类似的问题,但我找不到解决我的问题的方法。
我最初的问题开始于使用glossaries
包,在framed
环境中使用首字母缩写词,如下所示:
\begin{framed}
bla bla \gls{Y2K} bla bla
\end{framed}
预期的行为是,Y2K 旁边应该有一个脚注,该脚注链接首字母缩略词,并在页面底部显示脚注的解释性文字。
现在我知道问题并不完全出在glossaries
和framed
,而出在脚注和\mbox
或\fbox
。
这是一个显示该问题的最小示例:
\documentclass[11pt]{report}
\usepackage[pdftex,pagebackref]{hyperref}
\usepackage[acronym,toc,section=chapter,style=indexgroup,sanitize={name=false,description=false,symbol=true}]{glossaries}
\glsdisablehyper
\defglsdisplayfirst[main]{#1#4\protect\footnote{#2}}
\makeglossaries
\newglossaryentry{Y2K}{name=Y2K,description={Bla bla bla}}
\begin{document}
% Bla bla \gls{Y2K} bla bla % Works fine
\fbox{Bla bla \gls{Y2K} bla bla} % doesn't work as expected
\newpage
\printglossaries
\end{document}
我使用pdflatex
,,makeglossaries
来pdflatex
编译。
所以,问题是我需要在里面使用脚注\fbox
,因为framed
使用\fbox
并glossaries
使用脚注。
我已经尝试过使用这个但没有做任何事情:
\usepackage[stable]{footmisc}
\usepackage{footnote}
最后一件事,这段代码:
\defglsdisplayfirst[main]{#1#4\protect\footnote{#2}}
我从这里得到它,也许可以进行调整来解决这个问题。
编辑于 2013 年 12 月 6 日 经过很长一段时间,我发现这个解决方案存在一个问题。我使用的是框架环境而不是 fbox。当我在框架中使用第一个 boxedgls 时,没有任何问题。如果我之后使用另一个框架环境,它也会生成脚注(无论里面是否有 gls)。
梅威瑟:
\documentclass[11pt]{report}
\usepackage{etoolbox}
\usepackage{framed}
\usepackage[pdftex,pagebackref]{hyperref}
\usepackage[acronym,toc,section=chapter,style=indexgroup,sanitize={name=false,description=false,symbol=true}]{glossaries}
\glsdisablehyper
\defglsdisplayfirst[main]{#1#4\protect\footnote{#2}}
\makeglossaries
\newglossaryentry{Y2K}{name=Y2K,description={Bla bla bla}}
\newcommand\glsdoafterbox{}
\let\orgfbox\fbox
\def\fbox#1{\orgfbox{#1}\glsdoafterbox\def\glsdoafterbox{}}
\newcommand{\boxedgls}[1]{%
\glstext{#1}%
\ifglsused{#1}{}%
{%
\footnotemark
\gappto\glsdoafterbox{\footnotetext{\glsentrydesc{#1}}\glsunset{#1}}%
}%
}
\begin{document}
\begin{framed}
Bla bla \boxedgls{Y2K} bla bla
\end{framed}
\newpage
\begin{framed}
Nothing here
\end{framed}
\newpage
\printglossaries
\end{document}
答案1
您不能\footnote
在框内使用。例如,以下内容不会产生脚注文本:
\fbox{Some text\footnote{with a footnote}}.
\footnotemark
相反,您需要使用和的组合,\footnotetext
如下所示:
\fbox{Some text\footnotemark}\footnotetext{with a footnote}
将其应用于词汇表条目很复杂,但可以做到:
\documentclass[11pt]{report}
\usepackage[pdftex,pagebackref]{hyperref}
\usepackage[acronym,toc,section=chapter,style=indexgroup,sanitize={name=false,description=false,symbol=true}]{glossaries}
\glsdisablehyper
\defglsdisplayfirst[main]{#1#4\protect\footnote{#2}}
\makeglossaries
\newglossaryentry{Y2K}{name=Y2K,description={Bla bla bla}}
\begin{document}
\fbox{Bla bla \glstext{Y2K}\ifglsused{Y2K}{}{\footnotemark} bla
bla}\ifglsused{Y2K}{}{\footnotetext{\glsentrydesc{Y2K}}\glsunset{Y2K}}
\newpage
\printglossaries
\end{document}
为了获得更自动化的解决方案,您可以执行以下操作:
\documentclass[11pt]{report}
\usepackage{etoolbox}
\usepackage[pdftex,pagebackref]{hyperref}
\usepackage[acronym,toc,section=chapter,style=indexgroup,sanitize={name=false,description=false,symbol=true}]{glossaries}
\glsdisablehyper
\defglsdisplayfirst[main]{#1#4\protect\footnote{#2}}
\makeglossaries
\newglossaryentry{Y2K}{name=Y2K,description={Bla bla bla}}
\newcommand\glsdoafterbox{}
\let\orgfbox\fbox
\def\fbox#1{\orgfbox{#1}\glsdoafterbox\def\glsdoafterbox{}}
\newcommand{\boxedgls}[1]{%
\glstext{#1}%
\ifglsused{#1}{}%
{%
\footnotemark
\gappto\glsdoafterbox{\footnotetext{\glsentrydesc{#1}}\glsunset{#1}}%
}%
}
\begin{document}
\fbox{Bla bla \boxedgls{Y2K} bla bla}
\newpage
\printglossaries
\end{document}