是否有一个包或前言命令可以自动将 LaTeX 文档文本中的所有单独的“i”大写(我使用 overleaf 来编译)?
我发现,如果不手动将 i 大写,那么编写文本会更容易,因此我希望避免这样做。
答案1
这是一个基于 LuaLaTeX 的解决方案。它提供
- 一个 Lua 函数
lone_i
完成了大部分工作(通过使用 Lua 强大的gsub
字符串函数) - 两个实用 LaTeX 宏
\LoneIActivate
和\LoneIDeactivate
,用于激活和停用 Lua 函数。
我所说的“激活”是指将函数分配给 LuaTeX 的process_input_buffer
回调函数,它充当输入流的预处理器,即前TeX 开始进行其通常的处理。
该函数查找输入字符串中间以及输入字符串最开始和最结束处的lone_i
“孤立”字符的实例。i
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment
\begin{luacode}
function lone_i ( s )
s = s:gsub ( "%si%s" , " I " ) -- lone "i" in interior of line
s = s:gsub ( "^i%s" , "I " ) -- at start of line
s = s:gsub ( "%si$" , " I" ) -- at end of line
return s
end
\end{luacode}
\newcommand\LoneIActivate{\directlua{luatexbase.add_to_callback(
"process_input_buffer", lone_i, "LoneI" )}}
\newcommand\LoneIDeactivate{\directlua{luatexbase.remove_from_callback(
"process_input_buffer", "LoneI" )}}
\begin{document}
%% before activation
i see you
do i see you
see you or i
i i i i i
\medskip
\LoneIActivate
i see you
do i see you
see you or i
i i i i i
\end{document}