Ich verwende eine Tcolorbox zur Anzeige meiner Listings und das funktioniert eigentlich ganz gut. Wenn in meinem Listing aber ein Seitenumbruch auftritt, dann wird meine vordefinierte Eigenschaft „Basicstyle“ entfernt. Und ich habe keine Ahnung, warum. Vielleicht hat jemand eine Idee?
Dies ist mein Code:
\begin{tcblisting}{
skin=enhanced,
colback=CSbackground,
boxrule=0pt,
arc=0pt,
outer arc=0pt,
top=-14.8pt,
bottom=-14.8pt,
colframe=red,
listing only,
left=-2.5pt,
right=-8pt,
overlay={\fill[CSnumberbg] ([xshift=-10pt]frame.south west) rectangle ([xshift=0pt]frame.north west);
\fill[CSnumberline] ([xshift=-10pt]frame.south west) rectangle ([xshift=-9pt]frame.north west);},
listing style=CSharp,
breakable,
bottomsep at break=14.8pt,
topsep at break=14.8pt
}
string s = "this is a string"
%many repetitions
string s = "this is a string"
\end{tcblisting}
Und das Ergebnis: Hier ist ein Seitenumbruch.
Aktualisieren:
Die Antwort von Thomas war die Lösung. Vielen Dank dafür. Trotzdem hier noch ein ausführlicheres Beispiel, mit dem Fix von Thomas. Falls jemand Interesse hat.
\usepackage{listings}
\usepackage[most]{tcolorbox}
\definecolor{CSbackground}{RGB}{30, 30, 30}
\definecolor{CSkeywords}{RGB}{86, 156, 214}
\definecolor{CSstrings}{RGB}{214, 157, 133}
\definecolor{CScomments}{RGB}{96, 139, 78}
\definecolor{CSemph}{RGB}{78, 201, 176}
\definecolor{CSnumberbg}{RGB}{241, 241, 241}
\definecolor{CSnumberline}{RGB}{38, 169, 202}
\lstdefinestyle{CSharp}{
backgroundcolor=\color{CSbackground},
language=[Sharp]C,
frame=l,
framesep=5pt,
basicstyle=\footnotesize\ttfamily\color{White},
showstringspaces=false,
keywordstyle=\color{CSkeywords}\bfseries,
identifierstyle=\ttfamily,
stringstyle=\color{CSstrings},
commentstyle=\color{CScomments},
rulecolor=\color{CSbackground},
emph={GZipStream,StreamWriter,WebClient,additionalClasses},
emphstyle=\ttfamily\color{CSemph},
xleftmargin=5pt,
xrightmargin=5pt,
aboveskip=\bigskipamount,
belowskip=\bigskipamount,
showspaces=false,
showtabs=false,
breaklines=true,
breakatwhitespace=false,
escapeinside={(*@}{@*)},
numbers=left,
numbersep=1.1em,
stepnumber=1,
numberstyle=\tiny\color{Gray}
}
\begin{tcblisting}{
skin=enhanced,
colback=CSbackground,
boxrule=0pt,
arc=0pt,
outer arc=0pt,
top=-14.8pt,
bottom=-14.8pt,
colframe=red,
listing only,
left=-2.5pt,
right=-8pt,
overlay={\fill[CSnumberbg] ([xshift=-10pt]frame.south west) rectangle ([xshift=0pt]frame.north west);
\fill[CSnumberline] ([xshift=-10pt]frame.south west) rectangle ([xshift=-9pt]frame.north west);},
listing style=CSharp,
breakable,
bottomsep at break=14.8pt,
topsep at break=14.8pt,
colupper=white
}
string s = "this is a string"
%many repetitions
string s = "this is a string"
\end{tcblisting}
Antwort1
Da der angegebene Code nicht kompilierbar ist und insbesondere die Informationen über die verwendetenCSharp
Stil fehlen, kann ich das Problem nicht testen. Ich habe jedoch eine Vermutung über die Ursache des Problems und versuche daher, einebeste AnnahmeAntwort.
Wenn tcolorbox
ein Seitenumbruch auftritt, werden die Farben des folgenden Boxteils auf ihre eingestellten Werte zurückgesetzt. Der Grund für dieses Verhalten ist, dass (La)TeX die Farbinformationen während eines \vsplit
im Hintergrund laufenden Vorgangs nicht verfolgen kann.
Die Standardtextfarbe ist schwarz. Ich vermute, dass Ihr CSharp
Stil die aktuelle Textfarbe auf Weiß setzt, das nach dem Umbruch durch die Standardfarbe Schwarz ersetzt wird. Die Lösung hierfür besteht darin, die Standardtextfarbe des zu ändern tcolorbox
. Versuchen Sie, Folgendes zu Ihrer Optionsliste hinzuzufügen:
%...
colupper=white,
%...
Meinerratenist, dass dies den Zweck erfüllt.