我有一个算法,想用数学伪代码来编写。但是,有些条件和语句很长,例如“如果(一系列关系和约束成立)则执行”或“X 得到(一系列包含多个元素的语句)”。这些语句不适合写在一行中。我不想为了满足宽度限制而将它们拆分成临时变量。
我在真实程序代码中会做的事情如下:
if (
long condition 1 and
long condition 2 ...
) {...}
或者
X <- {
long element 1,
long element 2...
}
如何在某些 LaTeX 算法环境中实现此效果?我目前正在使用algorithm2e
但这不是必须的。
答案1
常规换行和相关缩进在包中的换行符algorithm2e
对于有条件的调整,也许以下内容会引起人们的兴趣:
\documentclass{article}
\usepackage{algorithm2e}
\SetKwIF{If}{ElseIf}{Else}{if~(\endgraf}{\endgraf)~then}{else if}{else}{end if}%
\begin{document}
\begin{algorithm}[H]
\SetAlgoLined
\KwData{this text}
\KwResult{how to write algorithm with \LaTeX2e }
initialization\;
\While{not at end of this document}{
read current\;
\eIf{\begin{tabular}{@{\hspace*{1.5em}}l@{}}
understand {\normalfont and} \\
understand some more
\end{tabular}}{
go to next section\;
}{
go back to the beginning of current section\;
}
}
\caption{How to write algorithms}
\end{algorithm}
\end{document}
我已调整格式\eIf
- 仅针对条件部分 - 包括(
.... )
。您必须对其他结构/条件执行相同操作。
答案2
如果你使用algoritmicx 包,它具有更多功能,并且可以与其他软件包更好地配合:
\documentclass[12pt]{report}
\usepackage[a4paper,margin=1.25in]{geometry}
\usepackage{algorithmicx}
%Defines the \If command, ending in \EndIf
\algblockdefx[If]{If}{EndIf}[0]{\textbf{if} $($}{$)$}
%Defines the alternative ending \Then to the \If command,
%which in turn ends in \EndThen
\algcblockdefx[Then]{If}{Then}{EndThen}{$)$ $\{$}{$\}$}
%Provides the alternative ending \Else to the \Then command,
%which in turn ends in \EndElse
\algcblockdefx[Else]{Then}{Else}{EndElse}{$\}$ \textbf{else} $\{$}{$\}$}
\begin{document}
Here is an example:
\begin{algorithmic}[1]
\State Here We Begin
\If
\State this is true
\State Or this is true
\Then
\State Then we do that
\EndThen
\Statex
\If
\State this is true
\State Or this is true
\Then
\State Then we do that
\Else
\State Or do this
\EndElse
\end{algorithmic}
\end{document}
输出结果如下:
该包还提供了algpseudocode
,其中预定义了许多有用的块。