我想lstlisting
在 中拥有一个环境tcolorbox
。问题是,当有分页符时,使用breakable
,列表选项的颜色组件basicstyle
在分页符后重置,文本返回黑色。当您仅使用 设置颜色时也会出现同样的问题\color{<color>}
,但可以通过重新声明颜色声明来解决这个问题。
(虽然,这似乎不那么容易,因为你需要知道盒子会在哪里断裂,而且由于某种原因,断裂后颜色不会立即重置,我通过\ \kern-1ex\color{<color>}
在重新声明时添加和删除空格来解决这个问题,这有点像黑客行为,但这不是我要解决的问题。)
这个问题是相关的,但解决方案(选项coltext
)tcolorbox
不可行,因为我不希望所有文本都改变颜色。我想要一些文本以默认颜色解释代码片段的作用,然后环境中的文本lstlisting
应该全部是我为选项设置的颜色basicstyle
。
我还在这个网站上找到了关于类似问题的讨论,但它与 XeLaTeX 有关,我在 TeXLive 2021、TeXLive 2020(均在背面)和 MiKTeX 上尝试过这个问题,其中相关的软件包版本是
tcolorbox
4.51xcolor
2.12listings
1.8天
我非常确定这个问题与默认颜色有关,因为其他选项(basicstyle=\itshape
例如)在分页符后不会重置。其他选项(例如)中的颜色也是如此,keywordstyle=\color{blue}
这在分页符的两侧都有效,前提是您设置了语言并使用了有效的关键字。
梅威瑟:
\documentclass{article}
\usepackage{xcolor}
\usepackage[listings]{tcolorbox}
\tcbuselibrary{breakable}
\usepackage[top=1cm, bottom=1.5cm]{geometry} % decrease margins to make images smaller
\begin{document}
~\vspace{23cm}\obeylines
% Example
\begin{tcolorbox}[breakable]
\color{red}
1 Test
2 Test
3 Test % line breaks here
% \ \kern-1ex\color{red}4 Test % replace line below with this to get around colour swapping back
4 Test
5 Test
6 Test
\end{tcolorbox}
\vspace{21cm}
% Standard use case:
\begin{tcolorbox}[breakable]
Some text explaining what the code does, in the default black colour.
\begin{lstlisting}[gobble=12, basicstyle=\color{red}, escapechar=|]
some code, which should all be the same colour
this line is after the page break and is back to black
can't redeclare color: \color{red} still black
can't escape to redeclare: |\color{red}| still black
\end{lstlisting}
\end{tcolorbox}
\end{document}
答案1
您可以使用use color stack
键。请注意,它应该位于可破坏键之前,并且会影响间距:
\documentclass{article}
\usepackage{xcolor}
\usepackage[listings]{tcolorbox}
\tcbuselibrary{breakable}
\usepackage[top=1cm, bottom=1.5cm]{geometry} % decrease margins to make images smaller
\begin{document}
~\vspace{23cm}\obeylines
% Example
\begin{tcolorbox}[use color stack,breakable]
\color{red}
1 Test
2 Test
3 Test % line breaks here
% \ \kern-1ex\color{red}4 Test % replace line below with this to get around colour swapping back
4 Test
5 Test
6 Test
\end{tcolorbox}
\vspace{21cm}
% Standard use case:
\begin{tcolorbox}[use color stack,breakable]
Some text explaining what the code does, in the default black colour.
\begin{lstlisting}[gobble=12, basicstyle=\color{red}, escapechar=|]
some code, which should all be the same colour
this line is after the page break and is back to black
can't redeclare color: \color{red} still black
can't escape to redeclare: |\color{red}| still black
\end{lstlisting}
\end{tcolorbox}
\end{document}