对于我的博士论文,我使用minted
软件包来列出源代码。我想有一个自定义命令,\mylisting
类似于
\mylisting[Name in title]{filename of source code}
或 \mylisting{Hello world}{hello_world.java}
我尝试阅读tcolorbox
手册,而最接近的就是以下无法正常工作的简单示例:
\documentclass{article}
\usepackage[most,minted]{tcolorbox}
\newtcbinputlisting{\mylisting}[2][]{%
listing engine=minted,minted language=java,minted style=colorful,
listing file={#2},
title=Listing (\thetcbcounter) of #2,
listing only,breakable,#1}
\begin{document}
\section{Test}
\mylisting[Hello world]{hello_world.java} % problematic line!!
\mylisting{Hello world}{hello_world.java} % problematic line!!
\end{document}
但由于我对 TeX 缺乏了解,这失败了并产生了很多错误。我发现甚至很难从位于hello_world.java
与 .txt 文件同一目录中的文件中包含源代码mnwe
。
public class HelloWorld {
// A 'Hello World' in Java
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
这可能是什么问题?我该如何解决?
答案1
代码有两个问题
- 可选参数只是作为一般参数传递
tcolorbox
。但是,它似乎被用作标题参数,因此#1
不应直接写出,而应作为选项的值title
。 title=Listing (\thetcbcounter) of #2
实际上使用第二个参数(文件名)作为标题。示例中的文件名包含下划线_
,这具有特殊含义。
在评论中,你希望
\newtcbinputlisting{\mylisting}[2][]{%
listing engine=minted, minted language=java, minted style=colorful,
listing file={#2}, listing only,
title={#1},
breakable}
你的 MWE 现在给出了
如预期的。