组合向量、重音符号和下标会产生不好的结果

组合向量、重音符号和下标会产生不好的结果

组合矢量、重音符号和下标会产生非常糟糕的结果。

下面第一行展示了矢量和重音的组合。在第二个例子中,重音和矢量符号发生冲突。在第三个例子中,矢量符号离“r”太远。第四个例子是通过在第二个例子中添加一些空格来修补,这是我通常使用的方法。

第二行显示通过在 \vect 命令下包含下标来组合向量和下标。我不喜欢结果,因为向量符号被移动到右侧,不再位于“r”上方。

第三行将向量和下标结合起来,将下标放在 \vect 命令之外。所有结果都不可接受。

那么,您将如何排版这些组合?是否可以集中进行排版,而不是修补组合的每个实例?

梅威瑟:

\documentclass[12pt]{scrbook}
\usepackage{amsmath}

\begin{document}

\thispagestyle{empty}
\begin{align*}
\vec{r} \; \vec{r}' \; \vec{r'} \; \vec{r}\,'\\
\vec{r_\text{g}} \; \vec{r_\text{g}}' \; \vec{r_\text{g}'} \; \vec{r_\text{g}}\,'\\
\vec{r}_\text{g} \; \vec{r}_\text{g}' \; \vec{r'}_\text{g} \; \vec{r}_\text{g}\,'
\end{align*}

\end{document}

在此处输入图片描述

答案1

我只需将箭头向后稍微移动一下:

\documentclass{article}
\usepackage{mathtools}
\DeclareRobustCommand{\zvec}[1]{%
  \mathrlap{\vec{\mkern-2mu\phantom{#1}}}#1%
}
\begin{document}
\begin{gather*}
\zvec{r} + \zvec{r}' \\
\zvec{r}_\textnormal{g} + \zvec{r}_\textnormal{g}' + \zvec{r}_\textnormal{g}''
\end{gather*}
\end{document}

在此处输入图片描述

答案2

我无法提供完全自动化的解决方案,但我在此提供的是,\shvec箭头\vec向右移动的点数由可选参数中给出的数字指定(默认值为 0)。正如您所预料的(不幸的是),在我看来,不同的字母需要不同的移位。

编辑:为了回应 OP 的后续行动,我修改了解决方案,不仅提供了原始的左右移位能力\vec,这里给出为\shvec,而且还提供了更长版本的相同能力\vec,这里给出为\shlongvec8^0 。

我还简化了之前的编码。我应该指出,虽然stackengine包中有很多快捷宏,如\stackon\stackunder等,但如果您将堆栈放入经常使用的宏中,最好只使用底层\stackengine宏。通过这样做,您可以避免重新定义包的默认配置(这意味着它不会对文档中的其他堆栈代码产生不利影响)。

\documentclass[12pt]{scrbook}
\usepackage{stackengine}
\usepackage{xcolor}
\newlength\shlength
\newcommand\shvec[2][0]{\setlength\shlength{#1pt}%
  \stackengine{-5.2pt}{$#2$}
    {\smash{$\kern\shlength\mathchar"017E\kern-\shlength$}}{O}{c}{F}{T}{S}
}
\newcommand\shlongvec[2][0]{\setlength\shlength{#1pt}%
  \stackengine{-5.2pt}{$#2$}{\smash{$\kern\shlength%
    \stackengine{4.42pt}{$\mathchar"017E$}{$-$}{O}{r}{F}{F}{L}\kern-\shlength$}}%
    {O}{c}{F}{T}{S}}
\begin{document}
\centering
\[ \vec{A}  \shvec[-.5]{r}'\shlongvec[.5]{A} \shlongvec[0]{w}\]
\end{document}

在此处输入图片描述


来自早期的编辑:

关于 行为的一个奇怪之处\shvec(需要像 egreg 或 Werner 这样的人来解释)是为什么在某些情况下,例如\shvec[0]{R}不会给出与 相同的结果\vec{R}。为了进一步研究这个问题,我创建了一个调试模式,在其中我使用红色字母而不是 来\phantom显示矢量箭头所处的位置。在 中\shvec[0]{R},红色R覆盖黑色,但显然矢量箭头不在同一个位置。也许例程\vec具有自定义的字母相关字距调整,在将字母括在 或 中时不使用\phantom\textcolor这并不意味着\shvec不能与这样的字母一起使用,它只是意味着您需要一个非零值来重新创建\vec已经完成的操作。

在此处输入图片描述

答案3

我应该使用 esvect 包。

相关内容