我需要在列表底部添加第二个标题作为来源。但我不知道如何实现。有这种可能吗?
当前最小示例:
\documentclass[12pt,oneside,titlepage,listof=totoc,bibliography=totoc]{scrartcl}
\usepackage[a4paper, left=4cm, right=2cm, top=4cm, bottom=2cm]{geometry}
\usepackage{listings}
\usepackage{scrlayer-scrpage}
\pagestyle{scrheadings}
\begin{document}
\section{some section}
Some Text.
\begin{lstlisting} [caption={some code},captionpos=t]
int i = 0;
\end{lstlisting}
More Text. Below the figure should be a second caption with the source.
\end{document}
我知道我可以将标题放在captionpos=b
图的下方。但我想要第二个标题,它不会出现在列表列表中。
答案1
这是一个简单的解决方案,它添加了一个额外的listings
选项source
(类似于caption
),在相应的列表下方显示选项的文本。
为此,我们挂接了内部宏\lst@MakeCaption
,该宏在排版列表代码之前和之后被调用以显示标题。在这种情况下,如果用户定义了源文本,则在\lst@MakeCaption
列表下方调用时会打印该文本。在当前版本中,源仅显示在由宏定义的带有居中文本的框中\lst@makesourcebox
。
\documentclass[12pt,oneside,titlepage,listof=totoc,bibliography=totoc]{scrartcl}
\usepackage[a4paper, left=4cm, right=2cm, top=4cm, bottom=2cm]{geometry}
\usepackage{listings}
\usepackage{xcolor}
\makeatletter
\lst@Key{source}{}{\def\lst@source{#1}}
\let\orig@lst@MakeCaption=\lst@MakeCaption
\def\lst@MakeCaption#1{%
\orig@lst@MakeCaption#1%
\ifx b#1%
\ifx\lst@source\@empty\else
\noindent
\expandafter\lst@makesourcebox\expandafter{\lst@source}%
\vskip\belowcaptionskip
\fi
\fi
}
\def\lst@makesourcebox#1{%
\makebox[\linewidth][c]{\itshape\small Source: #1}%
}
\makeatother
\lstset{backgroundcolor=\color{lightgray}}
\begin{document}
\section{some section}
Some Text.
\begin{lstlisting} [caption={some code}, captionpos=t, source={internet}]
int i = 0;
\end{lstlisting}
\begin{lstlisting} [caption={comment}]
// int i = 1;
\end{lstlisting}
\begin{lstlisting} [caption={more code}, captionpos=b, source={also internet}]
int i = 2;
\end{lstlisting}
More Text. Below the figure should be a second caption with the source.
\end{document}
输出