В данный момент я использую этот listings
пакет для верстки своего листинга. Листинги являются плавающими, используют номера строк и имеют верхнюю и нижнюю линейку, чтобы отделить их от окружающего текста.
Что мне действительно хотелось бы иметь, так это короткую преамбулу к каждому листингу, которая отделена (более легким) правилом и содержит аннотации к листингу, такие как утверждение, побочные эффекты, требования и т. д. Поэтому мне нужно более тяжелое верхнее правило, легкое среднее правило и более тяжелое нижнее правило, как известно из пакета booktabs
. Более того, строки преамбулы не должны учитываться, потому что преамбула на самом деле не является частью листинга.
Как мне проще всего добиться этого в LaTeX? Предпочтительно я хотел бы использовать пакет listings
.
решение1
Следующий пример создает плавающие списки с использованием tcolorbox
пакета без нумерации списков . Среда preamblelisting
принимает преамбулу как обязательный параметр. Необязательный параметр — любой tcolorbox
параметр. Базовый пакет для набора текста — listings
.
tcolorbox
Примечание: для компиляции вам может потребоваться обновить пакет.
\documentclass{report}
\usepackage[skins,listings]{tcolorbox}
\usepackage{lipsum}
\newtcblisting{preamblelisting}[2][]{%
float=htb,empty,
boxsep=0pt,left=0pt,right=0pt,boxrule=2pt,leftrule=0pt,rightrule=0pt,
borderline horizontal={2pt}{0pt}{black},
segmentation engine=path,
segmentation style={solid,line width=1pt},
comment and listing,
fontupper=\itshape,
listing options={% put any listing options here
language={[LaTeX]TeX},
aboveskip=0pt, belowskip=0pt,numbers=left,numberstyle=\tiny,
basicstyle=\ttfamily,columns=fullflexible},
comment={#2},#1
}
\begin{document}
\lipsum[1]
\begin{preamblelisting}{This is the preamble. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida
mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.}
\begin{test}{Example}
This is an example
\end{test}
\end{preamblelisting}
\begin{preamblelisting}[float=b]{This is the preamble. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida
mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.}
\begin{test}{Example}
This is an example
This is an example
This is an example
\end{test}
\end{preamblelisting}
\lipsum
\end{document}
ОБНОВЛЯТЬ:
Это обновление учитывает комментарии OP и добавляет нумерацию с заголовками, установленными ниже. Кроме того, это вписывается в обычные листинги из пакета листингов, т.е. оба могут использоваться параллельно. Наконец, cleveref
используется:
\documentclass{report}
\usepackage{cleveref,varwidth}
\usepackage[skins,listings]{tcolorbox}
\usepackage{lipsum}
\Crefname{lstlisting}{Listing}{Listings}
\AtBeginDocument{%
\newtcblisting[blend into=listings]{preamblelisting}[3][]{%
float=htb,empty,
boxsep=0pt,left=0pt,right=0pt,boxrule=2pt,leftrule=0pt,rightrule=0pt,
borderline horizontal={2pt}{0pt}{black},
segmentation engine=path,
segmentation style={solid,line width=1pt},
comment and listing,
fontupper=\itshape,
listing options={% put any listing options here
language={[LaTeX]TeX},
aboveskip=0pt, belowskip=0pt,numbers=left,numberstyle=\tiny,
basicstyle=\ttfamily,columns=fullflexible},
attach boxed title to bottom center,
varwidth boxed title,
coltitle=black,
boxed title style={blanker,top=2mm},
title={#2},comment={#3},#1
}}
\begin{document}
\lstlistoflistings
\chapter{Example}
\begin{lstlisting}[language={[LaTeX]TeX},
numbers=left,numberstyle=\tiny,
basicstyle=\ttfamily,columns=fullflexible,
caption={My normal listing},
captionpos=b,
label=mynormal]
This is a normal listing
\end{lstlisting}
\lipsum[2]
\textcolor{red}{\Cref{mynormal} is a normal listing and \Cref{mypreamble} is a listing
with a preamble.}
\begin{preamblelisting}[label=mypreamble]{My preamble listing}%
{This is the preamble. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida
mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.}
\begin{test}{Example}
This is an example
\end{test}
\end{preamblelisting}
\begin{preamblelisting}[float=b,label=floatingpreamble]{My floating preamble listing}%
{This is the preamble. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida
mauris. Nam arcu libero, nonummy eget, consectetuer id, vulputate a, magna.}
\begin{test}{Example}
This is an example
This is an example
This is an example
\end{test}
\end{preamblelisting}
\lipsum
\end{document}