![如何减少包 algpseudocode 的算法缩进?](https://linux22.com/image/244449/%E5%A6%82%E4%BD%95%E5%87%8F%E5%B0%91%E5%8C%85%20algpseudocode%20%E7%9A%84%E7%AE%97%E6%B3%95%E7%BC%A9%E8%BF%9B%EF%BC%9F.png)
我想通过更改包的缩进空间来节省一些水平空间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 绘图(不同类型的对象)并排放置在同一个浮动环境中?没有错误。
我将首先简要分析一下你的错误。
首先,你似乎没有读过任何文档。抱歉,我说了这么多难听的话。
环境的参数
subfigure
是宽度。您希望有两个subfigure
彼此相邻的环境。简单的计算表明.5\linewidth+\quad+.5\linewidth
大于\textwidth
。(quad=\hspace{1em}
)。结果是溢出的水平盒子您设置以下组合
\fbox{ \begin{environment}
这会导致出现额外的水平空格,因为你没有注释掉多余的空格。正确的格式是
\fbox{% \begin{environment}
您不能将其封装
subfigure
在 中\fbox
。在 内部,subfigure
您可以使用 环境adjustbox
来通过正确的宽度计算来构建algorithmic
环境。(在示例中使用。)环境
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}