algorithm2e
当我这样做时使用
\If{ condition_1 OR condition_2 OR condition_3}
但是如果中间的东西{}
太长,它就会缠绕在一起,而且由于没有对齐,看起来不太好看。
我在看“If”算法中的多个条件 但没有看到解决方案。
有没有办法打破其行上的每个条件,以便它在最后显示如下
IF condition_1
OR
condition_2
OR
condition_3 THEN
....
END IF
这是一个 MWE,仅显示 2 个条件作为示例。
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{algorithmic}
\usepackage[linesnumbered,ruled]{algorithm2e}
\begin{document}
\begin{algorithm}
\DontPrintSemicolon
\KwIn{1st order ODE}
\KwOut{solution}
\eIf{ A}
{
stuff
\eIf{ B}
{
stuff
}
{
\uIf{ condition 1 \textbf{or} condition 2 \textbf{or} condition 3 }
{
stuff
}
\uElseIf{ condition 1 \textbf{and} condition 2 \textbf{and} condition 3 }
{
stuff
}
\ElseIf{ condition 1 \textbf{or} condition 2 \textbf{and} condition 3 }
{
stuff
}
}
}
{
stuff
}
\Return solution
\caption{my algorithm}
\end{algorithm}
\end{document}
使用 lualatex 编译,这是输出
顺便说一句,我在 algorithm2e 中找不到\Or
,\And
所以我现在暂时使用\textbf{or}
。
试验
尝试过手动修复,几乎有效,就像这样
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{algorithmic}
\usepackage[linesnumbered,ruled]{algorithm2e}
\begin{document}
\begin{algorithm}
\DontPrintSemicolon
\KwIn{1st order ODE}
\KwOut{solution}
\eIf{ A}
{
stuff
\eIf{ B}
{
stuff
}
{
\uIf{ condition 1 \;
\hspace{30pt}\textbf{or}\;
\hspace{15pt} condition 2\;
\hspace{30pt}\textbf{or}\;
\hspace{15pt}condition 3 }
{
stuff
}
\uElseIf{ condition 1 \textbf{and} condition 2 \textbf{and} condition 3 }
{
stuff
}
\ElseIf{ condition 1 \textbf{or} condition 2 \textbf{and} condition 3 }
{
stuff
}
}
}
{
stuff
}
\Return solution
\caption{my algorithm}
\end{algorithm}
\end{document}
现在看起来像
现在垂直线ruled
看起来不太好,因为没有间隙。
有没有更好的解决方案?当然,我可以使用关闭垂直线\SetAlgoNoLine
,现在看起来没问题了。但如果可能的话,最好有垂直线。
TL 2020
答案1
我不太熟悉algorithm2e
,因此以下方法并不完美。此尝试使用algorithm2e
文档,第 11 节。
小例子
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{algorithmic}
\usepackage[linesnumbered]{algorithm2e}
\begin{document}
\SetKw{Or}{\hspace{\algoskipindent}\itshape or\;}
\SetKw{And}{\hspace{\algoskipindent}\itshape and\;}
\SetKwBlock{Condition}{}{}
\begin{algorithm}
\DontPrintSemicolon
\If{condition 1 \Condition{\Or condition 2 \;\Or condition 3 \;\And condition 4}}
{
stuff
}
\end{algorithm}
\end{document}
应用于你的例子
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{algorithmic}
\usepackage[linesnumbered,ruled]{algorithm2e}
\SetKw{Or}{\hspace{\algoskipindent}\itshape or\;}
\SetKw{And}{\hspace{\algoskipindent}\itshape and\;}
\SetKwBlock{Condition}{}{}
\begin{document}
\begin{algorithm}
\DontPrintSemicolon
\KwIn{1st order ODE}
\KwOut{solution}
\eIf{ A}
{
stuff
\eIf{ B}
{
stuff
}
{
\uIf{condition 1 \Condition{\Or condition 2 \;\Or condition 3}}
{
stuff
}
\uElseIf( // the indent is not satisfying){condition 1 \Condition{\And condition 2 \;\And condition 3}}
{
stuff
}
\ElseIf{\Condition{condition 1 \;\Or condition 2 \;\And condition 3}}
{
stuff
}
}
}
{
stuff
}
\Return solution
\caption{my algorithm}
\end{algorithm}
\end{document}