我定义了一个环境,该环境\par
暂时禁用了\let\par\relax
precise,以禁止在该环境中分段。在我上次编译文档(2018 年中)之前,它运行良好,但现在(使用 TeXLive 2019)它陷入了无限编译。
minted
我设法将问题简化为仅使用带有包\setminted{bgcolor=white}
和我的环境的代码(在这篇文章的底部)nopar
。
如果我注释掉\let\par\relax
文档,编译会顺利,但我需要\par
在这里禁用(当然,除非有另一种方法可以禁止段落中断,在这种情况下我会接受答案)。如果我注释掉,\setminted{bgcolor=white}
我会得到可怕的Missing \item
错误。如果我注释掉之前的文本\begin{minted}
,它也能正常工作,但我做不到。
以下是错误代码:
\documentclass{article}
\usepackage{minted}
\setminted{bgcolor=white}
\newenvironment{nopar}{%
\let\par\relax}{}
\begin{document}
\begin{nopar}
hello
\begin{minted}{latex}
world
\end{minted}
\end{nopar}
\end{document}
答案1
我不确定在允许的\let\par\relax
上下文中的目的是什么。minted
不管怎样,用来在环境中etoolbox
恢复。\par
minted
\documentclass{article}
\usepackage{minted}
\usepackage{etoolbox}
\makeatletter
\AtBeginEnvironment{minted}{\let\par\@@par}
\makeatother
\setminted{bgcolor=white}
\newenvironment{nopar}{\let\par\relax}{}
\begin{document}
\begin{nopar}
hello
\begin{minted}{latex}
world
\end{minted}
again
Again
\end{nopar}
\end{document}
答案2
问题中代码的意图非常不清楚,但重新定义\par
任何东西都很可能会导致 LaTeX 陷入无限循环或以其他方式破坏它。
在一些高度受控的环境中,这可能是一种有用的技术,但在采用任意 LaTeX 内容的环境中却并非如此。您的示例循环包含相当复杂的 minted 代码,但这个简单示例也会循环。
当 TeX 看到一个应该处于垂直模式的命令(有很多这样的命令,但我\vskip
在这里使用了)时,如果它不在vmode
,它会插入\par
以尝试启动vmode
并再次尝试该命令。如果禁用\par
它,它会循环... 这是 TeX-the-program 内置的,因此它不受 LaTeX 控制。
\documentclass{article}
\begin{document}
{\let\par\relax
a \vskip 2pt
}
\end{document}