我想让一个字符变为活动/敏感字符,并将其前面的字符作为某个命令的参数传递。我可以使用 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}