책에 대한 예시 목록이 있습니다.
캡션과 목록 사이의 tcolorbox 너비에 대한 수평 규칙을 원합니다.
이를 생성하는 데 사용된 코드는 다음과 같습니다.
\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}
내 유일한 제약은 Pandoc이 목록을 요구하기 때문에 목록 패키지와 lstlisting을 사용해야 한다는 것입니다. 캡션과 목록 사이의 규칙과 유사한 스타일 느낌을 사용하여 캡션과 목록 주위에 상자와 동일한 효과를 생성하기 위해 다른 것을 대체하게 되어 기쁩니다.
답변1
업데이트: 줄이 끊어지지 않은 상자에도 나타나도록 하려면 overlay first
로 변경되었습니다. overlay unbroken and first
내 실수.
안타깝게도 tcblistings
이 목적을 위해 특별히 제작되어 내부적으로 사용되는 것으로 보이는 를 사용할 수 없습니다 listings
(읽었지만 확인하지는 않았습니다).
나는 "특정" 솔루션(즉, 수동 조정이 필요한 솔루션)을 좋아하지 않지만 그럼에도 불구하고 단순히 "작동"하기 때문에 이것을 제안합니다.
\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}
top=1mm
캡션 형식을 변경하는 경우 수직 간격, 즉 tcolorbox에 대한 옵션과 [yshift=-3em]
수평선을 그리는 옵션 을 수동으로 조정해야 합니다 . 또한 tcolorbox의 형식(윗줄, 테두리 너비, 내부 여백 등)을 변경하기로 결정한 경우 shorten >=1.4pt
및 옵션 과 함께 후자 옵션을 조정해야 합니다 .shorten <=1.4pt
나는 breakable
tcolorbox에 옵션을 추가하여 여러 페이지에 걸쳐 나눌 수 있도록 했습니다.
산출: