为什么 xgalley 要求 \end{document} 前有一个空行?

为什么 xgalley 要求 \end{document} 前有一个空行?

以下 MWE 给出此错误:

! Improper \prevdepth.
\newpage ...everypar {}\fi \par \ifdim \prevdepth 
                                                  >\z@ \vskip -\ifdim \prevd...
l.5 \end{document}

如果我插入一个空白行,\end{document}编译时不会出错。这是为什么?这是预期的行为吗?

梅威瑟:

\documentclass{article}
\usepackage{xgalley}
\begin{document}
Why is a blank line required below this?
\end{document}

相关文件版本:

   xgalley.sty    2017/11/14 L3 Experimental galley
    xparse.sty    2017/11/14 L3 Experimental document command parser
     expl3.sty    2017/11/14 L3 programming layer (loader) 
expl3-code.tex    2017/11/14 L3 programming layer 
 l3pdfmode.def    2017/03/18 v L3 Experimental driver: PDF mode
 xtemplate.sty    2017/11/14 L3 Experimental prototype document functions
  l3galley.sty    2017/11/14 L3 Experimental galley code

答案1

出现此问题的原因是在 LaTe2e 宏中添加了一些代码\newpage('新页 上一页深度修复\prevdepth')。这为添加了测试\newpage:这发生在\par标记之后。xgalley加载时,标记的含义被修改为在插入原语之前扩展以下材料。这几乎总是可以的,但在这里我们遇到了麻烦,因为我们无法在不插入原语\par的情况下扩展测试。解决方案是通过添加 来停止扩展:\ifdim\prevdepthpar\relax

\documentclass{article}
\usepackage{xgalley}
\usepackage{etoolbox}
\patchcmd{\newpage}{\par}{\par\relax}{}{\FAILED}
\begin{document}
Why is a blank line required below this?
\end{document}

相关内容