数式モードでも出来ないかcopilot君に相談していたらLaTeXでは難しいと言われLuaLaTeXで提案されました。
LuaLaTeXは全く分かりませんが提案されたソースだけ載せておきます。
\documentclass{article}
\usepackage{luacode}
\usepackage{amsmath}
\begin{document}
\begin{luacode}
function insert_italic_correction(head)
local current = head
while current do
if current.id == node.id("glyph") then
local char = unicode.utf8.char(current.char)
if char == "f" then
local kern = node.new(node.id("kern"))
kern.kern = 0.5 * tex.sp("1em")
node.insert_before(head, current, kern)
elseif char == "j" then
local kern = node.new(node.id("kern"))
kern.kern = tex.sp("1em")
node.insert_before(head, current, kern)
elseif char == "p" then
local kern = node.new(node.id("kern"))
kern.kern = 1.5 * tex.sp("1em")
node.insert_before(head, current, kern)
end
end
current = current.next
end
return head
end
luatexbase.add_to_callback("pre_linebreak_filter", insert_italic_correction, "insert_italic_correction")
luatexbase.add_to_callback("hpack_filter", insert_italic_correction, "insert_italic_correction")
\end{luacode}
通常モード:
[\textit{f}] [\textit{j}] [\textit{p}]
aaa \textit{f} aaa \textit{j} aaa \textit{p}
数式モード:
$(f)[f]\{f\}$
$\left( f \right) \left[ f \right]\left\{f \right\}$
\end{document}