
我想讓一個字元處於活動/敏感狀態,並將其前面的字元作為某個命令的參數傳遞。我可以使用 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")}
aæ
bæ
\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}