
Ich verwende derzeit folgendes mwe
\documentclass{article}
\usepackage{algpseudocode}
\usepackage[plain]{algorithm}
\begin{document}
\begin{algorithm}[H]
\hrule
\vspace{0.5em}
\caption{Euclide's algorithm}\label{euclid}
\begin{algorithmic}[5]
\Procedure{Euclide}{$a,b$}\Comment{The g.c.d. of a and b}
\State $r\gets a\bmod b$
\While{$r\not=0$}\Comment{We have the answer if r is 0}
\State $a\gets b$
\State $b\gets r$
\State $r\gets a\bmod b$
\EndWhile\label{euclidendwhile}
\State \Return $b$\Comment{The gcd is b}
\EndProcedure
\end{algorithmic}
\hrule
\end{algorithm}
\end{document}
Um eine Mischung aus normalem und liniertem Stil zu erhalten (beachten Sie das hrule
). Ich bevorzuge linierten Stil wegen der Trennung zum Text, die er bewirkt, und normalen Stil, weil er den Beschriftungsstil in meinen Dokumenten einhält. Siehe Bild.
Gibt es eine einfache Möglichkeit, die einfache Umgebung neu zu definieren? Ich habe versucht, die Antwort zu verwenden, umdiese Frage
\makeatletter
\let\oldalgorithmic\algorithmic
\def\algorithmic{\@ifnextchar[\algorithmic@i \algorithmic@ii}
\def\algorithmic@i[#1]{\hrule\vspace{0.5em}\oldalgorithmic[#1]\hrule}
\def\algorithmic@ii[#1]{\hrule\vspace{0.5em}\oldalgorithmic\hrule}
\makeatother
Aber das funktioniert nicht wie erwartet, da die zweite hrule immer noch ganz oben im Algorithmus steht. Übersehe ich etwas?
Antwort1
algorithm
verwendet diefloat
Paketum die algorithm
Umgebung mit \floatstyle
s zu gestalten. Hier sind die Float-Stile für plain
und ruled
:
% The 'plain' float style
\newcommand\fs@plain{\def\@fs@cfont{\rmfamily}\let\@fs@capt\floatc@plain
\def\@fs@pre{}\def\@fs@post{}%
\def\@fs@mid{\vspace\abovecaptionskip\relax}%
\let\@fs@iftopcapt\iffalse}
% The 'ruled' float style
\newcommand\fs@ruled{\def\@fs@cfont{\bfseries}\let\@fs@capt\floatc@ruled
\def\@fs@pre{\hrule height.8pt depth0pt \kern2pt}%
\def\@fs@post{\kern2pt\hrule\relax}%
\def\@fs@mid{\kern2pt\hrule\kern2pt}%
\let\@fs@iftopcapt\iftrue}
Jeder Float-Stil definiert eine Anzahl von Komponenten, die beim Erstellen des Floats verwendet werden. Betrachten Sie den ruled
Float-Stil: Eine pre
- und post
-Komponente umgibt den \caption
, während die mid
-Komponenten den Float beenden.
Auf dieser Grundlage können wir einen neuen Float-Stil erstellen, plainruled
der beispielsweise eine Mischung aus beidem bietet:
\documentclass{article}
\usepackage{algpseudocode,algorithm}
\makeatletter
% The 'plainruled' float style
\newcommand\fs@plainruled{\def\@fs@cfont{\rmfamily}\let\@fs@capt\floatc@plain
\def\@fs@pre{\hrule height.8pt depth0pt \kern2pt}%
\def\@fs@post{}%
\def\@fs@mid{\kern2pt\hrule height.8pt depth0pt\relax\kern\abovecaptionskip}%
\let\@fs@iftopcapt\iffalse}
\makeatother
\floatstyle{plainruled}
\restylefloat{algorithm}
\begin{document}
\begin{algorithm}[H]
\caption{Euclide's algorithm}\label{euclid}
\begin{algorithmic}[5]
\Procedure{Euclide}{$a,b$}\Comment{The g.c.d.\ of~$a$ and~$b$}
\State $r \gets a \bmod b$
\While{$r \neq 0$}\Comment{We have the answer if~$r$ is~$0$}
\State $a \gets b$
\State $b \gets r$
\State $r \gets a \bmod b$
\EndWhile\label{euclidendwhile}
\State \Return $b$\Comment{The g.c.d.\ is~$b$}
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}