是否有一个预定义的宽度可以覆盖文本和边距区域?如果我错了请纠正我,但它基本上等于\textwidth+\marginparsep+\parginparwidth
。
LaTeX 是否在某处提供了该功能?
如果不是,我目前在序言中这样定义它:
\newlength{\widewidth}
\setlength{\widewidth}{\textwidth+\marginparsep+\marginparwidth}
这是正确的方法吗?有什么注意事项吗?例如,如果我更改了页面的方向,是否会\widelength
更改其大小以反映这一点?
答案1
一旦定义了用户长度,它将以物理单位固定,直到用户重新设置(见定义随字体大小变化而缩放的长度)。因此,定义可以随页面尺寸变化而调整的“长度”的方式是将其定义为\def
随格式变化而更新的系统长度的宏,而不是\setlength
将长度固定的宏。通过这种方式,\def
每次调用时都会重新评估其“当前”值。
一旦学会了这一课,你的问题的下一个方面就是,\linewidth
而不是\textwidth
在例如切换到横向模式等时使用的适当长度。在我的 MWE 的第 1 页上,使用哪个没有区别,但在第 2 页上,可以看到定义\linewidth
给出了正确的结果,而不是\textwidth
结果。
最后,如果\reversemarginpar
使用,如 MWE 第 3 页所示,则必须制定额外规定
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{pdflscape}
\usepackage[nopar]{lipsum}
\def\wrongwidewidth{\dimexpr\textwidth+\marginparsep+\marginparwidth}%
\def\rightwidewidth{\dimexpr\linewidth+\marginparsep+\marginparwidth}%
\begin{document}
\lipsum[1]\marginpar{This is a test of a margin par}\vspace{2cm}\par
Doesn't matter\par
\noindent\includegraphics[width=\wrongwidewidth]{test}
Doesn't matter\par
\noindent\includegraphics[width=\rightwidewidth]{test}
\begin{landscape}
\lipsum[2]\marginpar{This is a test of a margin par}\vspace{2cm}\par
Wrong\par
\noindent\includegraphics[width=\wrongwidewidth]{test}
Right\par
\noindent\includegraphics[width=\rightwidewidth]{test}
\end{landscape}
With reverse marginpar, tricks must be done\vspace{2cm}\par\reversemarginpar
\lipsum[1]\marginpar{This is a test of a margin par}\vspace{2cm}\par
Doesn't matter\par
\noindent\makebox[\linewidth][r]{\includegraphics[width=\wrongwidewidth]{test}}
Doesn't matter\par
\noindent\makebox[\linewidth][r]{\includegraphics[width=\rightwidewidth]{test}}
\end{document}