如何获取几何长度?

如何获取几何长度?

是否有关键字可以访问几何包的每个长度?我知道\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}

相关内容