如何使用 gb4e 在多个单词上使用 \underline 和 \emph?

如何使用 gb4e 在多个单词上使用 \underline 和 \emph?

如何在注释中为几个单词加下划线而不弄乱对齐?这是一个 MWE。

\documentclass{article}
\usepackage{gb4e}
\begin{document}
\begin{exe}
    \ex[*]{\gll Me \underline{very bad sentence}\\
    me very bad sentence\\
    \trans `This is an unacceptable sentence'
    }
\end{exe}
\end{document}

正如所见,事情并没有正确排列。

在此处输入图片描述

答案1

最直接的答案是,你不能。\gll同时还要\glll计算传递给它们的东西,以便将它们排列起来。而且,在传递给它们的任何东西被扩展之前,它们会计算这些东西。所以,在gb4e的眼里,\underline{...}算作一件事。

\underline{}此外,和之类的东西甚至不是\emph{}可以扩展的宏。因此,甚至不可能将\gll(或\glll) 的宏扩展延迟到\underline\emph扩展(因为它们不扩展)。

所以如果你真的需要这种行为,那么您将需要为 编写一个新的宏,\underline并为此编写一个新的宏\emph,当传递一个像 这样的参数时abc abc,扩展为\underline{abc} \underline{abc}(或\emph{abc} \emph{abc})之类的东西。

因此,实际上最简单的答案就是对每个单词分别写下\underline\emph,如下所示:

\documentclass{article}
\usepackage{gb4e}
\begin{document}
\begin{exe}
    \ex[*]{\gll Me \underline{very} \underline{bad} \underline{sentence}\\
    me very bad sentence\\
    \trans `This is an unacceptable sentence'
    }
\end{exe}
\end{document}

在此处输入图片描述

如果你真的需要你追求的行为,@egreg设计了一个分裂的方式\emph\underline同时也延缓了扩张\gll。他没有为 编写一个新的宏\underline和为 编写一个新的宏,而是编写了一个新的宏,这个宏会导致和之类的东西被拆分,并且还会导致 的扩展延迟。\emph\GLL\underline\emph\gll

\documentclass{article}
\usepackage{gb4e}

\makeatletter
\def\GLL#1\\#2\\{%
  \begingroup
  \let\emph\split@emph
  \let\underline\split@underline
  \protected@edef\@tempa{#1\noexpand\\#2\noexpand\\}%
  \expandafter\endgroup\expandafter\gll\@tempa
}
\def\split@emph#1{\dosplit@emph#1 \dosplit@emph\dosplit@emph}
\def\dosplit@emph#1 #2{%
  \ifx#2\dosplit@emph
    \noexpand\emph{#1}%
    \expandafter\@gobbletwo
  \else
    \noexpand\emph{#1}\space
    \expandafter\@firstofone
  \fi
  {\dosplit@emph#2}%
}
\def\split@underline#1{\dosplit@underline#1 \dosplit@underline\dosplit@underline}
\def\dosplit@underline#1 #2{%
  \noexpand\underline{#1}\space
  \ifx#2\dosplit@underline
    \expandafter\@gobbletwo
  \else
    \expandafter\@firstofone
  \fi
  {\dosplit@underline#2}%
}
\makeatother

\begin{document}
\begin{exe}
\ex Nonsense:
\GLL This \emph{is some nonsense} with \underline{underlining of some word} \\
     Abc defgh ijk lmno pqr stuv wx yz Ops\\
\glt “This is a test.”
\end{exe}
\end{document} 

在此处输入图片描述

答案2

如果某样东西在一行上加了下划线,那么对应的对象必须放在第二行。所以,最简单的答案是:

\begin{exe}
    \ex[*]{\gll Me \underline{very bad sentence}\\
    me {very bad sentence}\\
    \trans `This is an unacceptable sentence'
    }
\end{exe}

如果可以单独给单词加下划线,那么我建议对每个这样的单词使用 strut:

\def\u#1{\underline{\vphantom y#1}}
\begin{exe}
    \ex[*]{\gll Me \u{very} \u{bad} \u{sentence}\\
    me veryyy bad sentence\\
    \trans `This is an unacceptable sentence'
    }
\end{exe}

如果下划线的单词比第二行的单词长,那么您可以使用, ,为一组单词(包括它们之间的空格)划下划线\rlap\underline\phantom

\begin{exe}
    \ex[*]{\gll Me \rlap{\underline{\phantom{very bad sentence}}}very bad sentence\\
    me v b sent\\
    \trans `This is an unacceptable sentence'
    }
\end{exe}

相关内容