自定义列表上标题的位置?

自定义列表上标题的位置?

我正在处理一些代码清单,想让我的标题与括号中的文件名(可选)对齐。默认设置似乎是将标题居中,我找不到更改对齐方式的方法。

就“文件名”而言,最好启用一个可选字段,将电传字体中的文件名添加到标题中。

\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}

在此处输入图片描述

相关内容