저는 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 조건 내부에 큰 공백이 있습니다. 이 공백은 자동으로 삽입되는 것 같아서 제거하지 못했습니다.
또한 조건 테스트에서 추가/또는/하지 않음 논리를 어떻게 사용할 수 있습니까? 보시다시피 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
문제는 열의 크기가 좁기 때문입니다.
두 가지 선택이 있습니다.
\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
\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
나는 글꼴 크기를 줄이거 나 텍스트를 넓혀 줄 바꿈을 피함으로써 "버그"# 2를 수정하는 egreg의 답변을 계속하고 있습니다.
매크로를 재정의하여 원하는 방식으로 프로시저 이름의 형식을 지정할 수 있습니다
\textproc
. 예:\algrenewcommand\textproc{\textit}
내가 선택한 이탤릭체가 마음에 들지 않으면
\textrm
대신 시도해 보세요.egreg의 제안을 사용하고 싶지 않고 글꼴 크기와 단일 열 알고리즘을 고수하려면 알고리즘에서 올바른 정렬을 피하기 위해
\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}
"return" 키워드도 굵게 표시하는
\State \Return
대신 사용합니다 .\State return
마지막으로, 알고리즘에서 수학 모드를 일관되게 사용하거나 완전히 사용하지 않는 것이 좋습니다. 예를 들어, $mh0.TN$
매우 보기 흉해 보입니다( $TN$
첨부된 그림의 2번째 줄에 어떻게 조판되어 있는지 보세요 --- 수학 모드에서 문자를 병치하는 것은 곱셈을 의미하므로 문자 사이에 여분의 공간이 남습니다). 수학 모드를 제거하거나 $\mathit{mh0}.\mathit{TN}$
.