当脚注用于第二个参数时\procedure
当在命令的密码如下 MWE 中的包,
\documentclass{standalone}
\usepackage{cryptocode}
\begin{document}
\procedure{\hspace{1cm}}{
\footnote{}
}
\end{document}
我想弄清楚为什么会发生这种情况以及如何防止这种情况发生。
答案1
好吧,经过长时间的深思熟虑后,我已经找到了原因并找到了一种(可疑的)解决方法。
这里的根本原因并不是加密代码包本身,事实上我相当确定,可以将脚注直接添加到一段伪代码中是使用 minipages 的意外结果。
双重脚注的真正根源在于伪代码是在flalign*
环境中排版的。这个问题实际上也发生在align*
minipages 中的常规环境中。以下示例有同样的问题。
\documentclass{standalone}
\usepackage{amsmath}
\begin{document}
\begin{minipage}{2cm}
\begin{align*}
\footnote{}
\end{align*}
\end{minipage}
\end{document}
当然,这不是什么大问题,因为人们很少想在方程式中使用脚注。
可以让 \footnotemark、\footnotetext dance 起作用,但为此我们需要
- 修补其中一个内部加密命令。
- 为 mpfootnote 定义一个与 \footnotemark 等效的命令。
第一部分可以通过以下方式实现
\define@key{pseudocode}{foot}[]{\newcommand*\@pseudocodefoot{#1}}
\apptocmd{\pc@display@pseudocode}{\@ifundefined{@pseudocodefoot}{}{\@pseudocodefoot}}{}{}
这使我们能够使用键“foot”指定一些附加代码,并将其放置在 flalign* 的末尾和 minipage 的末尾之间。
为了为 minipages 定义一个与 \footnotemark 等价的函数,我们可以修改原始的 \footnotemark 代码如下
\def\mpfootnotemark{%
\@ifnextchar[\@xmpfootnotemark
{\stepcounter{mpfootnote}%
\protected@xdef\@thefnmark{\thempfootnote}%
\@footnotemark}}
\def\@xmpfootnotemark[#1]{%
\begingroup
\c@mpfootnote #1\relax
\unrestored@protected@xdef\@thefnmark{\thempfootnote}%
\endgroup
\@footnotemark}
总的来说,这意味着我们的 MWE 现在
\documentclass{standalone}
\usepackage{cryptocode}
\makeatletter
\define@key{pseudocode}{foot}[]{\newcommand*\@pseudocodefoot{#1}}
\apptocmd{\pc@display@pseudocode}{\@ifundefined{@pseudocodefoot}{}{\@pseudocodefoot}}{}{}
\def\mpfootnotemark{%
\@ifnextchar[\@xmpfootnotemark
{\stepcounter{mpfootnote}%
\protected@xdef\@thefnmark{\thempfootnote}%
\@footnotemark}}
\def\@xmpfootnotemark[#1]{%
\begingroup
\c@mpfootnote #1\relax
\unrestored@protected@xdef\@thefnmark{\thempfootnote}%
\endgroup
\@footnotemark}
\makeatother
\begin{document}
\procedure[foot={\footnotetext{}}]{\hspace{1cm}}{
\text{\mpfootnotemark}
}
\end{document}
其效果正如我们所希望的那样。