minted:如何通过 \newminted 传递 LaTeX 命令以及如何使用不同的样式?

minted:如何通过 \newminted 传递 LaTeX 命令以及如何使用不同的样式?

我想使用minted重新定义 Sweave 环境SinputSoutput(参见下面的示例)。这样,我就可以minted格式化我的R代码了。还剩下两个问题:

1) 是否可以通过 minted 将其他命令(例如\par\vspace)传递给SinputSoutput?如您所见,我尝试过Soutput但失败了。如果能够传递命令/参数就太好了,因为这样可以调整SinputSoutput环境之间的间距。注意:这适用listingslstnewenvironment

2) 是否可以对下面定义的和使用不同的 minted 突出显示样式(例如emacsbw)?这样,输入和输出可以采用不同的颜色,这将非常好。注意:这适用于可用于调整样式相关设置的命令。SinputSoutputlistings\lstset

\documentclass{scrartcl}

\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{xcolor}
\usepackage{fancyvrb}
\usepackage{Sweave}
\usepackage{minted}

\xdefinecolor{lightgray}{RGB}{247, 247, 247}
\xdefinecolor{semilightgray}{RGB}{235, 235, 235}

\renewenvironment{Schunk}{\par\vspace{0.3\baselineskip}}{\\[-0.5\baselineskip]}

\expandafter\let\csname Sinput\endcsname\relax
\expandafter\let\csname endSinput\endcsname\relax
\expandafter\let\csname Soutput\endcsname\relax
\expandafter\let\csname endSoutput\endcsname\relax
\expandafter\let\csname Sinput*\endcsname\relax
\expandafter\let\csname endSinput*\endcsname\relax
\expandafter\let\csname Soutput*\endcsname\relax
\expandafter\let\csname endSoutput*\endcsname\relax

\usemintedstyle{emacs}

% redefine Sweave's Sinput
\newminted[Sinput]{r}{%
  linenos,% line numbers
  bgcolor=semilightgray% background color
}
% redefine Sweave's Soutput
\newminted[Soutput]{r}{%
  bgcolor=lightgray% background color
%  \protect\vspace{\baselineskip}
}

\begin{document}
<<label=preliminaries, echo=FALSE, results=hide>>=
options(width=74, useFancyQuotes="UTF-8", prompt="> ", continue="  ")
options(SweaveHooks=list(fig=function() par(mar=c(4, 4, 0.4, 0.7))))
@
Just before the Schunk, to see the spacing.
<<foo>>=
(x <- rnorm(20))
3!=4
@
Just after the Schunk, to see the spacing.
\end{document}

答案1

这是使用我的解决方案PythonTeX包,它使用相同的 Pygments 突出显示库minted。我不使用 Sweave,所以这只是一个如何获取SinputSoutput执行所需操作的示例;它不是真正的 Sweave 文档。

我已设置Sinput为使用rconsolelexer, with emacsstyle,以及Soutput使用textlexer, with bwstyle。所有这些都很容易更改。您应该能够通过更改 、 和 环境来获得所需的任何间距SchunkSinput方法Soutput是硬编码空格,或者添加会产生空格的可选参数。

在此处输入图片描述

\documentclass{scrartcl}

\usepackage{xcolor}
\usepackage{pythontex}
\usepackage{mdframed}

\xdefinecolor{lightgray}{RGB}{247, 247, 247}
\xdefinecolor{semilightgray}{RGB}{235, 235, 235}

\newenvironment{Schunk}{\vspace{10pt}}{\vspace{10pt}}

\newenvironment{Sinput}{%
    \VerbatimEnvironment
    \begin{mdframed}[backgroundcolor=semilightgray]%
    \begin{pygments}{rconsole}}{\end{pygments}\end{mdframed}\vspace{10pt}}
\setpygmentspygopt{rconsole}{style=emacs}
\newenvironment{Soutput}{%
    \VerbatimEnvironment
    \begin{mdframed}[backgroundcolor=lightgray]%
    \begin{pygments}{text}}{\end{pygments}\end{mdframed}}
\setpygmentspygopt{text}{style=bw}


\begin{document}
Just before the Schunk, to see the spacing.  
\begin{Schunk}
\begin{Sinput}
> 2 + 2
\end{Sinput}

\begin{Soutput}
[1] 4
\end{Soutput}
\end{Schunk}
Just after the Schunk, to see the spacing.
\end{document}

答案2

正如您在评论中提到的,这个问题可以通过 轻松解决knitr,并且您不必使用Sweave.sty——请随意重新定义SchunkSinputSoutput

\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{xcolor}
\usepackage{minted}

\xdefinecolor{lightgray}{RGB}{247, 247, 247}
\xdefinecolor{semilightgray}{RGB}{235, 235, 235}

\usemintedstyle{emacs}

\newenvironment{Schunk}{\par\vspace{0.3\baselineskip}}{\\[-0.5\baselineskip]}
% define Sinput
\newminted[Sinput]{r}{%
  linenos,% line numbers
  bgcolor=semilightgray% background color
}
% define Soutput
\newminted[Soutput]{r}{%
  bgcolor=lightgray% background color
%  \protect\vspace{\baselineskip}
}

\begin{document}
<<label=preliminaries, echo=FALSE, results='hide'>>=
options(width=74, useFancyQuotes="UTF-8")
knit_hooks$set(fig.keep=function(before, options, envir) {
  if (before) par(mar=c(4, 4, 0.4, 0.7))
})
render_sweave()
set_header(highlight = '')
@
Just before the Schunk, to see the spacing.
<<foo>>=
(x <- rnorm(20))
3!=4
@
Just after the Schunk, to see the spacing.
\end{document}

相关内容