mbox 内的脚注

mbox 内的脚注

我知道有人问过类似的问题,但我找不到解决我的问题的方法。

我最初的问题开始于使用glossaries包,在framed环境中使用首字母缩写词,如下所示:

\begin{framed}
bla bla \gls{Y2K} bla bla
\end{framed}

预期的行为是,Y2K 旁边应该有一个脚注,该脚注链接首字母缩略词,并在页面底部显示脚注的解释性文字。

现在我知道问题并不完全出在glossariesframed,而出在脚注和\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,,makeglossariespdflatex编译。

所以,问题是我需要在里面使用脚注\fbox,因为framed使用\fboxglossaries使用脚注。

我已经尝试过使用这个但没有做任何事情:

\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}

相关内容