我可以定义一个其中包含铸造环境的新环境吗?
例如,环境可以快速生成以下代码:
\begin{figure}[htp]
\centering
\begin{minipage}{9cm}
\begin{minted}[frame=single]{ruby}
some minted code...
\end{minted}
\end{minipage}
\caption{a caption}
\end{figure}
我尝试过使用普通的\newenvironment
和\NewEnviron
来自environ
包的。似乎没有什么效果,因为我总是得到:
Paragraph ended before \FV@BeginScanning was complete.\par \end{terminal}
Extra }, or forgotten \endgroup.
\begin{VerbatimOut} on input line 87 ended by \end{minipage}.
Extra }, or forgotten \endgroup.
梅威瑟:
\documentclass{article}
\usepackage{minted}
\usepackage{pgfkeys}
\usepackage{color}
\usepackage{environ}
\usemintedstyle{bw}
\definecolor{bg}{rgb}{0.95,0.95,0.95}
\pgfkeys{
/terminal/.cd,
caption/.code={\pgfkeyssetvalue{terminal/caption}{\caption{#1}}},
label/.code={\pgfkeyssetvalue{terminal/label}{\label{#1}}},
}
\pgfkeyssetvalue{terminal/label}{}
\pgfkeyssetvalue{terminal/caption}{\caption{}}
\NewEnviron{terminal}[1]{
\begingroup
%\pgfkeys{/terminal/.cd,caption={}}
\begin{figure}[\thefigpos]
\centering
\begin{minipage}{9cm}
\begin{minted}[frame=single]{ruby}
\BODY
\end{minted}
\end{minipage}
%\pgfkeysvalueof{terminal/caption}
%\pgfkeysvalueof{terminal/label}
\end{figure}
\endgroup
}
\begin{document}
\begin{terminal}
a tryout
\end{terminal}
\end{document}
答案1
不幸的是,没有简单的方法,因为minted
它使用逐字环境并且不设计为包含在其他环境中(mea culpa)。
下面的代码可以满足您的要求。它使用minted
内部函数而不是minted
环境来实现这一点。因此,\makeatletter
如果您想将其包含到tex
文件中,则需要在命令前面加上:
\newenvironment{terminal}{%
\VerbatimEnvironment
\minted@resetoptions
\setkeys{minted@opt}{frame=single}
\begin{figure}[htp]
\centering
\begin{minipage}{9cm}
\begin{VerbatimOut}{\jobname.pyg}}
{%
\end{VerbatimOut}
\minted@pygmentize{ruby}
\DeleteFile{\jobname.pyg}
\end{minipage}
\end{figure}}