使用 minted 定义新环境

使用 minted 定义新环境

我可以定义一个其中包含铸造环境的新环境吗?

例如,环境可以快速生成以下代码:

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

相关内容