我正在处理一些代码清单,想让我的标题与括号中的文件名(可选)对齐。默认设置似乎是将标题居中,我找不到更改对齐方式的方法。
就“文件名”而言,最好启用一个可选字段,将电传字体中的文件名添加到标题中。
\begin{lstlisting}[language=C, caption={Caption Here...}]
...
\end{lstlisting}
\begin{lstlisting}[language=MyC, file="queue.c", caption={Caption...}]
...
\end{lstlisting}
答案1
您可以使用 来实现这一点tcolorbox
。
\documentclass{article}
\usepackage{etoolbox}
\usepackage[listings,skins]{tcolorbox}
\lstdefinestyle{cppStyle}{%
language=C++,
basicstyle=\ttfamily\small,
}
\newtcblisting{mylisting}[2][]{%
enhanced,
listing only,
title={#2\ifstrempty{#1}{}{~(\texttt{#1})}},
attach boxed title to top left,
listing options={style=cppStyle}
}
\begin{document}
\begin{mylisting}[main.cc]{Caption}
#include <iostream>
int main()
{
return 0;
}
\end{mylisting}
\end{document}
然而,一个缺点是包autogobble
中的选项lstautogobble
不适用于tcolorbox
。因此,您必须在行开始之前手动缩进代码,不带任何空格/制表符,如下所示以获得所需的输出。
\documentclass{article}
\usepackage{etoolbox}
\usepackage[listings,skins]{tcolorbox}
\lstdefinestyle{cppStyle}{%
language=C++,
basicstyle=\ttfamily\small,
}
\newtcblisting{mylisting}[2][]{%
enhanced,
listing only,
title={#2\ifstrempty{#1}{}{~(\texttt{#1})}},
attach boxed title to top left,
listing options={style=cppStyle}
}
\begin{document}
\begin{mylisting}[main.cc]{Caption}
#include <iostream> % no indent
int main()
{
return 0;
}
\end{mylisting}
\end{document}
如果您愿意使用minted
包而不是listings
,那么它会运行良好。
\documentclass{article}
\usepackage{etoolbox}
\usepackage[minted,skins]{tcolorbox}
\newtcblisting{mylisting}[2][]{%
enhanced,
listing only,
title={#2\ifstrempty{#1}{}{~(\texttt{#1})}},
attach boxed title to top left,
minted language=C++,
minted options={autogobble},
}
\begin{document}
\begin{mylisting}[main.cc]{Caption}
#include <iostream>
int main()
{
return 0;
}
\end{mylisting}
\end{document}