背景
数十个源代码片段作为算法浮点数内的图像插入到文档中。其他图像是屏幕截图,作为图形浮点数插入,以进行区分。所有图形浮点数都应居中,因此序言包含:
% Resize figures that are too wide for the page.
\let\oldincludegraphics\includegraphics
\renewcommand\includegraphics[2][]{%
\oldincludegraphics[width=\ScaleIfNeeded]{#2}
\centering
}
正如在其他地方定义的一样,这种方法ScaleIfNeeded
有效,可以使所有图像都居中,包括算法图像。
问题
算法浮点数还包含图像,这些图像居中,这是不可取的。每个算法的代码类似于:
\begin{algorithm}[H]
\includegraphics{source/sql/query-formatted.sql.png}
\caption{\label{alg:Query-with-Formatting}Query with Formatting}
\end{algorithm}
想法
尝试过:
% Centre algorithms.
\let\oldalgorithm\algorithm
\let\endoldalgorithm\endalgorithm
\renewenvironment{algorithm}[1][ht]{%
\begin{flushleft}
\oldalgorithm[#1]
\end{flushleft}
}%
{\endoldalgorithm}
这会导致许多错误(“}
插入丢失”等等)。
问题
算法浮点数中专门嵌入的图像如何实现左对齐?
奖励问题
如何对算法浮动框添加粗的左侧垂直线(或任何样式更改)?例如,此“批处理源文本”的左侧边框间接相关问题. (或者 SuperUser.com 上的任何源代码片段。)
谢谢你!
答案1
这还没有经过测试,但是像下面这样的情况怎么样?
\expandafter\def\expandafter\algorithm\expandafter{%
\expandafter\let\expandafter\centering\expandafter\relax
\algorithm
}
这使得\centering
算法环境中什么也不做。(实际上,使用包可以有更好的方法来实现这些功能etoolbox
。)如果您愿意,您可以替换\relax
为\raggedright
(或使用包\RaggedRight
中的更好方法ragged2e
),如果您确实想要这种行为。flushleft
环境不是您想要的,因为这会增加额外的空间。
编辑:
实际上,我有一个比重新定义\centering
本地更好的主意,因为感觉不对。这样如何:
\let\oldincludegraphics\includegraphics[2][]{%
\oldincludegraphics[width=\ScaleIfNeeded]{#2}%
\graphicsalignment
}
\expandafter\def\expandafter\algorithm\expandafter{%
\expandafter\let\expandafter\graphicsalignment\expandafter\relax
\algorithm
}
\let\graphicsalignment\centering
附加问题:
这是制定规则的一个想法。
\newdimen\coderulewidth \coderulewidth=1em
\newdimen\coderulesep \coderulesep=1em
\newdimen\coderuleseptemp
\newbox\codebox
\newenvironment{coderule}[1][\coderulesep]{%
\par
\coderuleseptemp=#1\relax
\setbox\codebox=\vbox\bgroup
\linewidth=\dimexpr\linewidth-\coderulewidth-\coderulesep\relax
\hsize=\linewidth
}{%
\egroup
\noindent
\strut
\hbox{%
\vrule width\coderulewidth
\kern\coderuleseptemp
\box\codebox
}%
}
作为使用示例,这里有几个带有左侧粗线的图形(此示例需要包lipsum
)。
\begin{coderule}
\lipsum[1-2]
\end{coderule}
对于algorithmic
,算法已经缩进,因此您可以使用可选参数(或仅重新定义\coderulesep
)。
\begin{algorithm}
\begin{coderule}[0pt]
\begin{algorithmic}
\STATE $x\gets0$
\STATE $y\gets1$
\STATE $z\gets x+y$
\end{algorithmic}
\end{coderule}
\end{algorithm}