私は論文を書くために ACM カンファレンス論文テンプレート (2 列) を使用しています。アルゴリズムの形式に関する問題が長い間私を悩ませてきました。
- 関数名は常に大文字に変換されます。
- 単語間の空白が大きい
\OR
、または状態\AND
が認識されませんIf
。
例を以下に示します。
\documentclass[10pt, preprint]{sigplanconf}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{listings}
\usepackage{graphicx}
\usepackage{listings}
%\usepackage[chapter]{algorithm}
\usepackage{algorithm}% http://ctan.org/pkg/algorithms
%\usepackage{algorithmic}
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx
\usepackage{url}
\usepackage{booktabs}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{color}
\usepackage{courier}
\usepackage{lipsum}
\begin{document}
\special{papersize=8.5in,11in}
\setlength{\pdfpageheight}{\paperheight}
\setlength{\pdfpagewidth}{\paperwidth}
\conferenceinfo{CONF 'yy}{Month d--d, 20yy, City, ST, Country}
\copyrightyear{20yy}
\copyrightdata{978-1-nnnn-nnnn-n/yy/mm}
\doi{nnnnnnn.nnnnnnn}
\preprintfooter{short description of paper} % 'preprint' option specified.
\title{AAA}
\authorinfo{}
{}
\maketitle
\begin{abstract}
AAA
\end{abstract}
\section{Introduction}
This is test for Algorithm~\ref{alg:equivalentmap}. Hello world..
\begin{algorithm}
\caption{Equivalent Method Handle (MH) Detection}
\label{alg:equivalentmap}
\begin{algorithmic}[1]
\State $mh$: A method handle to be proceeded.
\State $TN$: Transformation Name.
\Procedure{Detection}{$a$, $b$}
\If{eqMap.containsKey($a$.TN) or countMH($a$)!=countMH($b$)}
\State return false
\EndIf
\If{$a$.isDirectMH() and $b$.isDirect()}
\State return $a$.targetMethod().equal($b$.targetMethod())
\EndIf
\ForAll{method handle $mh0$ in $mh$ graph}
\If {$equivMap$ contains $mh0.TN$}
\ForAll {$equivSet$ in the $equivMap$.get($mh0.TN$)}
\If{precheck($mh0$, $equivSet$) is false}
\State continue
\EndIf
\If{ $mh0$ is equivalent to a MH in $equivSet$}
\State add $mh0$ to this $equivSet$
\State break;
\EndIf
\EndFor
\If{none of equivalent set is matched}
\State initialize new $equivSet$ with $mh0$.
\State append this new set to $equivMap$.get($mh0.TN$) list.
\EndIf
\Else
\State initialize new equivalent set \emph{equivSet} with $mh0$
\State add new pair ($mh0.TN$, \emph{equivSet}) to $equivMap$.
\EndIf
\EndFor
\EndProcedure
\end{algorithmic}
\end{algorithm}
\end{document}
下のスクリーンショットに示すように、3 行目の関数名は自動的に大文字に変換されます (この変更は不要です)。
4 行目 (12 と 23) では、IF 条件内に大きな空白があります。これらの空白は自動的に挿入されたようで、削除できませんでした。
また、条件テストで add/or/not ロジックを使用するにはどうすればよいでしょうか。ご覧のとおり、4 行目の条件は、OR と AND のロジックの組み合わせです。4 行目を置き換えてみました:
``\If{eqMap.containsKey($a$.TN) or countMH($a$)!=countMH($b$)}''
と
``\If{eqMap.containsKey($a$.TN) \OR countMH($a$)!=countMH($b$)}''
しかし失敗しました。コンパイラはundefined control flow
\OR と言います。
答え1
問題は列のサイズが狭いことに起因します。
選択肢は2つあります。
\footnotesize
事前に宣言する\begin{algoritmic}
\begin{algorithm} \caption{Equivalent Method Handle (MH) Detection} \label{alg:equivalentmap} \footnotesize \begin{algorithmic}[1] \State $mh$: A method handle to be proceeded. ... \EndProcedure \end{algorithmic} \end{algorithm}
algorithm*
の代わりにを使用するとalgorithm
、アルゴリズムがページの上部に 2 列幅でタイプセットされます。\begin{algorithm*} \caption{Equivalent Method Handle (MH) Detection} \label{alg:equivalentmap} \begin{algorithmic}[1] \State $mh$: A method handle to be proceeded. ... \EndProcedure \end{algorithmic} \end{algorithm*}
答え2
私は egreg の回答を続けます。これは、フォント サイズを小さくするか、テキストの幅を広げて改行を回避することで「バグ」#2 を修正します。
マクロを再定義することで、プロシージャの名前を好きなようにフォーマットできます
\textproc
。例:\algrenewcommand\textproc{\textit}
私が選択した斜体が気に入らない場合は、
\textrm
代わりに試してみてください。egreg の提案を使用せず、フォント サイズと 1 列のアルゴリズムに固執したい場合は、
\raggedright
の直前にを追加して\begin{algorithmic}
、アルゴリズムの右揃えを回避できます。ただし、これにより、折り返された行がインデントされず、見栄えが悪くなります。 を使用して行を明示的に分割することもできます\\
。ただし、egreg の提案をお勧めします。あなたが言及した論理接続詞は ではサポートされていません
algorithmicx
(ただし ではサポートされていますalgorithmics
が、これはあなたのソースと互換性がありません)。これらは次のように定義できます。\usepackage{xspace} \algnewcommand\OR{\textbf{or}\xspace} \algnewcommand\AND{\textbf{and}\xspace} \algnewcommand\NOT{\textbf{not}\xspace}
「break」と「continue」についても同様にして、太字で表示することをお勧めします。
\algnewcommand\Break{\textbf{break}\xspace} \algnewcommand\Continue{\textbf{continue}\xspace}
\State \Return
の代わりにを使用すると\State return
、「return」キーワードも太字になります。
最後に、アルゴリズムでは一貫して数式モードを使用するか、まったく使用しないようにすることをお勧めします。たとえば、は$mh0.TN$
非常に見苦しく見えます (添付の図の 2 行目の のタイプセットを見てください$TN$
--- 数式モードでの文字の並置は乗算を意味し、文字間に余分なスペースが残ります)。数式モードを削除するか、 を使用してください$\mathit{mh0}.\mathit{TN}$
。