ковингтон со строками в качестве аргументов макроса

ковингтон со строками в качестве аргументов макроса

Мне нужны блески и использованиековингтон.styдля этого (если вы можете решить мою проблему сдругой пакетЯ не против, мне в любом случае нужно будет все рефакторить для решения). \gllожидает две строки: текст, который нужно скорректировать ( Hallo Weltв примере) и скорректировать текст ( Hello Worldв примере). Теперь мне нужна команда \autogloss, которая автоматически записывает вторую строку за меня. То есть команды \hello{} \world{}, которые являются общими для обеих строк, \gllстановятся первым аргументом \autogloss. Однако это не компилируется с Something's wrong--perhaps a missing \item..

Я предположил, что это может быть связано с тем, что аргумент не развернут, хотя тогда его все равно следовало бы сформулировать (просто не так, как следует) — и никакие из этих выражений, \expandafterпохоже, не срабатывают.

Я получаю то же самое сообщение, когда ставлю a %в конце строк рабочего примера, поэтому я подумал, что решение изЭта проблемаможет и сработает, но, похоже, нет (может быть, я что-то не так сделал).

\documentclass{article}
\usepackage{etoolbox}
\usepackage{covington}

\newcounter{@language}
\setcounter{@language}{0}
\def\english{\setcounter{@language}{0}}
\def\german{\setcounter{@language}{1}}

\newcommand\hello{\ifnumcomp{\value{@language}}{=}{0}{Hello}{Hallo}}
\newcommand\world{\ifnumcomp{\value{@language}}{=}{0}{World}{Welt}}

\newcommand\autogloss[2]{%
    \gll \german{}#1
    \english{}#1
    \glt `#2'
    \glend
}

\begin{document}
\begin{examples}
\item this one works:
    \gll \german{}\hello{} \world{}
    \english{}\hello{} \world{}
    \glt `Hello World.'
    \glend
\item this one doesn't: % comment next line to compile.
    \autogloss{\hello{} \world{}}{`Hello World.'}
\end{examples}
\end{document}

решение1

С gb4e?

\documentclass{article}
\usepackage{etoolbox}
\usepackage{gb4e}

\newcounter{@language}
\setcounter{@language}{0}
\def\english{\setcounter{@language}{0}}
\def\german{\setcounter{@language}{1}}

\newcommand\hello{\ifnumcomp{\value{@language}}{=}{0}{Hello}{Hallo}}
\newcommand\world{\ifnumcomp{\value{@language}}{=}{0}{World}{Welt}}

\newcommand\autogloss[2]{%
    \gll \german{}#1\\
    \english{}#1\\
    \glt `#2'
}

\let\eachwordone=\it

\begin{document}
\begin{exe}
\ex this one works:
    \gll \german{}\hello{} \world{}\\
    \english{}\hello{} \world{}\\
    \glt `Hello World.'
\ex this one does, as well:
    \autogloss{\hello{} \world{}}{Hello World.}
\end{exe}
\end{document} 

Выход

введите описание изображения здесь

Связанный контент