覆盖 \centering 使图像左对齐

覆盖 \centering 使图像左对齐

背景

数十个源代码片段作为算法浮点数内的图像插入到文档中。其他图像是屏幕截图,作为图形浮点数插入,以进行区分。所有图形浮点数都应居中,因此序言包含:

% 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}

相关内容