在 LaTeX 中自动将单个“i”大写

在 LaTeX 中自动将单个“i”大写

是否有一个包或前言命令可以自动将 LaTeX 文档文本中的所有单独的“i”大写(我使用 overleaf 来编译)?

我发现,如果不手动将 i 大写,那么编写文本会更容易,因此我希望避免这样做。

答案1

这是一个基于 LuaLaTeX 的解决方案。它提供

  1. 一个 Lua 函数lone_i完成了大部分工作(通过使用 Lua 强大的gsub字符串函数)
  2. 两个实用 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}

相关内容