如何在注释中为几个单词加下划线而不弄乱对齐?这是一个 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}