从几何包中获取布局参数

从几何包中获取布局参数

geometry包提供了一种设置布局参数的简单方法。例如,

\usepackage[margin=1in]{geometry}

将给我一份每边边距为 1 英寸的文档。具体来说,它会计算 LaTeX 参数,例如、、\textwidth和等等。是否可以检索“更友好”的值,例如、、和?\oddsidemargin\textheight\topmarginleftrighttopbottom

当然,可以使用类似 之类的东西来计算值\dimexpr \topmargin + \headheight + \headsep + 1in \relax。还有更复杂的是,includeheadincludefoot选项会影响参数的设置。

答案1

这些值存储在 pt 等命令中\Gm@lmargin\Gm@tmargin如果您对选项中实际使用的单位感兴趣,您还可以修补\Gm@defbylen(据我所知)大多数选项使用的单位,然后使用以下命令设置值\geometry

\documentclass[12pt]{article}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{geometry}
\makeatletter
\def\Gm@defbylen#1#2{%
  \expandafter\edef\csname myGm#1\endcsname{#2}%new
  \begingroup\setlength\@tempdima{#2}%
  \expandafter\xdef\csname Gm@#1\endcsname{\the\@tempdima}\endgroup}%

\geometry{margin=1in}

\begin{document}

\makeatletter\Gm@lmargin \myGmlmargin

\end{document}

答案2

该命令接受一个强制参数,该参数应为包的可选参数\geometryget之一的名称,例如,,,等(下面的版本仅支持参数,,,和及其各种别名,但可以很容易地扩展为包括所有可选参数)。geometrylefttoptextheightlmarginrmargintmarginbmargingeometry

它扩展为相应参数的值,以pts为单位。

\documentclass{article}

\usepackage{pgfkeys}
\pgfkeyssetvalue{/geometry/lmargin}{lmargin}
\pgfkeyssetvalue{/geometry/left}{lmargin}
\pgfkeyssetvalue{/geometry/inner}{lmargin}
\pgfkeyssetvalue{/geometry/innermargin}{lmargin}
\pgfkeyssetvalue{/geometry/rmargin}{rmargin}
\pgfkeyssetvalue{/geometry/right}{rmargin}
\pgfkeyssetvalue{/geometry/outer}{rmargin}
\pgfkeyssetvalue{/geometry/outermargin}{rmargin}
\pgfkeyssetvalue{/geometry/tmargin}{tmargin}
\pgfkeyssetvalue{/geometry/top}{tmargin}
\pgfkeyssetvalue{/geometry/bmargin}{bmargin}
\pgfkeyssetvalue{/geometry/bottom}{bmargin}

\newcommand{\geometryget}[1]
   {\csname Gm@\pgfkeysvalueof{/geometry/#1}\endcsname}

\usepackage{geometry}

\begin{document}
\begin{tabular}{|ll|ll|ll|ll|}
lmargin&\geometryget{lmargin}&
rmargin&\geometryget{rmargin}&
tmargin&\geometryget{tmargin}&
bmargin&\geometryget{bmargin}\\
left&\geometryget{left}&
outer&\geometryget{outer}&
top&\geometryget{top}&
bottom&\geometryget{bottom}
\end{tabular}
\end{document}

检索包几何的可选参数的值


一个更加实质性的用法示例。

下面的示例将\geometryget边距注释的宽度设置为右边距宽度的 0.8,并使其在右边距居中。

在上面的代码中,在包加载后将以下内容插入到前言中geometry

\geometry{hscale=.66,hmarginratio=1:4}

\usepackage{pgfmath}
\pgfmathsetlength{\marginparsep}{.1*\geometryget{right}}
\pgfmathsetlength{\marginparwidth}{.8*\geometryget{right}}

\usepackage{lipsum}

将文档主体替换为以下内容:

\lipsum[1-1]
\marginpar{\lipsum[2-2][1-1]}

\lipsum[3-7]

使用 \geometryget 设置边距注释相对于右边距宽度的宽度

相关内容