
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 ein1em
(der typische Einzug); bereitgestellt vonalgorithm2e
als\Indp
;\popline
: Einzug entfernen von\pushline
(Einzug entfernen?); bereitgestellt vonalgorithm2e
as\Indm
\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 Ihremalgorithm2e
Setup, 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 \hangafter
und \hangindent
. Dies funktioniert gut mit algorithm2e
.
Anmerkungen:
\skiptext
ist die Länge des Texteinzugs im Algorithmus für einen neuen Block; also wähle ich die Hälfte dieses Einzugs;Es ist nicht nötig, interne Makros neu zu definieren, da
\algocf@endline
fast alle neu definiert werden könnenalgorithm2e
. Verwenden Sie\SetEndCharOfAlgoLine
, um das Zeilenende neu zu definieren
Unten finden Sie ein Beispiel für die Verwendung von \hangafter
und \hangindent
:
\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
\Indp
und \Indm
kann im Paket algorithm2e
zum Einrücken und Entfernen von Einrückungen verwendet werden. Ich habe es getestet.