有没有(更好的)方法可以在 paracol 环境中反复切换两种字体颜色,并使用 XeTeX 进行编译?

有没有(更好的)方法可以在 paracol 环境中反复切换两种字体颜色,并使用 XeTeX 进行编译?
\documentclass{article}

\usepackage{xeCJK}

\usepackage{xcolor}
\colorlet{color1}{blue!50!black}
\colorlet{color2}{green!50!black}

\usepackage{etoolbox}
\newtoggle{col}

\providecommand{\tog}%
    {%
    \iftoggle{col}%
        {\color{color1}\togglefalse{col}}%
        {\color{color2}\toggletrue{col}}%
    }%
    
\usepackage{paracol}

\maxdeadcycles=10000

\begin{document}

\begin{paracol}{1}

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z


\end{paracol}

\end{document}

我正在用中文写文档,并使用 XeTeX 编译并获取中文字体。我还用它paracol来添加边注。我编写了一个\tog切换字体颜色的函数,目的是突出显示中文单词边界。为了方便编辑,我想使用一个在两种颜色之间切换的命令,而不是明确说明颜色(否则如果我删除一个单词,那么我需要更改整个文档的颜色)。

我必须首先克服这个问题通过添加\maxdeadcycles=10000,但即使这样,过了一段时间后它基本上就放弃了:

重复书写的字母;它最初在绿色和蓝色之间交替,但过了一会儿就放弃了,一切都变成了蓝色

一定有更好的方法。我只想在出现时切换字体颜色\tog(我需要调用数千次);这应该不会太难。

问题:有没有(更好的)方法可以在 paracol 环境中反复切换两种字体颜色,并使用 XeTeX 进行编译?

答案1

出现此错误是因为同一环境中的颜色变化过多超出了 XeTeX 颜色堆栈的容量。您的错误是字面上的堆栈溢出。

在 XeTeX 中解决这个问题的一种方法是将每次颜色变化都放在一个\textcolor命令中,这样每次颜色变化都会持续很短的时间,然后在下一次变化之前结束。然后 XeTeX 不会尝试记住环境结束前的所有颜色变化,以便在需要时可以撤消所有颜色变化,这会让一切都变得混乱。

\documentclass{article}

\usepackage{xeCJK}

\usepackage{xcolor}
\colorlet{color1}{blue!50!black}
\colorlet{color2}{green!50!black}

\usepackage{etoolbox}
\newtoggle{col}

\providecommand{\tog}[1]%
    {%
    \iftoggle{col}%
        {\textcolor{color1}{#1}\togglefalse{col}}%
        {\textcolor{color2}{#1}\toggletrue{col}}%
    }%
    
\usepackage{paracol}

\maxdeadcycles=10000

\begin{document}

\begin{paracol}{1}

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z


\end{paracol}

\end{document}

文本示例

尽管你可能会写一些更类似的东西\tog{uvw}\tog{xy}。我只是在不需要的时候没有重写整个 MWE。

此外,如果您的颜色变化确实如此有规律,那么您可以在循环内进行这些变化。

答案2

@Fran 的想法很好。

基于如何使用lualatex来使用中文?,luatexja 是一个选项。

颜色

[文本 - 维基百科 - 太阳系]

平均能量损失

\documentclass{article}

%\usepackage{xeCJK}
\usepackage{luatexja-fontspec}
\setmainjfont{FandolSong}

\usepackage{xcolor}
\colorlet{color1}{blue}
\colorlet{color2}{red}

\usepackage{etoolbox}
\newtoggle{col}

\newcommand{\tog}%
    {%
    \iftoggle{col}%
        {\color{color1}\togglefalse{col}}%
        {\color{color2}\toggletrue{col}}%
    }%

%to save typing:
\newcommand{\北}{\tog}
\catcode`\⛯=\active %arbitrary symbol as shortcut
\def⛯{\北}
    
\usepackage{paracol}


\begin{document}

\begin{paracol}{1}

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z

\tog a\tog b\tog c\tog d\tog e\tog f\tog g\tog h\tog i\tog j\tog k\tog l\tog m\tog n\tog o\tog p\tog q\tog r\tog s\tog t\tog u\tog v\tog w\tog x\tog y\tog z


⛯太陽系⛯是⛯一个⛯受太⛯阳引力约⛯束在⛯一起⛯的⛯行星系统

\北 太陽系\北 是\北 一个⛯受太⛯阳引力约⛯束在⛯一起⛯的⛯行星系统,包括⛯太⛯阳⛯以⛯及⛯直⛯接⛯或⛯间⛯接⛯围⛯绕⛯太⛯阳⛯运⛯动⛯的⛯天⛯体[a]。etc    ... 在直接围绕太阳运动的天体中,最大的八颗被称为行星[b],其余的天体要比行星小很多,比如矮行星、太阳系小行星和彗星。軌道間接围绕太陽运动的天體是衛星,其中有兩顆比最小的行星水星還要大[c]。 



\end{paracol}

\end{document}

相关内容