![如何为对齐的 gb4e 光泽示例中的文本着色?](https://linux22.com/image/376729/%E5%A6%82%E4%BD%95%E4%B8%BA%E5%AF%B9%E9%BD%90%E7%9A%84%20gb4e%20%E5%85%89%E6%B3%BD%E7%A4%BA%E4%BE%8B%E4%B8%AD%E7%9A%84%E6%96%87%E6%9C%AC%E7%9D%80%E8%89%B2%EF%BC%9F.png)
我正在使用这个包格布对一些语例进行注解,其主要特点是将原文中的词语与注解对齐。
我希望能够改变文本某些部分的字体/颜色,以便突出显示在特定上下文中更重要的部分。
例子。 在以下示例中,第一行是我目前设想的理想解决方案。不幸的是,它不起作用。第二行是我目前的解决方案:这可行,但我必须为每个注释重复该命令,这使得源代码的可读性降低。第三行是一次回避问题的失败尝试:将几个单词组合在一起不起作用,因为这会使它们成为同一条注释的一部分。
\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}