如何为列表添加两个标题(顶部和底部)?

如何为列表添加两个标题(顶部和底部)?

我需要在列表底部添加第二个标题作为来源。但我不知道如何实现。有这种可能吗?

当前最小示例:

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

输出

在此处输入图片描述

相关内容