Я использую tcolorbox для отображения своих списков, и это на самом деле работает довольно хорошо. Но если в моем списке произойдет разрыв страницы, то мое предопределенное свойство "basicstyle" будет удалено. И я понятия не имею, почему. Может быть, у кого-то есть идея?
Вот мой код:
\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}
И вот результат: вот разрыв страницы.
Обновлять:
Ответ от Томаса был решением. Спасибо за это. Тем не менее, вот более полный пример, с исправлением от Томаса. Если кому-то интересно.
\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}
решение1
Поскольку данный код не компилируется и, в частности, отсутствует информация об используемом CSharp
стиле, я не могу проверить проблему. Но у меня есть предположение о причине проблемы, поэтому я пытаюсь датьлучшая догадкаотвечать.
Когда a tcolorbox
встречает разрыв страницы, цвета следующей части поля восстанавливаются до своих установленных значений. Причина такого поведения в том, что (La)TeX не может отслеживать цветовую информацию во время , \vsplit
которая работает под капотом.
Цвет текста по умолчанию — черный. Я предполагаю, что ваш CSharp
стиль устанавливает текущий цвет текста на белый, который заменяется на черный цвет по умолчанию после разрыва. Решение этой проблемы — изменить цвет текста по умолчанию для tcolorbox
. Попробуйте добавить следующее в свой список параметров:
%...
colupper=white,
%...
Мойпредполагатьчто это срабатывает.