XeLaTeX:pdfpages 和 spanish babel 中的 \iffalse 不完整

XeLaTeX:pdfpages 和 spanish babel 中的 \iffalse 不完整

下面的代码

\documentclass{article}
\usepackage[spanish]{babel}
\usepackage{pdfpages}
\begin{document}
\includepdf[landscape]{example-image-16x9.pdf}
\end{document}

使用编译时XeLaTeX,生成

! Incomplete \iffalse; all text was ignored after line 5

冲突的选项是landscapeon\includepdfspanishlanguage。没有landscape它可以编译,没有babel或有english也可以编译成功。

错误仅出现在 中XeLaTeX。 或pdfLaTeX都不会luaLaTeX产生该错误。

有事要做吗?

答案1

您可以禁用西班牙语中相当无用的“引用”功能babel

\documentclass{article}
\usepackage[spanish,es-noquoting]{babel}
\usepackage{pdfpages}
\begin{document}
\includepdf[landscape]{example-image-16x9.pdf}
\end{document}

答案2

<这是在错误的时间激活的问题>。它出现在横向选项(和 pdfpages 的 xetex 驱动程序)尝试执行

\special {pdf: put @thispage <</Rotate #1>>}

我并没有试图理清事件发生的整个过程(但请参阅下面的更新),但在 pdfpages 之后加载 babel 可以修复此问题。我记得我贡献的另一个问题中提到西班牙语在处理活动字符时存在一些问题,但我需要找到该链接。

链接是https://tex.stackexchange.com/a/233355/4686 但其底层机制并不是这里起作用的机制。

\documentclass{article}
%\usepackage[spanish]{babel}% provokes problems with active <, >
\usepackage{pdfpages}
\usepackage[spanish]{babel}
\begin{document}
%\tracingifs1
%\tracingmacros1
\includepdf[landscape]{example-image-16x9.pdf}
\end{document}
% Local Variables:
% TeX-engine: xetex
% End:

编译良好(尽管结果可能存在边距问题)。

更新

pdfpages在包装中可以看到

\AtBeginDocument{%
  \let\AM@orig@landscape\landscape
  \let\AM@orig@endlandscape\endlandscape
  \RequirePackage{pdflscape}%
  \let\landscape\AM@orig@landscape
  \let\endlandscape\AM@orig@endlandscape
}

因此,重要的是,这\RequirePackage{pdflscape}在很晚的时候完成。如果用户babel在此之前加载pdfpages,那么Babel那时就会激活简写。在包内,pdflscape你会发现

  \def\PLS@AtBeginShipout{%
    \global\setbox\AtBeginShipoutBox\vbox{%
      \special{pdf: put @thispage <</Rotate #1>>}%
      \box\AtBeginShipoutBox
    }%

其中<>是活动字符,因为Babel+spanish。如果我将其替换为

  \def\PLS@AtBeginShipout{%
    \global\setbox\AtBeginShipoutBox\vbox{%
      \special{pdf: put @thispage \string<\string</Rotate #1\string>\string>}%
      \box\AtBeginShipoutBox
    }%

然后您的 MWE 编译时不会出错,即使在babel之前加载了pdfpages。此外,在文件底部附近,我看到循环中pdflscape.sty使用了,这里也最好不要激活 和 ,尽管在这里它们不会引起问题,因为它们仅获取我认为要检查或 的下一个标记。<, >\@whilenum<><<>>

不能说应该净化和pdflscape的 catcodes ,因为无数的包也应该这样做。<>

在挂载期间是否真的有必要pdfpages加载?也许就够了?pdflscape\AtBeginDocument\AtEndOfPackage

相关内容