Utilizo un tcolorbox para mostrar mis listados y eso realmente funciona bastante bien. Pero si en mi listado se produce un salto de página, entonces se eliminará mi propiedad predefinida "estilo básico". Y no tengo idea de por qué. ¿Quizás alguien tenga una idea?
Este es mi código:
\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}
Y el resultado: aquí hay un salto de página.
Actualizar:
La respuesta de Thomas fue la solución. Gracias por eso. Sin embargo, aquí hay un ejemplo más completo, con la solución de Thomas. Si a alguien le interesa.
\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}
Respuesta1
CSharp
Dado que el código proporcionado no es compilable y, especialmente , falta información sobre el estilo utilizado , no puedo probar el problema. Pero tengo una suposición sobre la causa del problema y por eso trato de dar unamejor conjeturarespuesta.
Cuando tcolorbox
se encuentra un salto de página, los colores de la siguiente parte del cuadro se restauran a sus valores de configuración. La razón de este comportamiento es que (La)TeX no puede realizar un seguimiento de la información de color durante un \vsplit
proceso que funciona bajo el capó.
El color de texto predeterminado es negro. Supongo que su CSharp
estilo establece el color del texto actual en blanco, que se reemplaza por el color negro predeterminado después de la pausa. La solución para esto es cambiar el color de texto predeterminado del archivo tcolorbox
. Intente agregar lo siguiente a su lista de opciones:
%...
colupper=white,
%...
Miadivinares que esto funciona.