Ich habe Beispiellisten für ein Buch.
Ich hätte gerne eine horizontale Linie in der Breite der Farbbox zwischen der Überschrift und der Auflistung.
Der zur Erstellung verwendete Code:
\documentclass[letterpaper,oneside,12pt]{book}
\usepackage{listings}
\usepackage[most]{tcolorbox}
\usepackage{caption}
\usepackage{xcolor}
\definecolor{shadecolor}{gray}{0.95}
\definecolor{captionbox}{cmyk}{0.43, 0.35, 0.35,0.01}
\tcbset{colback=captionbox!5!white,colframe=captionbox!75!black}
\BeforeBeginEnvironment{lstlisting}{\begin{tcolorbox}[toprule=3mm]\vskip-.5\baselineskip}
\AfterEndEnvironment{lstlisting}{\end{tcolorbox}}
\DeclareCaptionFormat{listing}{\parbox{\textwidth}{#1#2#3}}
\captionsetup[lstlisting]{format=listing,skip=10pt}
\lstset{numbers=none}
\begin{document}
\begin{lstlisting}[caption=Sample code block]
This is a code block
\end{lstlisting}
\end{document}
Meine einzige Einschränkung besteht darin, dass ich das Listings-Paket und lstlisting verwenden muss, da Pandoc dies für Listings erfordert. Ich ersetze gerne alles andere, um den gleichen Effekt eines Felds um die Überschrift und die Auflistung mit der Linie zwischen der Überschrift und der Auflistung und einem ähnlichen Stilgefühl zu erzielen.
Antwort1
Aktualisieren: geändert overlay first
, damit overlay unbroken and first
die Linie auch in ununterbrochenen Kästchen erscheint. Mein Fehler.
Schade, dass Sie nicht verwenden können tcblistings
, das anscheinend speziell für diesen Zweck entwickelt wurde und intern verwendet listings
(ich habe dies gelesen, aber nicht überprüft).
Obwohl ich keine „spezifischen“ Lösungen mag (also Lösungen, die manuelles Herumfummeln erfordern), schlage ich Ihnen dennoch Folgendes vor, einfach weil es „funktioniert“:
\documentclass[letterpaper,oneside,12pt]{book}
\usepackage{xcolor}
\usepackage{listings}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}
\tcbuselibrary{skins}
\usepackage{caption}
\usepackage{tikz}
\usepackage{lipsum}
\definecolor{shadecolor}{gray}{0.95}
\definecolor{captionbox}{cmyk}{0.43, 0.35, 0.35,0.01}
\tcbset{%
colback=captionbox!5!white,%
colframe=captionbox!75!black,%
top=1mm,% %% Used to manually align the caption with the horizontal line
%
%% Create a new "style" for your titled listings tcolorbox
mylistingwithtitle/.style = {%
breakable,%
%% Use tcolorbox's internal tikz object name (frame) to draw a horizontal line
overlay unbroken and first={\draw[shorten >=1.4pt, shorten <=1.4pt] ([yshift=-3em]frame.north west) -- ([yshift=-3em]frame.north east);}%
}%
}
\BeforeBeginEnvironment{lstlisting}{%
\begin{tcolorbox}[enhanced, toprule=3mm, mylistingwithtitle]%
\vskip-.5\baselineskip%
}
\AfterEndEnvironment{lstlisting}{\end{tcolorbox}}
\DeclareCaptionFormat{listing}{\parbox{\textwidth}{#1#2#3}}
\captionsetup[lstlisting]{format=listing,skip=15pt}
\begin{document}
%% This following line is only useful to execute \lipsum[1-4] inside the listing
\lstset{numbers=none, escapeinside={(*}{*)}}
\begin{lstlisting}[caption=Sample code block]
This is a code block
(*\lipsum[1-4]*)
\end{lstlisting}
\end{document}
Wenn Sie die Formatierung der Überschrift ändern, müssen Sie den vertikalen Abstand manuell ändern, also die top=1mm
Option für die Farbbox und die [yshift=-3em]
zum Zeichnen der horizontalen Linie. Sie müssen auch mit der letzteren Option sowie den Optionen shorten >=1.4pt
und herumspielen shorten <=1.4pt
, wenn Sie die Formatierung (obere Zeile, Rahmenbreite, innere Ränder usw.) der Farbbox ändern möchten.
Ich habe mir erlaubt, breakable
der Tcolorbox die Option hinzuzufügen, eine Umbruchfunktion über mehrere Seiten zu ermöglichen.
Ausgabe: