这是这个答案和评论。有谁知道如何自动化\nogloss
宏,这样我就不必标记每个标点符号(或者至少! ? “ , 。) 用它?
编辑:感谢@Alan Munn,我现在意识到我正在寻找与 XeTeX 兼容的解决方案。
梅威瑟:
\documentclass{book}
\usepackage{expex}
\lingset{glwordalign=center}
\begin{document}
\exdisplay
\begingl
\gla \nogloss{``} @ aaaaa aaaaaaa @ \nogloss{!''} aaaa aaaa aaaa @ \nogloss{\ldots} //
\glb bbbbb bbbbbbb bbbb bbbb bbbb //
\glc ccccc ccccccc cccc cccc cccc //
\endgl
\xe
\end{document}
编辑:澄清一下,我希望我的输入像下面的 MWE,但自动化产生上面的 MWE,或者至少是上述代码产生的输出。
\documentclass{book}
\usepackage{expex}
\lingset{glwordalign=center}
\begin{document}
\exdisplay
\begingl
\gla "aaaaa aaaaaaa!" aaaa aaaa aaaa... //
\glb bbbbb bbbbbbb bbbb bbbb bbbb //
\glc ccccc ccccccc cccc cccc cccc //
\endgl
\xe
\end{document}
答案1
使用 Mico 的回答中解释的技术:
我们可以为您的案例做同样的事情。这需要使用 LuaLaTeX 进行编译。
笔记:在我们发现需要 XeLaTeX 解决方案之前就添加了这个答案,但我将其留在这里,因为许多(但不是全部)XeLaTeX 文档也可以用 LuaLaTeX 进行编译。
这经过了简单的测试。该函数会检查开头的引号和尾随的标点符号,后面跟着一个空格,因此如果您的输入看起来像这样,它应该可以按预期工作。例如,它不会包含单词内部标点符号,例如标记元音长度的冒号。
% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{expex}
\lingset{glwordalign=center}
\usepackage{luacode}
\begin{luacode*}
function replace_punc ( buff )
if string.find ( buff , "\\gla" ) then
buff = string.gsub ( buff , " (``)" ,
"\\nogloss{%1} @ " )
buff = string.gsub ( buff, "([:.,;'!?]+)( )" ,
" @ \\nogloss{%1}%2" )
end
return ( buff )
end
luatexbase.add_to_callback ( "process_input_buffer", replace_punc, "replace_punc" )
\end{luacode*}
\begin{document}
\exdisplay
\begingl
\gla ``aaaaa aaaaaaa!?:!'' aaaa aaaa aaaa. //
\glb a bbbbbbb bbbb bbbb bbbb //
\glc ccccc ccccccc cccc cccc cccc //
\endgl
\xe
\end{document}