以下会产生错误!如果 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
。第一个参数由空格标记分隔,因此#1
是text=
。
第二个参数遵循 TeX 的参数抓取规则:要么是单个标记,要么是括号分隔的组。在后一种情况下(即我们的示例),TeX 会删除括号,因此 也是#2
如此5in,8in
。
\zap@space
然后第二次调用\zap@space text=5in,8in \@empty
。这里#1
是text=5in,8in
和,这会导致#2
以退出!\@empty
\zap@space
text=5in,8in
如果仔细观察,现在有两个选项geometry
:text=5in
和8in
。后者不是有效选项,因此出现错误:
! Package keyval Error: 8in undefined.
See the keyval package documentation for explanation.
Type H <return> for immediate help.
的示例也是如此hyperref
,只是有四次迭代来\zap@space
删除零之间的空格,最终的选项列表是pdfborder=000
。
但我该如何解决这个问题呢?
嗯,显而易见的解决办法是删除空格,这样第一次调用\zap@space
is \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
全局选项。