当没有为列表指定标题时,列表下方不会显示任何内容,而只要我指定标题,就会显示“列表编号: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,因此只需复制列表就相对简单。