连字符的字距调整

连字符的字距调整

我目前正在做一件事情,它要求我在数学模式下使用单个字母后跟连字符,例如$p$-center。对于大多数字母来说,它看起来没问题。但是,如果我使用$p$$\rho$,连字符前面的空间太小了。我可以手动修复它:$p\mkern1mu$-center,但到处都这样做很烦人。

带连字符的数学模式 p

尝试了更多方法后,我发现问题出在连字符上。我使用 microtype 更改了字距:\SetExtraKerning[unit=space]{encoding=*}{-={135,0}} 这很有效,至少对于连字符来说是这样。不幸的是,它会破坏所有短破折号。每当我写字时,--它都不会再被短破折号替换。我可以用每个短破折号替换--\textendash但同样会很烦人。

有没有办法可以改变连字符的字距而不破坏破折号?

答案1

“p” 和其余的是不同的字体,第一个是斜体字体。因此,原则上缺少斜体校正。这可以在\/ 文本模式下添加,但数学模式不同。

作为解决方法,\textit可以使用在末尾自动添加斜体校正的方法。此解决方法在这里有效,因为斜体文本字体的字形“p”看起来与数学中使用的字形相同。但这取决于字体设置,一般来说并非如此。

\documentclass{article}
\begin{document}

  $p$-center

  \textit{p}-center

\end{document}

结果

答案2

如果您可以自由使用 LuaLaTeX,那么可以直接设置一个 Lua 函数,该函数会自动1mu在破折号符号前插入一定量的字距调整(例如)。

以下代码捕获所有 的实例op并且\rho后面紧跟着一个破折号字符和一个或多个字母字符。

在此处输入图片描述

% !TeX program = lualatex
\documentclass{article}

\usepackage{luacode}
\begin{luacode}
function kerndash ( s )
  return ( string.gsub ( s , "([op])%$%-(%a*)" , "%1\\mkern1mu$-%2" ) )
end
\end{luacode}
\AtBeginDocument{\directlua{luatexbase.add_to_callback 
  ( "process_input_buffer" , kerndash, "kerndash" )}}

\begin{document}
$p$-center

$\rho$-centric

$o$-adic
\end{document}

相关内容