
Ich möchte dem Algorithmikpaket zwei Anpassungen hinzufügen: einen neuen Break-Befehl einführen und die Möglichkeit haben, der Schleife Beschriftungen zuzuweisen, damit break {label}
klar ist, auf welche Schleife sich bezieht. Ich habe versucht, den Break-Befehl folgendermaßen einzuführen:
\newcommand{\algorithmicbreak}{\textbf{break}}
aber das funktioniert nicht, ich bekomme den unbekannten Befehlsfehler, wenn ich tippe\BREAK
Mit diesem Hack kann ich es allerdings zum Laufen bringen, allerdings ist es sehr unschön:
\renewcommand{\algorithmicprint}{\textbf{break}}
% then use it as
\PRINT
Ich weiß nicht, wie ich die LOOP-Labels vorstellen soll.
UPDATE: mein vollständiges Beispiel
\begin{algorithm}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
\renewcommand{\algorithmicprint}{\textbf{break}}
\caption{\text{My-Algorithm}}
\label{algo:blah}
\begin{algorithmic}[1]
\REQUIRE X
\ENSURE Y
% STEP 1
\STATE \COMMENT{{\bf Step 1}} some something
\LOOP % can't annotate the loop :(((
% STEP 2
\STATE \COMMENT{{\bf Step 2}} do something more
\IF {$a = b$}
\RETURN $c$
\ELSE
\LOOP % can't annotate the loop :(((
% STEP 3
\STATE \COMMENT{{\bf Step 3}} do some more
\IF {$b = c$}
\STATE $y = x$
\PRINT % intending to break
\ELSE
% STEP 4
\STATE \COMMENT{{\bf Step 4}} and yet some more
\ENDIF
\ENDLOOP
\ENDIF
\ENDLOOP
\end{algorithmic}
\end{algorithm}
Antwort1
Hier ist eine Änderung hinzugefügt zualgorithmic
Damit können Sie eine kommentierte Schleife (und ) \BREAK
verwenden . Sie basiert auf einer Kopie der regulären und -Kombinationen mit einem zusätzlichen Parameter für die Kommentierung. Natürlich sind auch weitere Modifikationen möglich:\ALOOP
\ENDALOOP
\LOOP
\ENDLOOP
\documentclass{article}
\usepackage{algorithm,algorithmic}% http://ctan.org/pkg/algorithms
% Algorithmic modifications
\makeatletter
\newcommand{\ALOOP}[1]{\ALC@it\algorithmicloop\ #1%
\begin{ALC@loop}}
\newcommand{\ENDALOOP}{\end{ALC@loop}\ALC@it\algorithmicendloop}
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
\newcommand{\algorithmicbreak}{\textbf{break}}
\newcommand{\BREAK}{\STATE \algorithmicbreak}
\makeatother
\begin{document}
\begin{algorithm}
\caption{My-Algorithm}\label{algo:blah}
\begin{algorithmic}[1]
\show\LOOP
\REQUIRE X
\ENSURE Y
% STEP 1
\STATE \COMMENT{\textbf{Step 1}} some something
\ALOOP {outer} % Outer loop
% STEP 2
\STATE \COMMENT{\textbf{Step 2}} do something more
\IF {$a = b$}
\RETURN $c$
\ELSE
\ALOOP {inner} % Inner loop
% STEP 3
\STATE \COMMENT{\textbf{Step 3}} do some more
\IF {$b = c$}
\STATE $y = x$
\BREAK % intending to break
\ELSE
% STEP 4
\STATE \COMMENT{\textbf{Step 4}} and yet some more
\ENDIF
\ENDALOOP
\ENDIF
\ENDALOOP
\end{algorithmic}
\end{algorithm}
\end{document}
Es wäre auch möglich, die Änderung so vorzunehmen \BREAK
, dass ein Argument übernommen wird, wenn Sie das ebenfalls mit Anmerkungen versehen möchten (beispielsweise um aus einer bestimmten Schleife auszubrechen).
Der Vollständigkeit halber habe ich Ihre Verwendung von korrigiert \bf
. Siehe daherIst es wichtig, ob ich \textit
oder \it
, \bfseries
oder \bf
usw. verwende?UndWerden zweistellige Schriftstilbefehle ( \bf
,, \it
…) jemals in LaTeX wiederbelebt?
Antwort2
Dies alles ist viel einfacher, wenn Sie diealgorithmicx-Paket, es hat viel mehr Funktionen und funktioniert besser mit anderen Paketen:
\documentclass[12pt]{report}
\usepackage[a4paper,tmargin=1.25in, bmargin=1.25in, lmargin=1.25in, rmargin=1.25in]{geometry}
\usepackage{algpseudocode}
\newcommand{\Break}{\State \textbf{break} }
\algblockdefx[Loop]{Loop}{EndLoop}[1][]{\textbf{Loop} #1}{\textbf{End Loop}}
\begin{document}
Here is an example:
\begin{algorithmic}[1]
\Require Integers $a >0$ and $b$
\Ensure $a\cdot b$
\State $i\leftarrow 0$
\State $c \leftarrow 0$
\Loop{1}
\If{$i=a$}
\Break Loop 1
\EndIf
\State $c \leftarrow c + b$
\State $i \leftarrow i + 1$
\EndLoop
\State \textbf{return} $c$
\end{algorithmic}
\end{document}