第一页标题中的 wrapfig、amsmath 和宏“\smash”之间的交互 ​​- 帮助调试

第一页标题中的 wrapfig、amsmath 和宏“\smash”之间的交互 ​​- 帮助调试

在下面的 MWE 中,pdflatex编译(texlive 2020 和 2021)给出了类型错误Extra \else

问题消失

  • \smash当我在(例如{\smash{TTT}})周围添加一个额外的组时
  • 或者如果我在正文中这里或那里添加或删除几行文本。

最后一个事实使得这个问题对我来说很难调试,因为微小的变化可能会导致问题出现或消失。

tex 源代码对我来说似乎是合法的:我使用几个知名的包,为第一页定义一个带有特殊值的标题,正文只有带有两个wrapfigure环境的文本。如果没有错误(如果我错了,请纠正我),我认为包之间可能在分页符附近存在一些意外的交互。

关于我应该如何继续调试这个问题,有什么建议吗?

\documentclass{article}
\usepackage{wrapfig}
\usepackage{amsmath}

\makeatletter
% Special header on first page
\def\ps@mine{%
  \def\@oddhead{%
    \ifnum\value{page}=1%
    \smash{TTT}%
    \else FFF%
    \fi}%
}
\makeatother

\pagestyle{mine}

\begin{document}
hi
\clearpage

Earum minus doloremque tempora aut et fugiat. Iste est in non
asperiores. Laborum aut necessitatibus dolor aspernatur facilis fuga
possimus. Alias ab quo laboriosam fugit sed voluptatem ut. In ut amet
non facilis excepturi.

Ut libero velit vel voluptatem nulla. Et et et et cum id et. Harum
nisi sit doloribus tempore quae occaecati. Est harum et nesciunt
laborum rerum.

Odit magnam inventore explicabo doloribus enim asperiores
provident. Aut ea nam non et nesciunt quasi quo. Inventore ut sed
nulla et voluptatibus ullam dicta.

Odit magnam inventore explicabo doloribus enim asperiores
provident. Aut ea nam non et nesciunt quasi quo. Inventore ut sed
nulla et voluptatibus ullam dicta.

Odit magnam inventore explicabo doloribus enim asperiores
provident. Aut ea nam non et nesciunt quasi quo. Inventore ut sed
nulla et voluptatibus ullam dicta.

\begin{wrapfigure}{R}{0.5\textwidth}
    F1\vspace{2in}
\end{wrapfigure}
xxxxx xxxxxxxxx xxx xxxxxxxx xx xxx xxxxx xxxxxx xx xxx
xxxxxxxxxx xxx xxx xx xxx xxxxxxx xx xxxxxx xxxx xxxx xxx xxxxxxx
xxxxxxxx xxx xxxxxx xxxxx. Xxxxx xxxxxxx xxxxxxxx xxxxxxxxx xxxx
xxxxx xxxx xx xxxx xxxxxxxxxx, xxxxx xxxx xxxxxxxxx. Xxx xxxx
xxxxxxx xx xxx xxxxx xx xxxxxxx xxxxxxxxx, xxxxxxxxxx xx
xxx-XxX xxxxxxxx xxx xxxxxxx xxxxx xxx xxxxx.

Xxxx, xxxx xxx xxxxxx xxxxx xxx xxx xx xx xxxxxxxxxxx
xxxx xx xxx xx xxx xxxxxxxxxxxx xxxxx xxx. Xxxx xxxxx xxxxxxx
xxxxxxxx xxxxxxx xxxxxxxxx xx xxxxxx xxxxxxxx xxxxx xxxx xxx xxxxxxx
xxxxxx xxxxxx xxxxxxxx xxx xxxxxxxxxxx xxxxxxxx xxxxxxxxxx.
Xxxxxxxxxxx xxxxxxxxx xxx xxxxxxxx xxxxxxxxxx xxx xx xxxxx xxxxxxxxxx
xxxxxx xxxx x xxxx xxxxx xx xxxxxxxx, xxxx xxxx xx XxX xx xx xxxxxxxx
xx XxX. Xxxxxxxxx xxx xxxxxxx xx xxxxxxxxxx xxx Xxxxx xxxxxxx
xxxxxxxxxxx, xxxxx xxxxxxx x xxxx xxxxx xx xxxxxxxxxxx xxxxxxxxx
xxxxxx xxxxxxxx xxx xxxxxxxx, xxxx xxxx xx
xx

\begin{wrapfigure}{R}{0.5\textwidth}
    F2\vspace{2in}
\end{wrapfigure}
Quidem eum voluptates voluptatem fugiat et. Reprehenderit earum
adipisci veritatis aut reprehenderit. Minus ab culpa quasi minima quia
consectetur fuga aut.

Molestiae animi qui ab quo consectetur id saepe. Cumque eius
blanditiis nobis reprehenderit. Voluptates temporibus necessitatibus
odio adipisci ipsa. Quo quidem provident dignissimos iure id. Rem aut
quas perferendis.

Earum minus doloremque tempora aut et fugiat. Iste est in non
asperiores. Laborum aut necessitatibus dolor aspernatur facilis fuga
possimus. Alias ab quo laboriosam fugit sed voluptatem ut. In ut amet
non facilis excepturi.

Ut libero velit vel voluptatem nulla. Et et et et cum id et. Harum
nisi sit doloribus tempore quae occaecati. Est harum et nesciunt
laborum rerum.

\end{document}

答案1

您的代码出现的情况是,应该进行比较的常量\value{page}没有正确终止。

由于 之后没有空格1,TeX 继续扩展标记以找到更多数字。它找到了\smash,它被重新定义为amsmath具有可选参数。一切都出错了,因为在条件中间这种不合时宜的扩展使一切都不平衡。

要么

\ifnum 1=\value{page}%
  \smash{TTT}%

或者

\ifnum\value{page}=1
  \smash{TTT}%

这是保护终点线导致混乱的情况之一。参见在 \newcommand 或类似命令中,在行尾添加百分号什么时候有害

答案2

删除%

    \ifnum\value{page}=1%

这样就变成了

    \ifnum\value{page}=1

\smash允许在扩展之前终止并完成测试。在 不完整的% \smash情况下, 得到扩展\ifnum

相关内容