\usepackage {geometry} 文本属性错误

\usepackage {geometry} 文本属性错误

以下会产生错误!如果 text= 和 {5in,8in} 之间没有空格,则错误会得到解决。这真的很奇怪!为什么 LaTeX 会出现这种情况?

\documentclass[a4paper,10pt,onecolumn,oneside, portrait]{article}

\usepackage[text= {5in,8in},centering]{geometry}

\begin{document}





\section{What Endogenous uncertainty is:}
 yes

\subsection{Type as it is : Stochastic and determ! }
on

\subsubsection{Well there is more than it}
Yes  

\end{document}

答案1

在评论中回答你的问题:不,这是不是中的一个错误geometry。事实上,如果你对其他包做类似的事情,它也不会起作用:

\usepackage[pdfborder= {0 0 0}]{hyperref}

错误不同:

Package hyperref Warning: Invalid value `000'
(hyperref)                for option `pdfborder'.

但原因是一样的。

此行为是在 LaTeX 内核中设计实现的。原因如下:

\documentclass[12 pt]{article}

表现如下:

\documentclass[12pt]{article}

到底是什么正在发生?你问。LaTeX 的包和类加载器有一个\@pass@ptions宏,在某些时候,它使用类似

\zap@space#2 \@empty

其中\zap@space定义为:

\def\zap@space#1 #2{%
  #1%
  \ifx#2\@empty\else
    \expandafter\zap@space
  \fi
  #2}

这会清除选项列表中的空格。但它也有一些有趣的后果(其中之一导致您在 中出现错误geometry)。假设您有选项列表text= {5in,8in}

第一次调用\zap@space\zap@space text= {5in,8in} \@empty。第一个参数由空格标记分隔,因此#1text=

第二个参数遵循 TeX 的参数抓取规则:要么是单个标记,要么是括号分隔的组。在后一种情况下(即我们的示例),TeX 会删除括号,因此 也是#2如此5in,8in

\zap@space然后第二次调用\zap@space text=5in,8in \@empty。这里#1text=5in,8in和,这会导致#2以退出!\@empty\zap@spacetext=5in,8in

如果仔细观察,现在有两个选项geometrytext=5in8in。后者不是有效选项,因此出现错误:

! Package keyval Error: 8in undefined.

See the keyval package documentation for explanation.
Type  H <return>  for immediate help.

的示例也是如此hyperref,只是有四次迭代来\zap@space删除零之间的空格,最终的选项列表是pdfborder=000

但我该如何解决这个问题呢?

嗯,显而易见的解决办法是删除空格,这样第一次调用\zap@spaceis \zap@space text={5in,8in} \@empty,然后#1是 is text={5in,8in},一切就顺利了。

第二个不太明显但有时非常有用的选项是加载 Heiko Oberdiek 的kvoptions-patch软件包,其手册甚至指出:

LaTeX 的包/类选项系统存在一些严重的限制,如果选项用作键和值对,则尤其会影响值部分。

  • 无论位置如何,空格都会被删除:

\documentclass[box=0 0 400 600]{article}

现在每个包都将被视为box=00400600全局选项。

相关内容