如何在自己的环境中包装浮动铸造列表?

如何在自己的环境中包装浮动铸造列表?

以下是我想要做的事情:

\begin{code}{c}{Hello World in C}% I would prefer the caption to be optional
#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");
    return 0;
}
\end{code}

结果应如下图所示。(标题实际上位于页面中央,但由于图像被裁剪,因此看起来如此。由于这是一个原始示例,因此我并不关心美化结果。)

代码环境示例

我正在尝试在我的自定义类中通过使用来实现这一点minted以及listing它所打包的环境:

\newenvironment{code}[2]{%
    \begin{listing}\caption{#2}%
    \begin{minted}{#1}%
}{%
    \end{minted}%
    \end{listing}%
}

我收到此错误:

Runaway argument?
! File ended while scanning use of \FancyVerbGetLine.
<inserted text> 
                \par 
<*> env.tex

? H
I suspect you have forgotten a `}', causing me
to read past where you wanted me to stop.
I'll try to recover; but if the error is serious,
you'd better type `E' or `X' now and fix your file.

我想这与这个答案,但是我想知道是否可以按照上面显示的界面来做。

答案1

您必须使用命令的“内部”形式。listing我建议使用以下newfloat包,而不是:

\documentclass{article}
\usepackage{minted,newfloat}

\DeclareFloatingEnvironment[
  fileext=loc,
  listname=List of codes,
  name=Listing,
  placement=htp,
]{codefloat}

\newenvironment{code}[2][]
 {\codefloat
  \if\relax\detokenize{#1}\relax\else\caption{#1}\fi
  \minted{#2}}
 {\endminted\endcodefloat}

\begin{document}

\begin{code}[Hello World in C]{c}
#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");
    return 0;
}
\end{code}

\end{document}

在此处输入图片描述

你可能想看一下这个verbments包:

\documentclass{article}
\usepackage{verbments}

\begin{document}

\begin{pyglist}[language=c,caption=Hello world in C]
#include <stdio.h>

int main(void) {
    printf("Hello, world!\n");
    return 0;
}
\end{pyglist}

\end{document}

相关内容