背景
使用 LyX 编写一本书。书中显示的源代码清单是图形。图形旁边应该有垂直线。但只有嵌入算法浮点中的图形。浮点的代码类似于:
\begin{algorithm}[H]
\includegraphics{source/sql/query-formatted.sql.png}
\caption{\label{alg:Query-with-Formatting}Query with Formatting}
\end{algorithm}
这些示例源代码片段有很多,而且会越来越多。手动向每个片段添加代码是不可取的。
问题
[H]
下图中的清单 1.1 显示了嵌套在垂直规则和图形之间的放置字符:
https://i.stack.imgur.com/B1i4k.png
序言使用:
% Determine if the image is too wide for the page.
\makeatletter
\def\ScaleIfNeeded{%
\ifdim\Gin@nat@width>\linewidth
\linewidth
\else
\Gin@nat@width
\fi
}
\makeatother
% Resize figures that are too wide for the page.
\let\oldincludegraphics\includegraphics
\renewcommand\includegraphics[2][]{%
\oldincludegraphics[width=\ScaleIfNeeded]{#2}
\graphicsalignment
}
% Do not centre graphics within Algorithm floats.
\expandafter\def\expandafter\algorithm\expandafter{%
\expandafter\let\expandafter\graphicsalignment\expandafter\relax
\algorithm
\vrule width 1em
}
\let\graphicsalignment\centering
问题
如何消除该[H]
论点,使之\vrule
与图形齐平,并置于“这里肯定是”的位置?(我已经设法用其他方法做到这一点,但图形不再是“这里H
肯定是”)。
谢谢你!
答案1
我认为你想做的是改变
\expandafter\def\expandafter\algorithm\expandafter{%
\expandafter\let\expandafter\graphicsalignment\expandafter\relax
\algorithm
\vrule width 1em
}
到
\let\oldalgorithm\algorithm
\let\endoldalgorithm\endalgorithm
\renewenvironment{algorithm}[1][htbp]{
\let\graphicsalignment\relax
\oldalgorithm[#1]
\vrule width1em
\kern1em
}{%
\endoldalgorithm
}
这仅适用于图形,因为 TeX 将它们视为单个框。对于algorithm
包含algorithmic
环境的更正常用法,coderule
上一个问题中的环境会更合适。