组合矢量、重音符号和下标会产生非常糟糕的结果。
下面第一行展示了矢量和重音的组合。在第二个例子中,重音和矢量符号发生冲突。在第三个例子中,矢量符号离“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
,这里给出为\shlongvec
8^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 包。