对于twoside
文档,我希望宽图像和表格能够横跨边距和文本。在我的方法中,我创建了一个命令,它接受输入并将 存储在 中save box
,测量其总高度,并将 放置在minipage
边距中的 中。minipage
横跨边距和文本主体的宽度。
我必须使用 a 的原因savebox
是,由于我将 a 放在minipage
边距中,它在文本主体中占用 0 垂直空间,因此我需要测量它的高度并vspace
在文本中放置 a 以将后续材料向下移动至该高度。
现在,第一次运行效果很好,但是当我再次调用命令放置另一个宽图像时,我收到错误。我明白为什么会收到此错误;我正在尝试覆盖现有的savebox
。我在编写代码时认为它只会在本地保存,而不是全局保存。有什么办法可以做到这一点吗?也就是说,在本地分配它,或者也许只是在之后删除它。
在下面的 MWE 中,注释掉该行将会出现错误。
\documentclass[11pt, twoside]{article}
\usepackage{graphicx, showframe}
\newlength\marginandtext
\addtolength{\marginandtext}{\textwidth}
\addtolength{\marginandtext}{\marginparwidth}
\addtolength{\marginandtext}{\marginparsep}
\newcommand{\leftsidefullwidth}[1]{%
\newsavebox\mybox
\newlength\myheight
\newlength\mydepth
\savebox\mybox{\noindent#1}
\settoheight\myheight{\usebox\mybox}
\settodepth\mydepth{\usebox\mybox}
\addtolength{\myheight}{\mydepth}
\marginpar{\begin{minipage}{\marginandtext}
\usebox\mybox
\end{minipage}}
\vspace{\myheight}
}
\begin{document}
This page is left empty for this example, since it needs to be shown on left pages.
\clearpage
\leftsidefullwidth{\includegraphics[width=\marginandtext,height=6cm]{example-image-a}}
foo
%\leftsidefullwidth{\includegraphics[width=\marginandtext,height=3cm]{example-image-b}}
foo
\end{document}
答案1
这里根本不需要盒子或测量,因为
\savebox\mybox{\noindent#1}
\savebox
是水平的构造(如\mbox
)因此\noindent
是无操作,并且框是其内容的大小。你事先知道这个大小,因为你有
[width=\marginandtext,height=6cm]
您应该使用普通浮点数而不是边距,因为浮点数占用主文本流中的空间,然后\makebox[\textwidth][l]{begin{minipage}{\marginandtext}}
在一侧使用,[r]
在另一侧使用。