在使用该选项创建投影仪幻灯片时,我发现了一个非常奇怪的行为[fragile]
。我读过并知道该行\end{frame}
不能缩进,并且不能在其后直接添加注释。尽管确保了所有这些,但我还是收到一个编译错误,内容类似于Extra }, or forgotten \endgroup. \end{frame}
。试图找出原因几乎让我发疯,因为我发现在后面有一个空格\end{frame}
。删除空格后编译成功。但是,再次添加空格仍然不会导致进一步的错误(尽管删除了辅助文件)。所以我只是将旧的、不起作用的部分复制到其中,错误又出现了。我使用 TeXstudio,并想到打开“显示空格”选项。仔细查看后,我发现产生错误的空格确实与我按空格产生的空格不同!
最后是 MWE,但它没有帮助,因为无论是粘贴到这里还是从这里复制,空格都会转换为“正常”空格。所以我在 TeXstudio 中截取了我的代码的屏幕截图,您可以在其中看到不同的空格。
有人能解释一下,这是什么空白,以及它是如何产生的吗?这个问题是[fragile]
投影仪幻灯片中已知的问题吗?
顺便说一句,这个问题发生在一位同事身上,当时他换了一台安装了新 MikTeX 的新电脑。.tex 文件只是被复制到新电脑上,并在旧系统上编译得很好。
\documentclass{beamer}
\begin{document}
\begin{frame}[fragile]{working}
working frame
\end{frame}
\begin{frame}[fragile]{not working}
not working frame
\end{frame}
\end{document}
答案1
行尾的空格会被 TeX 的文件读取代码在最低级别删除(在考虑任何 catcode 或宏定义之前)。
在 tex 中基本上没有办法让即使是“逐字”代码也看到这样的空格。
多年来,在基于 web2c 的 tex 实现中,制表符也在同一阶段被删除,但是它被认为是 tex 参考代码中的潜在错误/对意图的误解,因此 2018 版本对此进行了更改,现在仅删除空格而不是行尾的制表符。
对于宏层来说,逐字“脆弱”框架的末尾必须完全一致,\end{frame}
这样它才会受到底层 tex 引擎的文件读取代码中这种变化的影响。