是否有关键字可以访问几何包的每个长度?我知道\textwidth
,\pagewidth
但是有没有办法访问左边距(内部边距)?当然,这个大小取决于我们是偶数页还是奇数页……
答案1
首先,我建议重新审视你的第一个问题和接受这是给您的最好的答案之一。
关于这个问题,LaTeX 提供了\oddsidemargin
和\evensidemargin
,但您需要在这些长度上各加一英寸才能得到纸张边框的边距。这是因为对于 TeX 来说,文档原点位于纸张左边框顶部下方 1 英寸和右侧 1 英寸处。下面的示例显示了如何进行此计算,甚至使用 以厘米为单位打印结果siunitx
。
现在,问题仍然存在:对于当前页面,适用的是 the\oddsidemargin
还是 the \evensidemargin
?这不是很简单,因为单纯地检查计数器page
是奇数还是偶数是不可靠的。例如,当您测试计数器时,TeX 可能正在处理第 1 页,但如果这恰好位于足够长的段落的中间,那么它的某些行最终可能会落在第 2 页甚至更远的地方,而这只有在阅读整个段落后才会知道——因为 TeX 会全局优化段落。
处理此类问题的典型方法是与标签. 标签是那是什么由 TeX 基元生成\write
,它以与字符框相同的方式附加到页面上,并且可以可靠地获取此页码(至少经过两次编译)。该ifoddpage
包使用这种技术,可以轻松检查使用的位置\checkoddpage
(此命令写入标签)是在奇数页还是偶数页。下面的宏演示了这一点\myMarginCheck
。不要忘记因为标签而编译两次。
除了这里精确提到的左右边距外,其他布局参数使用起来也更简单,可以在包的文档中找到。最geometry
重要的是\paperwidth
、\paperheight
、\headheight
、\headsep
、\topskip
和。\footskip
\marginparsep
\marginparwidth
\documentclass{book}
% Use a small paper size and small margins for the example
\usepackage[paperwidth=20cm, paperheight=4cm, inner=1.7cm, outer=3.2cm,
top=2cm, headheight=1cm, headsep=1cm]{geometry}
\usepackage{ifoddpage}
\usepackage[round-mode=places, round-precision=2]{siunitx} % only for demo code
\makeatletter
% Macro for nicely printing a length in centimeters. You don't need it to *use*
% the lengths.
\newcommand*{\convertToCm}[1]{%
\begingroup
\edef\tmp{\strip@pt\dimexpr(#1)/7227*254\relax}%
\SI{\tmp}{\centi\meter}%
\endgroup
}
\makeatother
\newlength{\myLeftMargin}
\newlength{\myRightMargin}
% To be called just after \checkoddpage
\newcommand*{\myComputeMargins}{%
\setlength{\myLeftMargin}{%
\dimexpr 1in + \ifoddpage\oddsidemargin\else\evensidemargin\fi \relax}%
\setlength{\myRightMargin}{%
\dimexpr \paperwidth - \textwidth - \myLeftMargin \relax}%
}
\newcommand*{\myMarginCheck}{%
\checkoddpage\myComputeMargins
This is an \ifoddpage odd\else even\fi\ page. The left margin is thus an
\ifoddpage inner\else outer\fi\ one and its width is
\the\myLeftMargin, that is \convertToCm{\myLeftMargin}. The right margin is
\the\myRightMargin, that is \convertToCm{\myRightMargin}.\par
}
\begin{document}
\myMarginCheck
\newpage
\myMarginCheck
\end{document}
答案2
是否有一个关键字可以访问几何包的每个长度?
texdoc geometry
还texdoc layouts
有助于理解文档布局的长度。
但是有没有办法访问左边距(内部边距)?
我猜“访问”的意思是设置边距宽度,这很简单:
\documentclass[twoside]{article}
\usepackage[lmargin=7cm]{geometry}
\usepackage{lipsum}
\begin{document}
\lipsum
\end{document}