我如何才能创造这样的环境:
\documentclass[a4paper,12pt]{report}
\usepackage{minted,fancyvrb}
\newenvironment{mycode}[1]{
\begin{listing}
\begin{minted}{bash}}{
\end{minted}
\caption{#1}
\end{listing}}
\begin{document}
\begin{mycode}{My title}
echo $PATH
\end{mycode}
\end{document}
我尝试这样做:
\documentclass[a4paper,12pt]{report}
\usepackage{minted,fancyvrb}
\newminted{bash}{}
\newenvironment{mysupercode}{\VerbatimEnvironment\begin{bashcode}}{\end{bashcode}}
\newenvironment{mycode}[1]{
\VerbatimEnvironment\begin{listing}\begin{mysupercode}}{
\end{mysupercode}\caption{#1}\end{listing}}
\begin{document}
\begin{mycode}{My title}
echo $PATH
\end{mycode}
\end{document}
但出现以下错误:
\endmycode 定义中的参数编号非法。\end{mysupercode}\caption{#1}\end{listing}}
答案1
您不能在环境部分进行参数替换 ( #1
) 。您可以在部分中执行,然后在稍后使用,如下所示:\end
\begin
\def\mysupercodecaption{#1}
\caption{\mysupercodecaption}
\documentclass[a4paper,12pt]{report}
\usepackage{minted,fancyvrb}
\newminted{bash}{}
\newenvironment{mysupercode}{\VerbatimEnvironment\begin{bashcode}}{\end{bashcode}}
\newenvironment{mycode}[1]{%
\def\mysupercodecaption{#1}%
\VerbatimEnvironment
\begin{listing}
\begin{mysupercode}%
}{%
\end{mysupercode}%
\caption{\mysupercodecaption}%
\end{listing}%
}
\begin{document}
\begin{mycode}{My title}
echo $PATH
\end{mycode}
\end{document}
这不能按您想要的方式工作,因为该\newenvironment
命令基本上取代了这一点:
\newenvironment{mycode}[1]{<begin-part>}{<end-part>}
经过
\newcommand{\mycode}[1]{<begin-part>}
\newcommand{\endmycode}{<end-part>}
因此\endmycode
宏不接受参数。这主要是因为如果\endmycode
宏被定义为接受参数,则必须像这样使用它:
\begin{mycode}
...
\end{mycode}{<argument>}