让我们考虑以下 MWE 代码
代码 1:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[algo2e]{algorithm2e}
\begin{document}
\begin{center}
\begin{algorithm2e}[H]
\underline{Algorithm}\\
\vspace{2mm}
\underline{Step 1} : Step \\
\For{$i = 1\cdots n$}{
2 + 3 \;
}
\caption{Example}
\end{algorithm2e}
\end{center}
\end{document}
上述代码未对齐,但意图正确
代码2:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[algo2e]{algorithm2e}
\begin{document}
\begin{center}
\begin{algorithm2e}[H]
\underline{Algorithm}\\
\vspace{2mm}
\underline{Step 1} : Step \\
\hspace{1.25cm} \For{$i = 1\cdots n$}{
\hspace{1.25cm} 2 + 3 \;
\hspace{1.25cm} }
\caption{Example}
\end{algorithm2e}
\end{center}
\end{document}
此代码中的问题是 end 未正确使用 for,end 没有遵循空间。
我想将算法的 for 循环向右移动,而不会引起缩进问题,如果我使用空间,则 end 与 for 未正确对齐。
如何实现这一正确的调整?
答案1
该解决方案依赖于algorithm2e
内部因素,因此如果实施发生algorithm2e
变化,它可能会中断。
\algocf@push
您可以使用和创建一个新算法块\algocf@pop
。为了隐藏复杂性,可以将其隐藏在环境中:之后
\usepackage{xparse}
\makeatletter
\NewDocumentEnvironment{algoindent}{m}{%
\algocf@push{#1}\hbox\bgroup\vtop\bgroup
\algocf@addskiptotal
}{%
\egroup\egroup
\algocf@pop{#1}%
}
\makeatother
您可以使用 创建缩进块\begin{algoindent}{2cm} ... \end{algoindent}
。当然,这需要知道标签的宽度,但这也可以自动化:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[algo2e]{algorithm2e}
\usepackage{xparse}
\makeatletter
\NewDocumentEnvironment{algoindent}{m}{%
\algocf@push{#1}\hbox\bgroup\vtop\bgroup
\algocf@addskiptotal
}{%
\egroup\egroup
\algocf@pop{#1}%
}
\makeatother
\NewDocumentEnvironment{algolabel}{m o}{%
\setbox0\hbox{\underline{#1} : }
\dimen0=\wd0
\begingroup
\leavevmode\box0 \IfValueT{#2}{#2\\}%
\endgroup
\expandafter\algoindent\expandafter{\the\dimen0}
}{\endalgoindent}
\begin{document}
\begin{center}
\begin{algorithm2e}[H]
\underline{Algorithm}\\
\vspace{2mm}
\begin{algolabel}{Step 1}[Step]
\For{$i = 1\cdots n$}{
2 + 3 \;
}
\end{algolabel}
\caption{Example}
\end{algorithm2e}
\end{center}
\end{document}