如何为对齐的 gb4e 光泽示例中的文本着色?

如何为对齐的 gb4e 光泽示例中的文本着色?

我正在使用这个包格布对一些语例进行注解,其主要特点是将原文中的词语与注解对齐。

我希望能够改变文本某些部分的字体/颜色,以便突出显示在特定上下文中更重要的部分。

例子。 在以下示例中,第一行是我目前设想的理想解决方案。不幸的是,它不起作用。第二行是我目前的解决方案:这可行,但我必须为每个注释重复该命令,这使得源代码的可读性降低。第三行是一次回避问题的失败尝试:将几个单词组合在一起不起作用,因为这会使它们成为同一条注释的一部分。

\documentclass{report}
\usepackage{color}
\usepackage{gb4e}

\begin{document}

\begin{exe}
\ex \glll
    a \color{blue} b c d \color{black} e f g\\
    a {\color{blue} b} {\color{blue} c} {\color{blue} d} e f g\\
    a {\color{blue} b c d} e f g\\

\end{exe}

\end{document}

输出:

在此处输入图片描述

我正在寻找一个更好的解决方案,它可以实现与给定示例的第二行相同的结果,但不会使源代码变得难以阅读。

我愿意接受不涉及包裹的建议格布,以防存在更好的方案来处理这种情况。


编辑:理想的解决方案是

a \fromNowOnTextIsBlue b c d \fromNowOnTextIsBlackAgain e f g\\

也就是改变颜色的方法“全球”,这样它就超出了本地范围。事实上,包格布将任何命令视为独立的注释,因此它不会将其效果传播到后续单词。这可能吗?

答案1

cgloss4e这是一个修补了光泽宏以添加您选择的颜色的版本。我创建了三个宏:

\glosscolor{} % sets the colour of the gloss elements
\clt  % turn colouring on 
\clf  % turn colouring off 

由于这会修改注释解析器代码,因此它将适用于\gll\glll行。它不适用于常规示例行。着色在每个注释行的末尾关闭。这将使用包xcolor而不是包color,以便可以相对于当前文档颜色进行颜色更改。

\documentclass{report}
\usepackage{xcolor} % instead of the color package
\usepackage{gb4e}

\makeatletter
\newcommand*\glosscolor[1]{\gdef\@glcolor{#1}}
\glosscolor{red}
\AtBeginDocument{\colorlet{savedcol}{.}}
\def\@glosscolor{savedcol}

\newcommand{\clt}{\gdef\@glosscolor{\@glcolor}\color{\@glosscolor}}
\newcommand{\clf}{\gdef\@glosscolor{savedcol}\color{\@glosscolor}}

\gdef\getwords(#1,#2)#3 #4\\% #1=linebox, #2=\each, #3=1st word, #4=remainder
   {\setbox#1=\vbox{\hbox{#2{\strut\color{\@glosscolor}#3} }% adds space
                    \unvbox#1%
                   }%
    \def\more{#4}%
    \ifx\more\empty\let\more=\donewords
    \else\let\more=\getwords
    \fi
    \more(#1,#2)#4\\%
   }
\gdef\donewords(#1,#2)\\{\gdef\@glosscolor{savedcol}}   
\makeatother

\begin{document}

\begin{exe}
\ex \glll
    \clt a  b c d \clf e f g\\ % colour from a-d
    a  \clt b  c  d f \clf g\\ % colour from b-f
    a \clt b c d \clf e f g\\  % colour from b-d
\end{exe}

\end{document}

代码输出

答案2

如果您想缩短\color{blue}代码以使它更具可读性,那么您可以定义一个\newcommand将其更改为更短的代码,在本例中我选择了\cb,您仍然可以在第二行获得所需的相同输出。

\documentclass{report}
\usepackage{color}
\usepackage{gb4e}

\newcommand{\cb}{\color{blue}}

\begin{document}

\begin{exe}
\ex \glll
    a \color{blue} b c d \color{black} e f g\\
    a {\cb b} {\cb c} {\cb d} e f g\\
    a {\color{blue} b c d} e f g\\

\end{exe}

\end{document}

在此处输入图片描述

相关内容