algorithm2e 和 \If 的问题

algorithm2e 和 \If 的问题

我尝试按照本教程解决此问题,但没有成功。我之前使用的是 \If 和 \EndIf,现在我已切换到 \eIf,但没有成功。我在每行末尾使用 \; 以避免段落中断。我的 if 有什么问题?!

  1. http://ctan.mirror.garr.it/mirrors/CTAN/macros/latex/contrib/algorithm2e/doc/algorithm2e.pdf
  2. LateX 中 algorithm2e 的错误误解

     \begin{algorithm}
     \ForAll {Partition p}
        skip1=0
        \ForAll {Edges i=(a,b)}
            skip2=0
            \ForAll {bucket in p}
                j=0 % conta i caratteri
                 \ForAll{chr in bucket}
                    \eIf{ chr == a or chr == b}{
                        other2find = set(set((a,b,)) - set((chr,))) \; % give the missing element to find
                         skip1=1 \;
                         \ForAll {other char k} \;
                         \eIf{other2find \== k} {
                            unstableNumber=unstableNumber+1 \;
                             skip2=1 \;
                             break  \; % smette di cercare nei caratteri del bucket
                         \EndIf  \;
                        break  \; 
                      }
                    }{
                        j=j+1
                        }
                \EndFor         
                %\If{skip1=1} % se ho trovato almeno un nodo in un bucket, salto tutta la partizione
                %            % perche' tanto l'altro nodo sara da qualche parte ma non rendera di certo la partizione
                %            % non stabile
                %   break
                %tutto questo codice non serve perche' e incluso nel break dopo if(other2find)
            \EndFor 
        \EndFor 
        \If{skip2}
            break % non serve controllare tutti gli archi per sapere che una partizione non e' stabile
        \EndIf
     \If{!skip2}
        stablePartition.append(p)
        skip2=0
     \EndIf 
     \EndFor
     \end{algorithm}
    

答案1

你似乎把你的语法和algorithm2e以及algorithmicx后者使用\For{..} ... \EndForand\If{..} ... \EndIf构造,而前者使用\For{..}{...}and\If{..}{...}构造和\;行终止宏。

这是一个algorithm2e实现:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath,algorithm2e}
\newcommand{\var}{\texttt}
\begin{document}

\begin{algorithm}
  \ForAll {Partition p}{%
    $\var{skip1} = 0$\;
    \ForAll {\text{edges} $i = (a,b)$}{%
      $\var{skip2} = 0$\;
      \ForAll {\text{bucket in $p$}}{%
        $j = 0$ % conta i caratteri
        \ForAll{\text{\var{chr} in bucket}}{%
          \eIf{\text{$\var{chr} = a$ or $\var{chr} = b$}}{
            $\var{other2find} = set(set((a,b,)) - set((chr,)))$\; % give the missing element to find
            $\var{skip1} = 1$\;
            \ForAll {\text{other char $k$}}{%
              \If{$\var{other2find} = k$}{%
                $\var{unstableNumber} = \var{unstableNumber} + 1$\;
                $\var{skip2} = 1$\;
                break\; % smette di cercare nei caratteri del bucket
              }
              break\;
            }
          }{
            $j = j + 1$\;
          }
        }
      }
    }
    \If{\var{skip2}}{%
      break\; % non serve controllare tutti gli archi per sapere che una partizione non e' stabile
    }
    \If{not \var{skip2}}{%
      stablePartition.append(p)\;
      $\var{skip2} = 0$\;
    }
  }
\end{algorithm}

\end{document}

请注意,建议为变量定义定义一个宏(例如skip1,,,,...),以便在整个算法中使用。您可能希望对函数调用执行相同的操作,或者使用。请参阅skip2chr\callalgorithm2e文档了解更多选项/详细信息。

相关内容