水平移动算法部分以保留缩进

水平移动算法部分以保留缩进

让我们考虑以下 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}

在此处输入图片描述

答案2

尝试

\documentclass{article}
\usepackage[algo2e]{algorithm2e}
\begin{document}
\IncMargin{5em}
\begin{algorithm2e}
    \underline{Algorithm}\\
    \vspace{2mm}
     \underline{Step 1} : Step \\
    \For{$i = 1\cdots n$}{
    2 + 3 \;
    }
\caption{Example}
\end{algorithm2e}
\end{document}

如手册第 5 页所述。更多解释请参阅手册第 30 页。

在此处输入图片描述

相关内容