Zeilenumbruch im Paket algorithm2e

Zeilenumbruch im Paket algorithm2e

Ich verwende diealgorithm2ePaket für Pseudocode. Ich habe einige sehr lange Zeilen, die umgebrochen werden mussten. Gibt es eine Möglichkeit, die folgenden (umgebrochenen) Zeilen einzurücken und/oder eine Markierung in die erste Zeile zu setzen, um zu signalisieren, dass ein Zeilenumbruch stattgefunden hat (ähnlich wieLösung für Listings-Paket)

Ich fand ein ähnlichesFragefür das Listings-Paket, das wurde schon beantwortet, aber ich suche explizit nach einemalgorithm2eLösung.

Antwort1

Das folgende Minimalbeispiel definiert

  • \nosemic: Drucken des Zeilenendezeichens (EOL) entfernen (normalerweise ;);
  • \dosemic: Drucken des EOL-Zeichens wiederherstellen;
  • \pushline: rückt Zeilen ein 1em(der typische Einzug); bereitgestellt von algorithm2eals \Indp;
  • \popline: Einzug entfernen von \pushline(Einzug entfernen?); bereitgestellt von algorithm2eas\Indm

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage{algorithm2e}% http://ctan.org/pkg/algorithm2e
\makeatletter
\newcommand{\nosemic}{\renewcommand{\@endalgocfline}{\relax}}% Drop semi-colon ;
\newcommand{\dosemic}{\renewcommand{\@endalgocfline}{\algocf@endline}}% Reinstate semi-colon ;
\newcommand{\pushline}{\Indp}% Indent
\newcommand{\popline}{\Indm\dosemic}% Undent
\makeatother
\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{understand}{
      go to next section\;
      \nosemic this is a very long statement that has to be\;
        \pushline\dosemic wrapped over two lines\;
      \popline current section becomes this one\;
    }{
      go back to the beginning of current section\;
    }
  }
  \caption{How to write algorithms}
\end{algorithm}
\end{document}​

Da ich nicht mit Ihremalgorithm2eSetup, ich bin mir nicht sicher, wie Sie die vier Befehle kombinieren möchten. Daher habe ich sie für eine maximale (aber manuelle) Nutzung getrennt gehalten.

Antwort2

Tatsächlich gibt es eine einfachere Lösung: Verwenden Sie klassische \hangafterund \hangindent. Dies funktioniert gut mit algorithm2e.

Anmerkungen:

  1. \skiptextist die Länge des Texteinzugs im Algorithmus für einen neuen Block; also wähle ich die Hälfte dieses Einzugs;

  2. Es ist nicht nötig, interne Makros neu zu definieren, da \algocf@endlinefast alle neu definiert werden können algorithm2e. Verwenden Sie \SetEndCharOfAlgoLine, um das Zeilenende neu zu definieren

Unten finden Sie ein Beispiel für die Verwendung von \hangafterund \hangindent:

Bildbeschreibung hier eingeben

\documentclass{article}
\usepackage{algorithm2e}% http://ctan.org/pkg/algorithm2e
%
\newcommand{\nosemic}{\SetEndCharOfAlgoLine{\relax}}% Drop semi-colon ;
\newcommand{\dosemic}{\SetEndCharOfAlgoLine{\string;}}% Reinstate
\newcommand{\pushline}{\Indp}% Indent
\newcommand{\popline}{\Indm\dosemic}% Undent
%
\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{understand}{
      go to next section\;
      \nosemic this is a very long statement that has to be\;
        \pushline\dosemic wrapped over two lines\;
      \popline current section becomes this one\;
      \hangindent=.5\skiptext\hangafter=1
      this is a very long statement that should be indented automatically on the next
      lines if this statement is longer than one line\;
      Following lines should be indented normally\;
    }{
      go back to the beginning of current section\;
    }
  }
  \caption{How to write algorithms}
\end{algorithm}
\end{document}​

Antwort3

\Indpund \Indmkann im Paket algorithm2ezum Einrücken und Entfernen von Einrückungen verwendet werden. Ich habe es getestet.

verwandte Informationen