使用 algorithm2e,如何使 IF 条件 1 OR 条件 2 OR 条件 3 THEN

使用 algorithm2e,如何使 IF 条件 1 OR 条件 2 OR 条件 3 THEN

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}

在此处输入图片描述

相关内容