アルゴリズム環境、カスタムスタイルの定義

アルゴリズム環境、カスタムスタイルの定義

私は現在、以下の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}

プレーン スタイルと罫線スタイルの組み合わせを取得します ( に注意してくださいhrule)。私は、テキストを分離させるために罫線スタイルを好み、ドキュメント全体でキャプション スタイルを尊重するためにプレーン スタイルを好みます。画像を参照してください。 ここに画像の説明を入力してください

プレーンな環境を再定義する簡単な方法はありますか?私は答えを使ってみましたこの質問

\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

しかし、2 番目のルールが依然としてアルゴリズムの先頭に来るため、これは期待どおりには機能しません。何か見落としているのでしょうか ?

答え1

algorithm使用floatパッケージalgorithmsを使用して環境をスタイル設定します\floatstyle。 および のフロート スタイルは次のとおりplainです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}

各フロート スタイルは、フロートの構築に使用されるコンポーネントの数を定義します。フロートruledスタイルについて考えてみましょう。-prepost-component が を囲み\captionmid-component がフロートを終了します。

plainruledこれを基礎として、両方の特徴を持つ新しいフロート スタイルを作成できます。

ここに画像の説明を入力してください

\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}

関連情報