cryptocode 的程序命令中的脚注出现了两次

cryptocode 的程序命令中的脚注出现了两次

当脚注用于第二个参数时\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 起作用,但为此我们需要

  1. 修补其中一个内部加密命令。
  2. 为 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}

其效果正如我们所希望的那样。

在此处输入图片描述

相关内容