algorithm2e 中不能使用浮点放置选项

algorithm2e 中不能使用浮点放置选项

我在用algorihtm2e并格式化一个新命令来对齐算法中的注释,就像在答案中一样将 algorithm 中的注释与 algorithm2e 包对齐。现在,当我尝试使用这样的位置选项时

\documentclass[11pt,a4paper,twoside,openright]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[algochapter,linesnumbered,ruled,lined,boxed]{algorithm2e}
\usepackage{etoolbox}

\makeatletter
\newdimen\commentwd
\let\oldtcp\tcp
\def\mytcp*[#1]#2{% only support one style for simplicity
\setbox0\hbox{#2}%
\ifdim\wd\z@>\commentwd\global\commentwd\wd\z@\fi
\oldtcp*[r]{\leavevmode\hbox to \commentwd{#2\hfill}}}

\let\oldalgorithm\algorithm
\def\algorithm{\oldalgorithm
\global\commentwd\z@
\expandafter\ifx\csname commentwd@\romannumeral\csname c@\algocf@float 
\endcsname\endcsname\relax\else
\global\commentwd\csname commentwd@\romannumeral\csname c@\algocf@float
\endcsname\endcsname
\fi
}
\let\oldendalgorithm\endalgorithm
\def\endalgorithm{\oldendalgorithm
\immediate\write\@auxout{\gdef\expandafter\string\csname 
commentwd@\romannumeral\csname c@\algocf@float\endcsname\endcsname{%
\the\commentwd}}}

\begin{document}
   \begin{algorithm}[ht]
      bla
   \end{algorithm}
\end{document}

结果是[ht]写在算法的第一行。当我不使用它时,它有效。有人知道我如何对齐注释并使用定位吗?

答案1

您对 的重新定义algorithm导致了问题。请使用以下内容:

\def\algorithm{%
\global\commentwd\z@
\expandafter\ifx\csname commentwd@\romannumeral\csname c@\algocf@float 
\endcsname\endcsname\relax\else
\global\commentwd\csname commentwd@\romannumeral\csname c@\algocf@float
\endcsname\endcsname
\fi%
\oldalgorithm
}

环境 algorithm将可选参数作为其定义的一部分,它会“提前检查”以查看是否跟在\algorithm后面[。您已将旧定义放在\oldalgorithm新重新定义的开头\algorithm,这意味着它后面实际上是\global,但不是[。将其放在\oldalgorithm末尾\algorithm可让扫描正确地拾取[输入流。

相关内容