背景
包括算法浮点中的图像。图像由批处理文件自动裁剪为合适的大小。
问题
在 PDF 的以下部分中,清单 1.1 在源代码右侧有很大空间[第一张图片]:
我希望实现的结果是[第二张图片]:
请注意,图像周围的上下线之间有少量空间,我也想将其删除。
代码
相关前言代码:
\definecolor{sourcecolour}{HTML}{F0F0F0}
% 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][H]{%
\oldincludegraphics[width=\ScaleIfNeeded]{#2}%
\graphicsalignment
}
% Change the background colour of algorithm boxes
\let\oldalgorithm\algorithm
\let\endoldalgorithm\endalgorithm
\renewenvironment{algorithm}[1][htbp]{
\let\graphicsalignment\relax
\oldalgorithm[#1]
}%
{\endoldalgorithm}
% Centre graphics within non-Algorithm floats.
\let\graphicsalignment\centering
想法
将图像放在\colorbox
:
\colorbox{sourcecolour}{\parbox{\textwidth}{...}
这并没有像预期的那样起作用。它\colorbox
在图像周围添加了自己的约 0.25em 边框,将右侧推入边距。此外,它还有一个副作用,就是关闭了 Figure 浮动的居中功能。(Figure 浮动居中,而显示源代码列表的 Algorithm 浮动左对齐。)
另一种可能性是不自动裁剪突出显示的源代码图像,但如果我改变书的宽度,我必须重新生成书的所有图像。我宁愿只填充空白处。
再试一次:
\setlength\fboxrule{0pt}
\setlength\fboxsep{0pt}
% Retain left-alignment, and change background colour of algorithm floats.
\let\oldalgorithm\algorithm
\let\endoldalgorithm\endalgorithm
\renewenvironment{algorithm}[1][htbp]{
\let\graphicsalignment\relax
\colorbox{sourcecolour}{\parbox{\textwidth}{%
\oldalgorithm[#1]}}}%
{\endoldalgorithm}
这会导致编译错误。
问题
序言中需要哪些 LaTeX 代码才能制作第一张图片类似第二张图片,而不影响论证?
答案1
查看color
文档,它说\colorbox
使用参数\fboxrule
和\fboxsep
。也许可以尝试
\setlength\fboxrule{0pt}
\setlength\fboxsep{0pt}
在使用之前\colorbox
。
编辑:
对我来说这似乎有用。规则之间的空间不是由 增加的\colorbox
,而是由规则的浮动样式增加的。一种可能性是设计一种新的浮动样式,然后使用\restylefloat
该float
包中的方法来更改浮动样式algorithm
。我没有这样做,而是添加了一些字距。
我越来越不相信这是做这些事情的正确方法。感觉我们只是在不断地使用 hack。我觉得这在一定程度上是由于使用了 LyX,但我对它毫无经验,所以我不确定。
% Resize figures that are too wide for the page.
\let\oldincludegraphics\includegraphics
\renewcommand\includegraphics[2][]{%
\graphicsformat{%
\oldincludegraphics[width=\ScaleIfNeeded]{#2}%
}%
}
% Change the background colour of algorithm boxes
\let\oldalgorithm\algorithm
\let\endoldalgorithm\endalgorithm
\renewenvironment{algorithm}[1][htbp]{
\let\graphicsformat\justifiedandcolored
\oldalgorithm[#1]
}%
{\endoldalgorithm}
\def\justifiedandcolored#1{%
\setlength\fboxrule{0pt}%
\setlength\fboxsep{0pt}%
\kern-2pt
\colorbox{sourcecolour}{%
\hbox to\linewidth{#1}%
}%
\par
\kern-2pt
}
% Centre graphics within non-Algorithm floats.
\let\graphicsformat\centering