在 `tabu` 表中使用 `minted` 环境

在 `tabu` 表中使用 `minted` 环境

minted我正在尝试使用表内的包中的一段突出显示的代码tabu

\documentclass{article}

\usepackage{minted}
\usepackage{longtable}
\usepackage{tabu}

\begin{document}       
    \begin{tabu*}{X[5,l]X[5,l]}
        \begin{minted}{matlab}
function out = op(x, y)
    out = x + y;
end
        \end{minted}
        & \\
    \end{tabu*}
\end{document}

使用上述 MWE,我尝试将minted环境放置在单元格内,类似于包文档第 1.3 节“插入 Verbatim 材料 (fancyvrb)”中解释的环境tabu操作。但是,通过编译上述 MWE,我收到以下错误消息:Verbatimtabu

Enter file name: 
! Emergency stop.
<read *> 

l.15     \end{tabu*}
                    ^^J
*** (cannot \read from terminal in nonstop modes)

如果我尝试以滚动模式编译文档(-interaction=scrollmode使用 MiKTeX 中的 XeLaTeX),我只会得到一个命令提示符Enter file name:

如何在表minted中使用环境tabu

答案1

这更像是一种黑客行为,而不是真正的修复。 minted正确地创建了突出显示的内容,并且内容被正确地引入。 但在某个时候,minted\minted@pygmentize宏会尝试\input一个“不存在”的文件。 我将“不存在”放在引号中,因为我尝试过minted禁用所有文件删除,但仍然出现错误——所以它似乎与tabu的多次传递有关。 无论如何,Enter file name:可以通过修补 来避免tabu*。 基本上,将每个 替换为\input。在 加载\InputIfFileExists后,在序言中插入以下内容tabu,您的文档将进行编译。

\usepackage{etoolbox}
\let\originalinput\input
\newcommand{\newinput}[1]{\InputIfFileExists{#1}{}{}}
\AtBeginEnvironment{tabu*}{\let\input\newinput}

相关内容