我在用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
可让扫描正确地拾取[
输入流。