So richten Sie Zeilennummern mit dem Paket algorithm2e horizontal aus

So richten Sie Zeilennummern mit dem Paket algorithm2e horizontal aus

Ich versuche, mit dem Paket einen Algorithmus zu schreiben algorithm2e.

Dies ist mein Code:

\usepackage[linesnumbered,ruled]{algorithm2e}
...
{\footnotesize
\IncMargin{1em}
\begin{algorithm}[H]
  \SetAlgoVlined
  \SetAlgoNlRelativeSize{-1}
  \SetNlSkip{1em}

  $ALIGNMENTS \gets NEXT$\;
  \BlankLine
  \While{$(C_{cov} > 0) \wedge (|ALIGNMENTS| > 0)$}{
    $NEXT \gets 0$\;
    \ForEach{$A \in ALIGNMENTS$}{
      $U \gets checkAlignments(\mu,A,C_{cov})$\;
      \uIf{$|U| = 1$}{
        $\mu \gets updateProfile(\mu,U)$\;
      }
      \Else{
        $NEXT = NEXT \cup \{A\}$\;
      }
    }
    \If{$|ALIGNMENTS| = |NEXT|$}{
      $C_{cov} \gets C_{cov} - 1$\;
    }
    $ALIGNMENTS \gets NEXT$\;
  }
  \BlankLine
  \KwRet{$\mu$}\;

\end{algorithm}
}  

Und das ist das Ergebnis: Bildbeschreibung hier eingeben

Das Problem besteht darin, dass die Zeilennummern nicht richtig ausgerichtet sind: Beispielsweise steht die 9 viel weiter rechts als die 1.

Wie kann ich sie also richtig horizontal ausrichten?

Antwort1

Dies war ziemlich schwer zu debuggen. Auf den ersten Blick scheint die Fehlausrichtung willkürlich, aber bei genauerem Hinsehen verschieben sich die Zahlen umso weiter nach rechts, je mehr vertikale Regeln auf dieser Linie angewendet werden. Am besten sieht man dies, wenn man sich die Paare 6/8 und 7/9 ansieht:

Bildbeschreibung hier eingeben

Es stellt sich heraus, dass der zusätzliche Abstand tatsächlich (die Anzahl der vertikalen Linien in dieser Zeile) x0,4pt beträgt, was die Standardbreite für Linien in LaTeX ist. Daher ist die Auswirkung dieses Fehlers bei Standardschriftgrößen und langen Blöcken fast nicht wahrnehmbar.

Bei genauerem Hinsehen stellt man fest, dass die vertikalen Regeln durch die Verschachtelung mehrerer „e“ und „s“ ineinander algortihm2eerstellt werden , wobei jedem äußeren „e“ ein „s“ vorangestellt ist , das die vertikale Regel für jeden Algorithmusblock zeichnet.\hbox\vtop\vtop\vrule

(NB: Wenn das Paket die Einrückung von Blöcken berechnet, scheint dieser zusätzliche Abstand berücksichtigt zu werden. Er fehlt jedoch, wenn \llapam Anfang des folgenden Codes ein Feld eingefügt wird, um die Zeilennummer um einen kumulierten Abstand nach links zu verschieben. Ich bin mir nicht sicher, warum es für diesen Abstand zwei verschiedene Dimensionsregister gibt.)

Eine einfache Lösung für diesen Fehler besteht darin, die Breite jeder vertikalen Linie rückgängig zu machen, indem man \kern-0.4ptdahinter eins einfügt. Sie können diesen Patch ganz einfach mithilfe des \patchcmdaus dem etoolboxPaket anwenden. Fügen Sie einfach den folgenden Code zu Ihrer Präambel hinzu:

\usepackage{etoolbox}

\makeatletter
\patchcmd\algocf@Vline{\vrule}{\vrule \kern-0.4pt}{}{}
\patchcmd\algocf@Vsline{\vrule}{\vrule \kern-0.4pt}{}{}
\makeatother

Die neue Ausgabe liefert korrekt ausgerichtete Zeilennummern:

Bildbeschreibung hier eingeben

Antwort2

Willkommen bei TeX.SE. Aus der Dokumentation vonalgorithm2edu hast:

Bildbeschreibung hier eingeben

\documentclass[12pt]{article}
\usepackage[linesnumbered,lined,boxed,commentsnumbered]{algorithm2e}
\begin{document}
\IncMargin{1em}
\begin{algorithm}
$ALIGNMENTS \gets NEXT$\;
  \BlankLine
  \While{$(C_{cov} > 0) \wedge (|ALIGNMENTS| > 0)$}{
    $NEXT \gets 0$\;
    \ForEach{$A \in ALIGNMENTS$}{
      $U \gets checkAlignments(\mu,A,C_{cov})$\;
      \uIf{$|U| = 1$}{
        $\mu \gets updateProfile(\mu,U)$\;
      }
      \Else{
        $NEXT = NEXT \cup \{A\}$\;
      }
    }
    \If{$|ALIGNMENTS| = |NEXT|$}{
      $C_{cov} \gets C_{cov} - 1$\;
    }
    $ALIGNMENTS \gets NEXT$\;
  }
  \BlankLine
  \KwRet{$\mu$}\;
  \DecMargin{1em}
\end{algorithm}
\end{document}

verwandte Informationen