如何减少包 algpseudocode 的算法缩进?

如何减少包 algpseudocode 的算法缩进?

我想通过更改包的缩进空间来节省一些水平空间algpseudocode。我该怎么做?

我认为我必须改变的变量是\algorithmicindent但我无法做到这一点。

\documentclass{article}
\usepackage{algorithm}% http://ctan.org/pkg/algorithm
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx

\usepackage{caption}
\usepackage{subcaption}
\usepackage{tikz}
\begin{document}
\section{foo}
Text

\setlength\fboxsep{0pt}
\renewcommand\algorithmicindent{.5em}

\begin{figure}[!ht]
  \fbox{
  \begin{subfigure}[b]{.5\linewidth}
    \centering
    \begin{algorithmic}[0]
      \Procedure{Euclid}{$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 \textbf{return} $b$\Comment{The gcd is b}
      \EndProcedure
    \end{algorithmic}

    \caption{Algorithm}\label{fig:alg}
  \end{subfigure}%
  }
  \quad
  \begin{subfigure}[b]{.5\linewidth}
    \centering
    \tikz\draw [fill=red!20] (0,0) rectangle (3,2);
    \caption{tikz}\label{fig:tikz}
  \end{subfigure}
  \caption{Both}\label{fig:both}
\end{figure}

Text \ref{fig:alg} and \ref{fig:tikz} and \ref{fig:both}

\end{document}

* 编辑 *

结果\listfiles是:

 *File List*
 article.cls    2007/10/19 v1.4h Standard LaTeX document class
  size10.clo    2007/10/19 v1.4h Standard LaTeX file (size option)
algorithm.sty    2009/08/24 v0.1 Document Style `algorithm' - floating environm
ent
   float.sty    2001/11/08 v1.3d Float enhancements (AL)
  ifthen.sty    2001/05/26 v1.1c Standard LaTeX ifthen package (DPC)
algpseudocode.sty    
algorithmicx.sty    2005/04/27 v1.2 Algorithmicx
 caption.sty    2010/01/09 v3.1m Customizing captions (AR)
caption3.sty    2010/01/14 v3.1m caption3 kernel (AR)
  keyval.sty    1999/03/16 v1.13 key=value parser (DPC)
subcaption.sty    2008/08/31 v1.0b Adding subcaptions (AR)
    tikz.sty    2010/10/13 v2.10 (rcs-revision 1.76)
     pgf.sty    2008/01/15 v2.10 (rcs-revision 1.12)
  pgfrcs.sty    2010/10/25 v2.10 (rcs-revision 1.24)
everyshi.sty    2001/05/15 v3.00 EveryShipout Package (MS)
  pgfrcs.code.tex
 pgfcore.sty    2010/04/11 v2.10 (rcs-revision 1.7)
graphicx.sty    1999/02/16 v1.0f Enhanced LaTeX Graphics (DPC,SPQR)
graphics.sty    2009/02/05 v1.0o Standard LaTeX Graphics (DPC,SPQR)
    trig.sty    1999/03/16 v1.09 sin cos tan (DPC)
graphics.cfg    2010/04/23 v1.9 graphics configuration of TeX Live
  pdftex.def    2011/05/27 v0.06d Graphics/color for pdfTeX
infwarerr.sty    2010/04/08 v1.3 Providing info/warning/message (HO)
 ltxcmds.sty    2011/04/18 v1.20 LaTeX kernel commands for general use (HO)
  pgfsys.sty    2010/06/30 v2.10 (rcs-revision 1.37)
  pgfsys.code.tex
pgfsyssoftpath.code.tex    2008/07/18  (rcs-revision 1.7)
pgfsysprotocol.code.tex    2006/10/16  (rcs-revision 1.4)
  xcolor.sty    2007/01/21 v2.11 LaTeX color extensions (UK)
   color.cfg    2007/01/18 v1.5 color configuration of teTeX/TeXLive
 pgfcore.code.tex
pgfcomp-version-0-65.sty    2007/07/03 v2.10 (rcs-revision 1.7)
pgfcomp-version-1-18.sty    2007/07/23 v2.10 (rcs-revision 1.1)
  pgffor.sty    2010/03/23 v2.10 (rcs-revision 1.18)
 pgfkeys.sty    
 pgfkeys.code.tex
  pgffor.code.tex
    tikz.code.tex
supp-pdf.mkii
pdftexcmds.sty    2011/04/22 v0.16 Utilities of pdfTeX for LuaTeX (HO)
ifluatex.sty    2010/03/01 v1.3 Provides the ifluatex switch (HO)
   ifpdf.sty    2011/01/30 v2.3 Provides the ifpdf switch (HO)
epstopdf-base.sty    2010/02/09 v2.5 Base part for package epstopdf
  grfext.sty    2010/08/19 v1.1 Managing graphics extensions (HO)
kvdefinekeys.sty    2011/04/07 v1.3 Defining keys (HO)
kvoptions.sty    2010/12/23 v3.10 Keyval support for LaTeX options (HO)
kvsetkeys.sty    2011/04/07 v1.13 Key value parser (HO)
etexcmds.sty    2011/02/16 v1.5 Prefix for e-TeX command names (HO)
epstopdf-sys.cfg    2010/07/13 v1.3 Configuration of (r)epstopdf for TeX Live

我用的是 Mac。我使用 macports 安装了 latex 包,这是那里可用的最新版本。

答案1

您提供的示例代码有一些错误。您上一个问题中给出的示例如何将算法和 tikz 绘图(不同类型的对象)并排放置在同一个浮动环境中?没有错误。

我将首先简要分析一下你的错误。

  1. 首先,你似乎没有读过任何文档。抱歉,我说了这么多难听的话。

  2. 环境的参数subfigure是宽度。您希望有两个subfigure彼此相邻的环境。简单的计算表明.5\linewidth+\quad+.5\linewidth大于\textwidth。(quad=\hspace{1em})。结果是溢出的水平盒子

  3. 您设置以下组合

    \fbox{
      \begin{environment}
    

    这会导致出现额外的水平空格,因为你没有注释掉多余的空格。正确的格式是

    \fbox{%
      \begin{environment}
    
  4. 您不能将其封装subfigure在 中\fbox。在 内部,subfigure您可以使用 环境adjustbox来通过正确的宽度计算来构建algorithmic环境。(在示例中使用。)

  5. 环境algorithmic没有直接的解决方案来避免缩进。在示例中,我通过添加长度定义重新定义了环境本身:

    \labelwidth0pt\labelsep0pt %%ADDED
    

    进行ifequal测试。这样您就可以algorithmic像往常一样使用可选参数。(感谢 Werner)

    第二种方法(推荐)是使用patchmd包提供的命令etoolbox。(有关更多信息,请参阅文档)。通常,该命令patchcmd不适用于可选参数。通过建议的技巧(感谢 egreg),我们可以使用以下组合:

    \expandafter\patchcmd\csname\string\algorithmic\endcsname%
      {\labelwidth 0.5em}{\labelwidth0pt\labelsep0pt}{}{}
    

    威胁中给出了解释如何使用\patchcmd带有可选参数的命令?

以下是示例:

\documentclass{article}
\usepackage{algorithm}% http://ctan.org/pkg/algorithm
\usepackage{algpseudocode}% http://ctan.org/pkg/algorithmicx

\usepackage{caption}
\usepackage{subcaption}
\usepackage{tikz}
\usepackage{adjustbox}
\usepackage{etoolbox}

\makeatletter
\expandafter\patchcmd\csname\string\algorithmic\endcsname%
      {\labelwidth 0.5em}{\labelwidth0pt\labelsep0pt}{}{}
%\renewenvironment{algorithmic}[1][0]%
%   {%
%   \edef\ALG@numberfreq{#1}%
%   \def\@currentlabel{\theALG@line}%
%   %
%   \setcounter{ALG@line}{0}%
%   \setcounter{ALG@rem}{0}%
%   %
%   \let\\\algbreak%
%   %
%   \expandafter\edef\csname ALG@currentblock@\theALG@nested\endcsname{0}%
%   \expandafter\let\csname ALG@currentlifetime@\theALG@nested\endcsname\relax%
%   %
%   \begin{list}%
%      {\ALG@step}%
%      {%
%      \rightmargin\z@%
%      \itemsep\z@ \itemindent\z@ \listparindent2em%
%      \partopsep\z@ \parskip\z@ \parsep\z@%
%      \labelsep 0.5em \topsep 0.2em%\skip 1.2em 
%      \ifthenelse{\equal{#1}{0}}%
%         {\labelwidth0pt\labelsep0pt}% %%ADDED / CHANGED
%         {\labelwidth 1.2em}%
%      \leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}% Ok. the perfect leftmargin :-))
%      \ALG@tlm\z@%
%      }%
%   \setcounter{ALG@nested}{0}%
%   \ALG@beginalgorithmic%
%   }%
%   {% end{algorithmic}
%   % check if all blocks are closed
%   \ALG@closeloops%
%   \expandafter\ifnum\csname ALG@currentblock@\theALG@nested\endcsname=0\relax%
%   \else%
%      \PackageError{algorithmicx}{Some blocks are not closed!!!}{}%
%   \fi%
%   \ALG@endalgorithmic%
%   \end{list}%
%   }%
\begin{document}
\section{foo}
Text

\setlength\fboxsep{0pt}
\renewcommand\algorithmicindent{.5em}

\begin{figure}[!ht]

  \begin{subfigure}[b]{.5\linewidth}
  \begin{adjustbox}{minipage=\linewidth,frame}
    \begin{algorithmic}
      \Procedure{Euclid}{$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 \textbf{return} $b$\Comment{The gcd is b}
      \EndProcedure
    \end{algorithmic}
   \end{adjustbox}
    \caption{Algorithm}\label{fig:alg}
  \end{subfigure}%
  \begin{subfigure}[b]{.5\linewidth}
    \centering
    \tikz\draw [fill=red!20] (0,0) rectangle (3,2);
    \caption{tikz}\label{fig:tikz}
  \end{subfigure}
  \caption{Both}\label{fig:both}
\end{figure}

Text \ref{fig:alg} and \ref{fig:tikz} and \ref{fig:both}

\end{document}

相关内容