atbegshi 和标题/章节的问题

atbegshi 和标题/章节的问题

我尝试使用包中的页面在文档中插入页面\AtBeginShipoutNextatbegshi但是,当调用的页面\AtBeginShipoutNext包含\chapter{}\caption{}命令时,我收到错误。

考虑一下这个MWE:

\documentclass[11pt]{book}

\usepackage{atbegshi}
\usepackage{lipsum}
\usepackage{float}

\begin{document}

\chapter{First Chapter}

\lipsum[1-4]

\begin{figure}[H]
\caption{This caption breaks everything}
\end{figure}

\lipsum[1-4]

\end{document}

命令

\AtBeginShipoutNext{
\AtBeginShipoutOriginalShipout\box\AtBeginShipoutBox
\stepcounter{page}\AtBeginShipoutOriginalShipout\hbox{}}

添加空白页并调整页码计数器。

当上述命令插入到MWE之前\chapter{First Chapter}或之中时,就会出现问题。我收到错误\begin{figure}

! Undefined control sequence.\GenericError #4 \errhelp \@err@ l.15 \lipsum[1-4]

! Incomplete \iffalse; all text was ignored after line 23.

分别。

编辑:AtBeginShipoutNext当当前页面包含引用(在本例中是章节的页码和标题)时,似乎会以某种方式破坏 .aux 文件

答案1

atbegshi提供钩子,当页面输出时。通常,页面输出处理钩子时,可能会修改输出页面。那么 的含义\protect就是 的原始含义,\protect在钩子之前,LaTeX\noexpand在输出例程中将其设置为 。包atbegshi设置\protect\relax\set@typeset@protect),以便允许用户修改输出页面内容,其通常含义为\protect

在这种情况下,页面已在钩子中输出,因此 的含义\protect应该固定。否则 write whatsits( \contentsline) 可能会中断。

另外,\AtBegShiDiscard必须调用 来通知atbegshi,以确保页面在挂钩之后不会被第二次运出。

具有空白的第二页的完整示例:

\documentclass[11pt]{book}

\usepackage{atbegshi}
\usepackage{lipsum}
\usepackage{float}

\begin{document}

\AtBeginShipoutNext{%
  \begingroup
    \let\protect\noexpand
    \AtBeginShipoutOriginalShipout\box\AtBeginShipoutBox
    \stepcounter{page}\AtBeginShipoutOriginalShipout\null
  \endgroup
  \AtBeginShipoutDiscard
}

\chapter{First Chapter}

\lipsum[1-4]

\begin{figure}[H]
\caption{This caption breaks everything}
\end{figure}

\lipsum[1-4]

\end{document}

包裹afterpage

与包相同的结果afterpage

\documentclass[11pt]{book}

\usepackage{afterpage}
\usepackage{lipsum}
\usepackage{float}

\begin{document}

\afterpage{\afterpage{\shipout\null}}

\chapter{First Chapter}

\lipsum[1-4]

\begin{figure}[H]
\caption{This caption breaks everything}
\end{figure}

\lipsum[1-4]

\end{document}

相关内容