使标点符号变为活动字符并将其映射到 \nogloss 宏(XeTeX)

使标点符号变为活动字符并将其映射到 \nogloss 宏(XeTeX)

这是这个答案和评论。有谁知道如何自动化\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}

代码输出

相关内容