![使用 minted 和 listings 定义两部分环境](https://linux22.com/image/387633/%E4%BD%BF%E7%94%A8%20minted%20%E5%92%8C%20listings%20%E5%AE%9A%E4%B9%89%E4%B8%A4%E9%83%A8%E5%88%86%E7%8E%AF%E5%A2%83.png)
我正在为学生编写一些编程说明,并尝试格式化代码,使其看起来像 Jupyter 或 Google Colab 笔记本的单元格输入/输出结构。所以我希望它看起来像
到目前为止,我一直在使用 minted 包来获取代码,因为我喜欢它的自动语法突出显示,并使用 listings 包,因为它看起来像笔记本的输出。
\documentclass[11pt]{amsart}
\usepackage[framemethod=tikz]{mdframed} %%to make a framed environment
\usepackage{listings}
\usepackage{minted}
\usemintedstyle{xcode}
\definecolor{light-gray}{rgb}{0.789035,0.789035,0.789035}
\setminted{bgcolor=light-gray}
\lstset{frame=b,
language=Python,
aboveskip=-2mm,
belowskip=3mm,
columns=flexible,
basicstyle={\small\ttfamily}
}
\newminted{py}{linenos=true,
autogobble,
python3=true,
obeytabs=true,
tabsize=3,
frame=none,
framesep=10pt}
\begin{document}
\begin{pycode}
print("Hello world!")
\end{pycode}
\begin{lstlisting}
Hello world!
\end{lstlisting}
\end{document}
在大多数情况下,这看起来不错,但当 LaTeX 在页面上扩展垂直间距时,它会将 minted 环境与 listings 环境垂直分开。我想将它们合并到一个环境中,以强制它们保持在一起。
我知道我可以将环境组合在一起,例如
\newenvironment{doubleproof}{
\newcommand{\nextpart}{\end{proof} \begin{proof}}
\begin{proof}}{\end{proof}}
以便
\begin{doubleproof}
First proof
\nextpart
Second proof
\end{doubleproof}
生产
然而,当我尝试定义
\newenvironment{cell}{
\newcommand{\nextpart}{\end{pycode}\begin{lstlisting}}
\begin{pycode}}{\end{lstlistings}}
并以类似的方式使用它,我得到了一个错误。有没有办法让它工作,或者有另一种解决方案来格式化我的输出?提前谢谢!
答案1
listing and comment
通过某种列表可以获得与所需结果类似的结果tcolorbox
。
对于非LaTeX
语言列表,输出不是自动的,comment
可以使用选项输入假定的结果。
\documentclass{article}
\usepackage[most, minted]{tcolorbox}
\DeclareTCBListing{pythonexample}{m}{%
listing and comment,
listing engine=minted,
minted style=xcode,
minted language=Python,
minted options={linenos, numbersep=3mm},
sharp corners,
toprule=0pt, leftrule=0pt, rightrule=0pt,
colback=black!30, colframe=red!75!black,
bicolor, colbacklower=white, colframe=black,
fontlower=\ttfamily,
comment={#1},
}
\begin{document}
\begin{pythonexample}{Hello World!}
print("Hello World!")
\end{pythonexample}
\end{document}