No momento eu uso o listings
pacote para compor minha listagem. As listagens são flutuantes, usam números de linha e possuem uma regra superior e inferior para serem diferenciadas do texto ao redor.
O que eu realmente gostaria de ter é um pequeno preâmbulo para cada listagem, separado por uma regra (mais leve) e contendo anotações para a listagem, como afirmação, efeitos colaterais, requisitos, etc. uma regra intermediária leve e uma regra inferior mais pesada, como a conhecida no booktabs
pacote. Além disso, as linhas do preâmbulo não devem ser contadas, porque o preâmbulo não faz parte da listagem.
Como faço isso no LaTeX com mais facilidade? Preferível, eu gostaria de usar o listings
pacote.
Responder1
O exemplo a seguir constrói listagens flutuantes usando o tcolorbox
pacote sem numeração das listagens. O ambiente preamblelisting
toma o preâmbulo como parâmetro obrigatório. O parâmetro opcional é qualquer tcolorbox
opção. O pacote subjacente para composição tipográfica é listings
.
Nota: Pode ser necessário atualizar o tcolorbox
pacote para compilar.
\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}
ATUALIZAR:
Esta atualização considera os comentários do OP e adiciona numeração com títulos definidos abaixo. Além disso, isso combina com listagens normais do pacote de listagens, ou seja, ambos podem ser usados em paralelo. Finalmente, cleveref
é usado:
\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}