Revtex4-1 与 algorithm2e 缩进冲突

Revtex4-1 与 algorithm2e 缩进冲突

revtex4-1 和 algorithm2e 包之间似乎存在冲突。每当我尝试插入算法使用时阻止revtex4-1文档类,制表功能无法正常工作。以下 latex 代码应该可以自我解释。

%\documentclass[10]{article}
\documentclass[10]{revtex4-1}

% these are to avoid another clash between revtex and algorithm2e
\makeatletter
\newif\if@restonecol
\makeatother
\let\algorithm\relax
\let\endalgorithm\relax
% needed includes
\usepackage[ruled]{algorithm2e}
\usepackage{algorithmic}

\begin{document}

The following pseudocode exibits a clash between revtex4-1 and algorithm2e.

\begin{algorithm}
\caption{Calculate something}
\begin{algorithmic}
\FOR{every thing you}
    \FOR{every step you}
        \STATE{compute something}
    \ENDFOR
\ENDFOR
\end{algorithmic}
\end{algorithm}

\end{document}

这是渲染后的 PDF 在我的系统上显示的样子(抱歉,我不允许在这篇文章中插入图片)。使用简单的制表符时,制表是正确的文章文档类。我在 Ubuntu 10.04 下使用 Texmaker(带有 texLive)。

使用revtex4-1文档类别:

for every thing you do
for every step you do
compute something
end for
end for

使用文章文档类别:

for every thing you do
    for every step you do
        compute something
    end for
end for

有人有解决方案可以让这两者协同工作吗?

答案1

algorithm2e/algorithmic包和之间存在不兼容性revtex4-1;一种可能性是使用algcompatible而不是algorithmic(命令的语法相同,这解决了缩进问题)并使用包newfloat来定义新的algorithm浮点数。下面是一个说明这种方法的示例(我使用了 atable和 afigure环境来展示新定义的浮点数如何与类保持一致):

\documentclass{revtex4-1}
\usepackage{algcompatible}
\usepackage{newfloat}

\DeclareFloatingEnvironment[
    fileext=loa,
    listname=List of Algorithms,
    name=ALGORITHM,
    placement=tbhp,
]{algorithm}

\begin{document}

\begin{figure}
\rule{2cm}{2cm}
\caption{A test caption for a figure}
\end{figure}

\begin{table}
\rule{2cm}{2cm}
\caption{A test caption for a table}
\end{table}

\begin{algorithm}
\begin{algorithmic}
\FOR{every thing you}
    \FOR{every step you}
        \STATE{compute something}
    \ENDFOR
\ENDFOR
\end{algorithmic}
\caption{Calculate something}
\end{algorithm}

\end{document}

在此处输入图片描述

如果想要保留在 中定义的环境ruled风格,则必须做一些额外的工作;在这种情况下,可以使用包(提供必要的调整以恢复在 中定义的格式);这里有一个小例子来说明这种可能性:algorithmalgorithm2ecaptionrevtex4-1

\documentclass{revtex4-1}
\usepackage{newfloat,algcompatible}
\usepackage[size=small]{caption}
\usepackage{etoolbox}

\AtBeginEnvironment{algorithm}{\noindent\hrulefill\par\nobreak\vskip-5pt}
\usepackage{newfloat}

\DeclareFloatingEnvironment[
    fileext=loa,
    listname=List of Algorithms,
    name=ALGORITHM,
    placement=tbhp,
]{algorithm}
\DeclareCaptionFormat{algorithms}{\vskip-15pt\hrulefill\par#1#2#3\vskip-6pt\hrulefill}
\captionsetup[algorithm]{singlelinecheck=off,format=algorithms}

\begin{document}

\begin{figure}
\rule{2cm}{2cm}
\caption{A test caption for a figure}
\end{figure}

\begin{algorithm}
\begin{algorithmic}
\FOR{every thing you}
    \FOR{every step you}
        \STATE{compute something}
    \ENDFOR
\ENDFOR
\end{algorithmic}
\caption{Calculate something}
\end{algorithm}

\end{document}

在此处输入图片描述

如果由于某种原因该newfloat包不可用,则可以改用trivfloat

\documentclass{revtex4-1}
\usepackage{algcompatible}
\usepackage[floatrow]{trivfloat}

\trivfloat{algorithm}
\renewcommand\algorithmname{ALGORITHM}

\begin{document}

\begin{figure}
\rule{2cm}{2cm}
\caption{A test caption for a figure}
\end{figure}

\begin{table}
\rule{2cm}{2cm}
\caption{A test caption for a table}
\end{table}

\begin{algorithm}
\begin{algorithmic}
\FOR{every thing you}
    \FOR{every step you}
        \STATE{compute something}
    \ENDFOR
\ENDFOR
\end{algorithmic}
\caption{Calculate something}
\end{algorithm}

\end{document}

答案2

我必须使用 Revtex4-1 对 Gonzalo Medina 提供的解决方案进行一些研究,以在浮动伪代码并将标题放在其顶部时修复一些水平线的位置,并更新非常有用的 \Comment 命令(还添加 \Input 命令,这对某些人可能有用)。

\documentclass[aps,prl,reprint,groupedaddress,amsmath, amssymb, showpacs]{revtex4-1}

\usepackage{newfloat,algcompatible}
\usepackage[size=small]{caption}
\usepackage{etoolbox}

\AtEndEnvironment{algorithm}{\noindent\hrulefill\par\nobreak\vskip-8pt}

\DeclareFloatingEnvironment[
    fileext=loa,
    listname=List of Algorithms,
    name=ALGORITHM,
    placement=tbhp,
]{algorithm}
\DeclareCaptionFormat{algorithms}{\vskip-15pt\hrulefill\par#1#2#3\vskip-6pt\hrulefill}
\captionsetup[algorithm]{singlelinecheck=off,format=algorithms}

%\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand\algorithmiccomment[1]{\hfill\(\triangleright\) #1}%       

\algblock[Input]{Input}{EndInput}
\algblockdefx[Input]{Input}{EndInput}%
    [1]{\textbf{Input} #1}%
    {}

\begin{document}

\begin{algorithm}[t]
\caption {Compute Something}
\begin{algorithmic}
\Input{Something you have}\EndInput
\FOR{Something you know}
\State{Something you can}
\ENDFOR
\end{algorithmic}
\end{algorithm}

\end{document}

如果你的 miktex distributino 中没有可用的 newfloat 包,你应该可以在这里找到它

http://www.ctan.org/tex-archive/macros/latex/contrib/caption

只需下载整个标题包,使用 latex 编译 caption.ins,这将创建 newfloat.sty,您可以将其移动到本地目录。

最好的

相关内容