geometry 包中的 Papersize 选项行为不当。可能与其他包发生冲突?

geometry 包中的 Papersize 选项行为不当。可能与其他包发生冲突?

我正在尝试通过软件包为我的文档设置自定义纸张大小geometry。但是,每当我添加 [papersize={x,y}] 选项时,我都会得到错误的输出。文档编译成功(使用 XeLaTeX),但页面大小没有改变,而且边距看起来乱糟糟的(文本超出了底部边距)。

这不会发生在新文档上,所以我怀疑几何包与我正在使用的其他包之一发生冲突;但我不知道是哪一个。

这是我的代码:

\documentclass[twoside,11pt]{memoir}

%set page dimensions
\usepackage[
xetex,
outer=1.84in,inner=0.92in, 
top=0.92in, bottom=2.1in,
papersize={8.27in,13.39in}]{geometry}

%Set English lang. 
\usepackage{polyglossia}
\setmainlanguage{english}

%enable emphasis with color instead of italics
\usepackage{xcolor}
\definecolor{ecol}{gray}{0.15}
\renewcommand\emph[1]{\textcolor{ecol}{\textbf{#1}}}

%define typeface
\usepackage{fontspec}[ligatures=tex]
\setmainfont{Baskerville}[SmallCapsFont = Bodoni 72 Smallcaps]%

\usepackage{microtype}

%figures and graphics
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{wrapfig}
\usepackage{caption}

%layout debugging
\usepackage{layout}

%for referencing labels
\usepackage[colorlinks=true, anchorcolor=red]{hyperref}

\usepackage{lipsum}

\begin{document}

\lipsum[1-20]

\end{document}

对于导致该问题的原因您有什么想法吗?

答案1

通过修剪示例并向 hyperref 添加选项后,人们发现当使用选项setpagesize=false时会发生一些可疑的事情。colorlinks

\documentclass[twoside,11pt]{memoir}
%\documentclass{article}

%set page dimensions
\usepackage[
%xetex,
outer=1.84in,inner=0.92in, 
top=0.92in, bottom=2.1in,
papersize={8.27in,13.39in}
]{geometry}

%Set English lang. 
%\usepackage{polyglossia}
%\setmainlanguage{english}

%enable emphasis with color instead of italics
%\usepackage{xcolor}
%\definecolor{ecol}{gray}{0.15}
%\renewcommand\emph[1]{\textcolor{ecol}{\textbf{#1}}}

%define typeface
%\usepackage{fontspec}[ligatures=tex]
%\setmainfont{Baskerville}[SmallCapsFont = Bodoni 72 Smallcaps]%

%\usepackage{microtype}

%figures and graphics
% \usepackage{graphicx}
% \usepackage{subcaption}
% \usepackage{wrapfig}
% \usepackage{caption}

%layout debugging
%\usepackage{layout}

%for referencing labels
\usepackage[setpagesize=false, 
            colorlinks=true, 
            %anchorcolor=red
]{hyperref}

\usepackage{lipsum}

\begin{document}

\lipsum[1-20]

\end{document}

注释掉colorlinks=true后,得到这个

在此处输入图片描述

但有了colorlinks=true主动,就会得到这个

在此处输入图片描述

我现在不知道是什么原因造成的。我还用用户(不是 Lipsum)段落进行了测试,只是为了确保hyperref和之间没有一些奇怪的交互lipsum。这在正常的非 Lipsum 生成的文本中也发生过同样的情况。

由于您正在使用memoir类,我假设您已经阅读了它的文档,因此也许尝试使用它自己的界面进行页面布局。(未经测试)

修剪后的示例也可以用 pdflatex 编译,结果相同。它不是 xetex 特有的。不要将 xetex 选项传递给 geometry,它知道这一点。


你可能想向memoir维护者报告

\documentclass{memoir}

\usepackage[papersize={10cm,25cm}]{geometry}
\usepackage[setpagesize=false,
            colorlinks=true
]{hyperref}

\begin{document}
Hello
\end{document}

显示问题。注释掉 即可解决colorlinks=true。使用articleclass 或bookclass 则没有问题。

\documentclass{book}

\usepackage[papersize={10cm,25cm}]{geometry}
\usepackage[setpagesize=false,
            colorlinks=true
]{hyperref}

\begin{document}
Hello
\end{document}

当使用 latex 检查 dvi 时,人们在案例colorlinks=true(回忆录类,10cm 和 25cm)中发现 dvi 中的以下内容

papersize=614.295pt,794.96999pt papersize=284.52756pt,711.3189pt papersize=614.295pt,794.96999pt

我删除了一些非 ASCII 字节。

无论colorlinks=false有没有选择,人们都会在 dvi 中的相同位置看到类似的东西:

papersize=614.295pt,794.96999pt papersize=284.52756pt,711.3189pt

似乎 的colorlinks=true选项hyperref会触发另一个特殊的页面设置,但 不会发生这种memoir情况article



似乎只需加载即可解决问题 geometry hyperref. (然后setpagesize=false就不再需要了)

但我没有花时间去调试(现有)问题的根本原因memoir++ hyperrefgeometry



正如@UlrikeFischer 所解释的那样(参见https://tex.stackexchange.com/a/384952/4686以及她的评论),并加载colorlinks=truecolor软件包,从而触发使用图形提供的驱动程序。

驾驶员现在已经memoir意识到并使用了\stockwidth这些长度,\stockheightgeometry没有修改它们。

(使用 pdftex 驱动程序,在文档开始时执行)

  \ifdim\stockwidth>0pt\relax
    \ifdim\stockheight>0pt\relax
      \pdfpagewidth=\stockwidth
      \pdfpageheight=\stockheight
    \fi
  \fi

因此,hyperref在循环之外,以下 MWE 也会触发该问题:

\documentclass{memoir}

\usepackage[papersize={10cm,10cm}]{geometry}
\usepackage{graphicx}% or color package

\listfiles

\begin{document}
Hello
\end{document}

选项无效,因为它不影响之后加载图形提供的驱动程序的setpagesize=false效果。hyperrefgeometry

正如我上面推荐的那样,方法是使用memoir用户界面,(这也是@daleif 和@UlrikeFischer 的建议,Ulrike 在评论中说:

我的回答中的建议是明确设置 \setstocksize{<width>}{<height>}。但 David 希望更新几何图形,以便将来不再需要这样做。

geometry最后加载或color先加载并使用(setpagesize=false如果 hyperref 是最后一个)。

\documentclass{memoir}

\usepackage{color}
\usepackage[papersize={10cm,10cm}]{geometry}
\usepackage[setpagesize=false,
           colorlinks=true]{hyperref}

\listfiles

\begin{document}
Hello
\end{document}

有正确的输出现在setpagesize=false有效果,而且是需要的。因此,您可以通过提前加载来解决问题color。或者更好的是,使用memoir自己的界面来调整页面尺寸。

答案2

geometry我可能会说这是一个+ hyperrefvs的问题memoir,而不是直接的memoir问题。

如果你使用回忆录布局界面而不是geometry

\setstocksize{13.39in}{8.27in}
\settrimmedsize{\stockheight}{\stockwidth}{*}
\setlrmarginsandblock{0.92in}{1.84in}{*}
\setulmarginsandblock{0.92in}{2.1in}{*}
\checkandfixthelayout[fixed]

请参阅memoir手册以了解的解释fixed,我可能会使用nearest它。


正如对 @jfbu 的评论一样

\documentclass{memoir}
\usepackage[
papersize={10cm,20cm},
]{geometry}
\usepackage[
setpagesize=false
]{hyperref}
\usepackage{lipsum}
\begin{document}
\lipsum[1-20]
\end{document}

给出 (pdfinfo)

Creator:        LaTeX with hyperref
Producer:       pdfTeX-1.40.19
CreationDate:   Thu Oct 18 14:37:39 2018
ModDate:        Thu Oct 18 14:37:39 2018
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          9
Encrypted:      no
Page size:      283.465 x 566.929 pts
Page rot:       0
File size:      33104 bytes
Optimized:      no
PDF version:    1.5

图片(来自 Evince)

在此处输入图片描述

\documentclass{memoir}
\usepackage[
papersize={10cm,20cm},
]{geometry}
\usepackage[
%setpagesize=false
]{hyperref}
\usepackage{lipsum}
\begin{document}
\lipsum[1-20]
\end{document}

Creator:        LaTeX with hyperref
Producer:       pdfTeX-1.40.19
CreationDate:   Thu Oct 18 14:40:31 2018
ModDate:        Thu Oct 18 14:40:31 2018
Tagged:         no
UserProperties: no
Suspects:       no
Form:           none
JavaScript:     no
Pages:          9
Encrypted:      no
Page size:      612 x 792 pts (letter)
Page rot:       0
File size:      33115 bytes
Optimized:      no
PDF version:    1.5

图像:

在此处输入图片描述

所有内容均使用 TeXLive 2018,已全面更新

相关内容