使用 minted、bgcolor 和禁用 \let\par\relax 进行无限编译

使用 minted、bgcolor 和禁用 \let\par\relax 进行无限编译

我定义了一个环境,该环境\par暂时禁用了\let\par\relaxprecise,以禁止在该环境中分段。在我上次编译文档(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恢复。\parminted

\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}

相关内容