ich habe das gefundenAntwortund ich habe es angewendet, aber das ist das Ergebnis.
Das ist mein Code.
\documentclass[conference]{IEEEtran}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}
\usepackage{dsfont}
\usepackage{algorithm}
\PassOptionsToPackage{noend}{algpseudocode}% comment out if want end's to show
\usepackage{algpseudocode}
\makeatletter
% start with some helper code
% This is the vertical rule that is inserted
\newcommand*{\algrule}[1][\algorithmicindent]{\makebox[#1][l]{\hspace*{.5em}\vrule height .75\baselineskip depth .25\baselineskip}}%
\newcount\ALG@printindent@tempcnta
\def\ALG@printindent{%
\ifnum \theALG@nested>0% is there anything to print
\ifx\ALG@text\ALG@x@notext% is this an end group without any text?
% do nothing
\addvspace{-3pt}% FUDGE for cases where no text is shown, to make the rules line up
\else
\unskip
% draw a rule for each indent level
\ALG@printindent@tempcnta=1
\loop
\algrule[\csname ALG@ind@\the\ALG@printindent@tempcnta\endcsname]%
\advance \ALG@printindent@tempcnta 1
\ifnum \ALG@printindent@tempcnta<\numexpr\theALG@nested+1\relax% can't do <=, so add one to RHS and use < instead
\repeat
\fi
\fi
}%
\usepackage{etoolbox}
% the following line injects our new indent handling code in place of the default spacing
\patchcmd{\ALG@doentity}{\noindent\hskip\ALG@tlm}{\ALG@printindent}{}{\errmessage{failed to patch}}
\makeatother
% end vertical rule patch for algorithmicx
\makeatother
\begin{document}
\IEEEpeerreviewmaketitle
\begin{algorithm}
\caption{Arbitrary Algorithm}\label{IS2OSLS}
\begin{algorithmic}[1]
\Require A matrix $\mathbf{A}$ of size $m\times n$.
\Ensure Something.
\For{$i$ in $m$}
\For{$j$ in $n$}
\If{$i=j$}
\State Select a random action
\Else
\If{$i=j+1$}
\State Stay silent
\Else
\State Break
\EndIf
\EndIf
\EndFor
\EndFor
\end{algorithmic}
\end{algorithm}
\end{document}
Ich hätte gerne vertikale Linien, die direkt nach dem ersten Buchstaben des Schlüsselworts beginnen, d. h. für das Schlüsselwort for
sollte die vertikale Linie nach beginnen f
usw. In der obigen Abbildung beginnen die vertikalen Linien nach dem und o
nicht nach dem f
. Außerdem brauche ich den Pseudocode ohne das end
Schlüsselwort, wie gezeigt.
Danke schön.
BEARBEITEN
Ich kann ändern, \hspace*{.5em}
um \hspace*{.1em}
die vertikale Linie ein wenig nach links zu verschieben. Das ist gelöst. Aber warum überlappen sich die Linien am Ende des Algorithmus? (Wenn ich die end
Schlüsselwörter hinzufüge, ist das Problem gelöst.)
Antwort1
Eine \addvspace
Anweisung, die die Ursache für Überlappungen ist; entfernen Sie sie. Ich habe auch einen weiteren Patch hinzugefügt, der unerwünschte vertikale Leerzeichen vermeidet, wenn ein „End“-Tag weggelassen wird, sieheUnzulässige Leerzeichen mit algpseudocode und noend
Für die Bewegung nach links gelten die Regeln, die auf wirken \hspace{.5em}
, wie Sie festgestellt haben; im Beispiel habe ich verwendet .2em
.
Im folgenden Code habe ich nur die notwendigen Pakete belassen.
\documentclass[conference]{IEEEtran}
\usepackage{algorithm}
\usepackage[noend]{algpseudocode}
\usepackage{etoolbox}
\makeatletter
% start with some helper code
% This is the vertical rule that is inserted
\newcommand*{\algrule}[1][\algorithmicindent]{%
\makebox[#1][l]{%
\hspace*{.2em}% <------------- This is where the rule starts from
\vrule height .75\baselineskip depth .25\baselineskip
}
}
\newcount\ALG@printindent@tempcnta
\def\ALG@printindent{%
\ifnum \theALG@nested>0% is there anything to print
\ifx\ALG@text\ALG@x@notext% is this an end group without any text?
% do nothing
\else
\unskip
% draw a rule for each indent level
\ALG@printindent@tempcnta=1
\loop
\algrule[\csname ALG@ind@\the\ALG@printindent@tempcnta\endcsname]%
\advance \ALG@printindent@tempcnta 1
\ifnum \ALG@printindent@tempcnta<\numexpr\theALG@nested+1\relax
\repeat
\fi
\fi
}
% the following line injects our new indent handling code in place of the default spacing
\patchcmd{\ALG@doentity}{\noindent\hskip\ALG@tlm}{\ALG@printindent}{}{\errmessage{failed to patch}}
\patchcmd{\ALG@doentity}{\item[]\nointerlineskip}{}{}{} % no spurious vertical space
% end vertical rule patch for algorithmicx
\makeatother
\begin{document}
\IEEEpeerreviewmaketitle
\begin{algorithm}
\caption{Arbitrary Algorithm}\label{IS2OSLS}
\begin{algorithmic}[1]
\Require A matrix $\mathbf{A}$ of size $m\times n$.
\Ensure Something.
\For{$i$ in $m$}
\For{$j$ in $n$}
\If{$i=j$}
\State Select a random action
\Else
\If{$i=j+1$}
\State Stay silent
\Else
\State Break
\EndIf
\EndIf
\EndFor
\EndFor
\end{algorithmic}
\end{algorithm}
\end{document}