以下是我想要做的事情:
\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}