在我的回答中另一个问题,我使用了一个倒置的 A 作为带删除线的 V 字符。经过一番尝试,我意识到如果该字符后面跟着下标,则这不会提供适当的字距调整,大概是因为 A 放在了旋转框中。
解决这个问题的最佳方法是使用 llap/rlap 将倒置的 A 放在零宽度框中,然后插入一个不可见的 V,这样就可以应用与常规 V 相同的字距调整。不幸的是,如果我使用\phantom{V}
,结果似乎是一个框(没有字距调整)。
是否有\phantom
类似功能可以使字符不可见/不可选择,但保持相同的字距?
编辑:我想出了一个技巧,检查以下文本是否是下标,如果是,则应用字距调整。关键部分是
\@ifnextchar_{\kern-0.17em}{}
% if the next char is "_", add negative kerning
% otherwise, do nothing
完整\Vol
命令如下
\makeatletter
\newcommand{\Vol}{\rotatebox[origin=c]{180}{\ensuremath{A}}\@ifnextchar_{\kern-0.17em}{}}
\makeatother
尽管如此,如果有更优雅的方法来保持与原始 V 的精确字距,我会很感兴趣。
答案1
您可以在需要的地方使用普通数学模式 V 和\put
水平线。它不会缩放,但可以轻松调整。
\newcommand{\Vol}{\rotatebox[origin=c]{180}{\ensuremath{A}}}
\newcommand{\volume}{\put(2,4){\line(1,0){3}}V}
但是,所需的符号实际上并不是倒置的 A,而是带有水平删除线的 V,如下所示:
因此不要\ooalign
使用没有下标的原始解,您可以\rlap
在宏中使用:
\newcommand{\volsym}{\rlap{\kern.08em--}V}
然后$\volsym_n$
会产生输出
这还有一个额外的好处,就是在雷诺传输定理中为体积元素的左侧提供了正确的间距:
使用\ooalign
:
使用\rlap
:
版本\rlap
将随尺寸缩放(\tiny
、\large
、\Huge
等),但如果音量符号出现在下标中,则需要单独的宏。Even\mathchoice
不起作用,因为它将选项与下标分开,导致相同的字距调整。
\newcommand{\volsubsym}{\rlap{\scriptsize\kern.08em--}V}
将生成正确的脚本版本。因此$M_{\volsubsym_n}$
将生成
如果(出于我无法想象的原因)你需要一个脚本大小,你可以使用
\newcommand{\volsubsubsym}{\rlap{\tiny\kern.08em--}V}
完整代码如下:
\documentclass{article}
\newcommand{\volume}{\mathop{\ooalign{\hfil$V$\hfil\cr\kern0.08em--\hfil\cr}}\nolimits}
\newcommand{\volsym}{\rlap{\kern.08em--}V}
\newcommand{\volsubsym}{\rlap{\scriptsize\kern.08em--}V}
\newcommand{\dd}{\mathrm{d}}
\begin{document}
\noindent Let $\volume_n$ represent system volume. (using \verb`\ooalign`---bad kerning)
\newline Let $V_n$ represent system volume. (math V)
\newline Let $\volsym_n$ represent system volume. (using \verb`\rlap`---correct kerning)
\bigskip
\newline As a subscript, $M_{\volsubsym_n}$ renders correctly.
\[
\frac{\dd}{\dd t}\int_{\Omega(t)}\mathbf{f}\,\dd\volume\qquad
\frac{\dd}{\dd t}\int_{\Omega(t)}\mathbf{f}\,\dd\volsym
\]
\end{document}