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
风格,则必须做一些额外的工作;在这种情况下,可以使用包(提供必要的调整以恢复在 中定义的格式);这里有一个小例子来说明这种可能性:algorithm
algorithm2e
caption
revtex4-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,您可以将其移动到本地目录。
最好的