使用时expex
包时,是否有一种优雅的方式将相同的格式应用于词素及其注释?例如,我想将数据中的每个前缀加粗和它的光泽,像这样:
当然,这可以通过分别加粗前缀和其注释来实现,就像这个 MWE 中的那样:
\documentclass{article}
\usepackage{expex}
\begin{document}
\ex \begingl[glstyle=nlevel]
\glpreamble Niwaapamaa kimaamaa.\endpreamble
\textbf{ni-}[\textbf{1-}] % prefix and gloss bolded separately
waapam[see]
-aa[-\textsc{dir}]
\nogloss{\quad}
\textbf{ki-}[\textbf{2-}] % prefix and gloss bolded separately
maamaa[mother]
\glft `I see your mother.'
\xe
\end{document}
但是重复使用类似的格式命令\textbf{ni-}[\textbf{1-}]
并不优雅。对于一次性操作来说还行,但在包含数百条注释的文档中效率低下。有没有办法一次性将类似的ni-[1-]
命令应用于两个元素?我的天真尝试如下,这将允许将上例中的第一个前缀输入为\glprefix{ni-}{1-}
:
\newcommand{\glprefix}[2]{\textbf{#1}[\textbf{#2}]}
但事情不可能这么简单,因为将两个元素埋在单个命令中会妨碍expex
正确注释它们。我想知道是否有某种技巧可以解决这个问题。
答案1
这是一个仅适用于ngloss
样式输入的解决方案。这个想法是在第一个 gloss 元素中设置一个条件,然后让它在第二个元素中保持不变。突出显示的命令是\HL
,它必须位于 gloss 对的第一个元素内,整个元素位于 中{...}
。我没有对格式本身进行硬编码,而是创建了一个\hlight
定义为 的宏\bfseries
。这允许根据需要更改格式。
您的天真方法不起作用的原因是,解包样式中的元素对的宏ngloss
是一个分隔宏,因此您不能以简单的方式将其包装在其他宏中。
\documentclass{article}
\usepackage{expex}
\newif\ifhilight
\newcommand*{\hilight}{\bfseries}
\makeatletter
\newcommand*\HL{\hilight\global\hilighttrue}
\newcommand*\@hilight{\global\hilightfalse\hilight}
\def\gln@word #1[#2]#3 {%
\def\@currentitem{\\{\ifhilight\hilight#1\else#1\fi}}%
\def\@diacritic{#3}%
\gln@ilg@f \ifhilight\@hilight#2\else#2\fi/\@nil
\gln@ilg@a
}
\makeatother
\begin{document}
\ex \begingl[glstyle=nlevel]
\glpreamble Niwaapamaa kimaamaa.\endpreamble
{\HL ni-}[1-] % prefix and gloss bolded separately
waapam[see]
-aa[-\textsc{dir}]
\nogloss{\quad}
{\HL ki-}[2-] % prefix and gloss bolded separately
maamaa[mother]
\glft `I see your mother.'
\xe
\end{document}