將前面的字元傳遞給命令 LuaLaTeX

將前面的字元傳遞給命令 LuaLaTeX

我想讓一個字元處於活動/敏感狀態,並將其前面的字元作為某個命令的參數傳遞。我可以使用 LuaLaTeX 引擎來做到這一點luacode包來做到這一點。謝謝郵政。

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function myligs ( s )
   s = unicode.utf8.gsub ( s , '(\\?)([%a@]+)' , function( backslash, text )
       if backslash=='' then 
           text = unicode.utf8.gsub(text, '(.)(æ)', '%1%\\textbf{%1}' )  
       end
       return backslash .. text
   end)
   return s
end
\end{luacode}

\begin{document}
\directlua{luatexbase.add_to_callback("process_input_buffer", myligs, "myligs")}

\end{document}

但這似乎不適用於依賴的變音符號。請參閱以下範例 -

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode}
function myligs ( s )
   s = unicode.utf8.gsub ( s , '(\\?)([%a@]+)' , function( backslash, text )
       if backslash=='' then 
           text = unicode.utf8.gsub(text, '(.)(◌́)', '%1%\\textbf{%1}' )  
       end
       return backslash .. text
   end)
   return s
end
\end{luacode}

\begin{document}
\directlua{luatexbase.add_to_callback("process_input_buffer", myligs, "myligs")}

a◌́
\end{document}

可能依賴變音符號的解釋方式與普通字元不同。有人可以解釋一下第二個程式碼到底有什麼問題嗎?我希望這兩個程式碼的輸出相同,即aa第二個程式碼a是粗體的。

答案1

從屬變音符號有些特殊;我假設它們永遠不會出現在 LaTeX 命令和環境的名稱中。如果此假設正確,則無需在程式碼中使用兩階段 gsub 程序。

以下代碼假定緊鄰從屬變音符號之前的字元是字母字元 ( %a)。

在此輸入影像描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode}
\begin{luacode}
function makebold ( s )
   return ( unicode.utf8.gsub ( s , '(%a)◌́' , '%1\\textbf{%1}' ) )
end
\end{luacode}

\begin{document}
a◌́

% Assign 'makebold' to 'process_input_buffer' callback:
\directlua{luatexbase.add_to_callback("process_input_buffer", makebold, "makebold")}

a◌́
\end{document}

相關內容