如何在 `lstlisting` 环境中使标题显示而不显示标题文本?

如何在 `lstlisting` 环境中使标题显示而不显示标题文本?

我发现只有非空的标题文本才能使标题出现在输出文件中,即使是空格字符\。这是一个例子:

\documentclass{article}
\usepackage{listings}

\lstset{
  language=C++,
  frame = t
}

\usepackage{caption}
\captionsetup{
  singlelinecheck = false
}


\begin{document}

\begin{lstlisting}[caption={\ }] %note the character '\ ' here!
  class MyClass
  {
    public:
        MyClass()
        {
            // Constructor
        }
        ~MyClass()
        {
            // Destructor
        }
  };
\end{lstlisting}
\end{document}

在此处输入图片描述

\好吧,当我删除的空格字符时caption = {\ },输出文件中的标题就会消失:

\documentclass{article}
\usepackage{listings}

\lstset{
  language=C++,
  frame = t
}

\usepackage{caption}
\captionsetup{
  singlelinecheck = false
}


\begin{document}

\begin{lstlisting}[caption={}] % look here, nothing in caption
  class MyClass
  {
    public:
        MyClass()
        {
            // Constructor
        }
        ~MyClass()
        {
            // Destructor
        }
  };
\end{lstlisting}
\end{document}

在此处输入图片描述

我想知道是否有某种方法可以在调用时输出标题,即使caption = {...}花括号 ( ) 中没有任何内容,就像 float或environmentcaption = {}一样。有人能给我一些提示吗?tablefigure

答案1

如果您希望所有列表都有编号,但可能没有标题文字,您可以caption=\mbox{}设置\lstset

\documentclass{article}
\usepackage{listings}
\usepackage{caption}

\lstset{
  language=C++,
  frame = t,
  caption=\mbox{},
  columns=fullflexible,
}

\captionsetup[lstlisting]{
  singlelinecheck = false
}


\begin{document}

\begin{lstlisting}
  class MyClass
  {
    public:
        MyClass()
        {
            // Constructor
        }
        ~MyClass()
        {
            // Destructor
        }
  };
\end{lstlisting}

\begin{lstlisting}[caption=This has a caption]
  class MyClass
  {
    public:
        MyClass()
        {
            // Constructor
        }
        ~MyClass()
        {
            // Destructor
        }
  };
\end{lstlisting}
\end{document}

在此处输入图片描述

笔记。

  1. 我添加了columns=fullflexible,因为像等宽字体这样的比例字体会让我的眼睛刺痛。

  2. 设置caption仅限于lstlisting字幕。

相关内容