这与问题有关如何使用 bgcolor 在 `minted` 代码块前后留出空间? 那里解释了 minted 的一个错误,当您设置背景颜色时,它会导致代码块上方和下方的空间消失。针对 minted 环境给出了修复。我也想修复 \inputminted 命令!不幸的是,同样的修复不起作用,因为这是一个命令而不是环境。
我以为我可以使用 \apptocmd 和 \pretocmd 来修复它,但是如下面的最小工作示例所示,\pretocmd 做了正确的事情,但 \apptocmb 给出了错误“!缺少插入的 \endcsname。”
\documentclass{article}
\usepackage{lipsum}
\usepackage{filecontents}
\usepackage{minted}
\setminted{bgcolor=blue!8}
\usepackage{etoolbox}
\pretocmd{\inputminted}{\par\vspace{1em}}{}{}
% The following line doesn't work
\apptocmd{\inputminted}{\par\vspace{1em}}{}{}
% These are the fixes given for the minted environment
\BeforeBeginEnvironment{minted}{\vspace{1em}}
\AfterEndEnvironment{minted}{\par\vspace{1em}}
\begin{document}
\begin{filecontents*}{test.py}
n = 20
for i in range(n)
print("Hello World")
\end{filecontents*}
\lipsum*[1]
% Here is where the problem lies.
\inputminted{python}{test.py}
\lipsum*[1]
% This bit of code works as it should
\begin{minted}{python}
n = 10
for i in range(n)
print("Hello World")
\end{minted}
\lipsum*[1]
\end{document}
答案1
该\inputminted
命令是用可选参数定义的,因此无法用 进行修补etoolbox
,除非您说
\expandafter\pretocmd\csname\string\inputminted\endcsname...
该软件包xpatch
本身完成了必要的部分工作。
\usepackage{xpatch}
\xpretocmd{\inputminted}{\par\vspace{1em}}{}{}
\xapptocmd{\inputminted}{\par\vspace{1em}}{}{}