不带标题的列表下方显示“列表编号”

不带标题的列表下方显示“列表编号”

当没有为列表指定标题时,列表下方不会显示任何内容,而只要我指定标题,就会显示“列表编号:mycaption”。

但是,我希望所有列表都显示“列表编号”;即使没有标题的列表也是如此(当然,有标题的列表应保留“列表编号:mycaption”)。这可能吗?如果可以,如何操作?

答案1

您可以使用caption=\relax;但是,这样您将得到带有冒号的“Listing #:”。我不知道如何删除它。

编辑:好的,这是一个低级的技巧,如果标题是,则删除冒号\relax。它适用于我的版本listings,但在将来的版本中可能不起作用。

\documentclass{article}
\usepackage{listings}
\begin{document}
\makeatletter
\def\test@relax{\relax}
\let\save@fnum@lstlisting\fnum@lstlisting
\def\fnum@lstlisting{%
    \save@fnum@lstlisting
    \ifx\lst@caption\test@relax\expandafter\@gobble\fi
    }
\makeatother
\begin{lstlisting}[caption=\relax]
a:=b
\end{lstlisting}
\end{document}

答案2

我的想法除了是一个很好的解决方案之外什么都没有,但是你可以这样做:

\newcommand\emptytitle{\lstlistingname\ \thelstlisting}
\newcommand\nextlst{\addtocounter{lstlisting}{1}}

\begin{lstlisting}[language=C,title=\emptytitle]
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("Hallo Welt!\n");
    return EXIT_SUCCESS;
} /* end main() */
\end{lstlisting}

\nextlst
\begin{lstlisting}[language=C,title=\emptytitle]
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    printf("Hallo Welt!\n");
    return EXIT_SUCCESS;
} /* end main() */
\end{lstlisting}

顺便说一句,\newcommand\emptytitle{\lstlistingname\ \thelstlisting \nextlst}不起作用,因为计数器不知何故进行了 +2 跳跃。

答案3

我的解决方法是传递这个标题参数

title={\lstlistingname\space\thelstlisting}

到每个列表。这非常繁琐,但我使用 Lyx,因此只需复制列表就相对简单。

相关内容