我曾经修复过 \overline 命令来获取共轭复数,因为我认为直线的长度不能让我满意。您可能会注意到类似以下内容:
$$\overline{N}+\overline{F}+\overline{C}$$
可以通过以下方式转好:
$$\mkern3mu\overline{\mkern-3muN}
+\mkern3mu\overline{\mkern-3muF}
+\mkern2mu\overline{\mkern-2muC}$$
在这种情况下 \bar 命令没有任何好处。
我如何创建一个不涉及特定字母的命令来获得适当的线宽?
答案1
您可以尝试以下方法。它测量直立 ( ) 和普通数学字符之间的宽度差异\mathrm
。上划线设置在与直立符号大小相同的幻像框上。然后,它向右移动,并保持两个字符之间的宽度差异。它也适用于上标和下标符号
\documentclass{article}
\makeatletter
\newsavebox\tboxa
\newsavebox\tboxb
\newlength\tdima
\newcommand*{\oversymb}{\mathpalette\@oversymb}
\newcommand*{\@oversymb}[2]{%
\sbox{\tboxa}{$\m@th#1\mathrm{#2}$}%
\setbox\tboxb\null%
\ht\tboxb\ht\tboxa%
\dp\tboxb\dp\tboxa%
\wd\tboxb\wd\tboxa%
\sbox{\tboxa}{$\m@th#1{#2}$}%
\setlength\tdima{\the\wd\tboxa}%
\addtolength\tdima{-\the\wd\tboxb}%
\sbox{\tboxb}{$\m@th#1\hskip\tdima\overline{\xusebox{\tboxb}}$}%
\rlap{\usebox\tboxb}{\usebox\tboxa}}
\newcommand*{\xusebox}[1]{\mathord{{\usebox{#1}}}}
\makeatother
\begin{document}
\[\oversymb{N} + \oversymb{F} + \oversymb{C}\]
\[\oversymb{A} + \oversymb{a} + \oversymb{B} + \oversymb{b} + \oversymb{i}\]
\[x_{\oversymb{X}}\]
\end{document}
结果是