假设我有一个双栏scrbook
文档,其中每章的最后一页使用balance
multicol
由于不属于该问题的原因,包因为对我来说不是一个选择。
\documentclass[twocolumn]{scrbook}
\usepackage{lipsum}
\usepackage{balance}
\begin{document}
\lipsum[1]
\balance
\lipsum[2]
\end{document}
是否有某种方法可以用横跨两列的图像填充剩余空间?
我知道这样说有点别扭,但我希望你能明白我在做什么。我知道最终可能会以完全不同的方式完成,例如balance
一开始就不使用,这对我来说没问题。但我必须重复一遍,multicol
不是一个选项,使用与不同的文档类也不是一个选项scrbook
。(主要是因为文档超过 500 页,大部分布局都已完成,我正在做最后的润色,此时进行如此根本性的改变将需要比我目前愿意做的更多的重新工作。抱歉。)
答案1
这个可能的解决方案定义了一个新的图形环境,称为figurehere
抑制浮动属性,然后通过tikz
技能寻求帮助current page node
。由于事先不知道确切的文本高度,因此可能需要相应地更改一些参数。可以使用
current page.north or current page.south
,例如,如果文本高度小于或大于文本高度的 1/2。shift={(x,y)}
一旦确定了当前页面节点,就可以用作微调,该节点作为原点。x>0,y>0 代表第一象限,而 x<0,y<0 代表第四象限。width
图的和也height
可以用作微调参数。
编辑:有关第 1 点和第 2 点的详细说明,请参阅
如果选择中心 0 作为节点current page.center
,则
右上角(A)有 x>0,y>0。第一象限
左上角(D)有 x<0,y>0。第二象限
左下角(C)的 x<0,y<0。第三象限
右下角(B)的 x>0,y<0。第四象限
若选择C角作为
current page.south west
节点,则网格区域均具有x>0,y>0的坐标。若选择B角作为
current page.south east
节点,则网格区域均具有x<0,y>0坐标。如果选择 A 角作为`当前页面.东北节点,则网格区域均具有 x<0、y<0 坐标。
若选择D角作为
current page.north west
节点,则网格区域均具有x>0,y<0的坐标。
shift={(x,y)}
遵循相同的概念来确定要转移到的特定位置。
\makeatletter
\newenvironment{figurehere}
{\def\@captype{figure}}
{}
\makeatother
代码
\documentclass[twocolumn]{scrbook}
\usepackage{lipsum}
\usepackage{balance}
\usepackage{graphicx}
\usepackage{tikz}
\makeatletter
\newenvironment{figurehere}
{\def\@captype{figure}}
{}
\makeatother
\begin{document}
\lipsum[1]
\balance
\lipsum[2]
\begin{tikzpicture}[remember picture,overlay]
\node[anchor=center,shift={(-1.1cm,-2cm)}] at (current page.center) {
\begin{figurehere}
\includegraphics[width=\textwidth,height=10cm]{example-image-a}
\end{figurehere}};
\end{tikzpicture}
\end{document}