我不想改成\overrightarrow{}
,它使用通常的可扩展箭头并将其放在参数上方,而是想获得一个可扩展的\vec{}
符号。我的目的是获得一个新的命令\vect{}
,例如,它与 完全相同,\overrightarrow{}
但头部是符号\vec
(可扩展部分是用适当的“ \relbar
s”完成的,我不知道)。
就我而言,我正在使用kpfonts
包。
\documentclass{scrartcl}
\usepackage{kpfonts}
\newcommand*{\vv}[1]{\vec{\mkern0mu#1}}
\begin{document}
\[
\vec u,\ \vv u,\ \vv{OA},\ \vv{BC},\ \overrightarrow{AB}
\]
\end{document}
我定义了该\vv{}
命令,因为通常\vec
会给你一个未对齐的箭头。
编辑:
正如@GonzaloMedina 指出的那样,确实存在该esvect
包。但是,在我看来,它没有提供任何符合 样式的箭头kpfonts
。
答案1
这里我介绍了\xshlongvec
,它接受一个可选参数和一个强制参数。强制参数是 所要放置 的文本\vec
。可选参数是一个数字,表示应用于 vec 箭头的向右字距(以点为单位),因为正如 OP 指出的那样, 的字距调整\vec
并不是最好的。
在这个 MWE 中,我使用了kpfonts
OP 提到的。我首先给出未改变的,\vec
然后是两个实例\xshlongvec
。我注意到的一个缺陷是箭头的左端不像 那样倾斜\vec
,而是由于由 创建的而呈方形\rule
。
感谢 Phillipe 指出原始答案中的缺陷,现已修复。
\documentclass[12pt]{scrartcl}
\usepackage{kpfonts}
\usepackage{stackengine}
\usepackage{calc}
\newlength\shlength
\newcommand\xshlongvec[2][0]{\setlength\shlength{#1pt}%
\stackengine{-5.6pt}{$#2$}{\smash{$\kern\shlength%
\stackengine{7.55pt}{$\mathchar"017E$}%
{\rule{\widthof{$#2$}}{.57pt}\kern.4pt}{O}{r}{F}{F}{L}\kern-\shlength$}}%
{O}{c}{F}{T}{S}}
\begin{document}
\centering
\[ \vec{A} \quad \xshlongvec[1]{ABC} \quad \xshlongvec[1]{xyz} \xshlongvec{\Omega M} \]
\end{document}
通过使用该包,下面的已编辑解决方案可以适用于各种数学风格scalerel
。
\documentclass[12pt]{scrartcl}
\usepackage{kpfonts}
\usepackage{stackengine,scalerel}
\usepackage{calc}
\newlength\shlength
\newcommand\xshlongvec[2][0]{\ThisStyle{\setlength\shlength{#1\LMpt}%
\stackengine{-5.6\LMpt}{$\SavedStyle#2$}{\smash{$\kern\shlength%
\stackengine{\dimexpr 1.3pt+6.25\LMpt}{$\SavedStyle\mathchar"017E$}%
{\rule{\widthof{$\SavedStyle#2$}}{\dimexpr.1pt+.5\LMpt}\kern.4\LMpt}{O}{r}{F}{F}{L}\kern-\shlength$}}%
{O}{c}{F}{T}{S}}}
\begin{document}
\centering
\[ \vec{A} \quad \xshlongvec[1]{ABC} \quad \xshlongvec[1]{xyz} \quad \xshlongvec{\Omega M} \]
\[ \scriptstyle \vec{A} \quad \xshlongvec[1]{ABC} \quad \xshlongvec[1]{xyz} \quad \xshlongvec{\Omega M}\]
\[ \scriptscriptstyle \vec{A} \quad \xshlongvec[1]{ABC} \quad \xshlongvec[1]{xyz} \quad \xshlongvec{\Omega M} \]
\end{document}
答案2
命令\vec
使用\mathchar"017E
作为箭头,而\overrightarrow
使用\mathchar"3221
。在我看来,两者看起来都是彼此的缩放版本。所以我们可以用 的\overrightarrow
箭头尖端进行复制\vec
。我提出了两个版本,一个是 LaTeX 版本,另一个是遵循路线的版本amsmath
。对于amsmath
版本,我给出了另一个变体,水平缩放减号以使其更薄。
\documentclass{article}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage{kpfonts}
\newcommand*{\vv}[1]{\vec{\mkern0mu#1}}
\makeatletter
\newcommand{\vect}[1]{%
\vbox{\m@th \ialign {##\crcr
\vectfill\crcr\noalign{\kern-\p@ \nointerlineskip}
$\hfil\displaystyle{#1}\hfil$\crcr}}}
\def\vectfill{%
$\m@th\smash-\mkern-7mu%
\cleaders\hbox{$\mkern-2mu\smash-\mkern-2mu$}\hfill
\mkern-7mu\raisebox{-3.81pt}[\p@][\p@]{$\mathord\mathchar"017E$}$}
\newcommand{\amsvect}{%
\mathpalette {\overarrow@\vectfill@}}
\def\vectfill@{\arrowfill@\relbar\relbar{\raisebox{-3.81pt}[\p@][\p@]{$\mathord\mathchar"017E$}}}
\newcommand{\amsvectb}{%
\mathpalette {\overarrow@\vectfillb@}}
\newcommand{\vecbar}{%
\scalebox{0.8}{$\relbar$}}
\def\vectfillb@{\arrowfill@\vecbar\vecbar{\raisebox{-4.35pt}[\p@][\p@]{$\mathord\mathchar"017E$}}}
\makeatother
\begin{document}
\begin{align}
\mathchar"017E, \mathchar"3221\\
\vec u,\ \vv u,\ \vv{OA},\ \vv{BC},\ \overrightarrow{AB} \\
\vect{u}, \vect{OA}, \vect{BC}, \vect{AB}\\
\amsvect{u}, \amsvect{OA}, \amsvect{BC}, \amsvect{AB}\\
\amsvectb{u}, \amsvectb{OA}, \amsvectb{BC}, \amsvectb{AB}
\end{align}
\end{document}
请注意,这种使用减号和短箭头构建可扩展重音符号的方法显示了典型的 LaTeX 弱点,即这些重音符号在某些分辨率下呈现得很奇怪。raise 参数-3.81pt
是我发现的缓解此问题的最佳近似值。您可能需要对其进行调整以获得更好的结果。此外,第三个带有缩放减号的变体还有另一个参数(0.8
缩放因子),可能需要进行微调。
\overarrow@
箭头和字母之间的垂直间距由from的使用决定amsmath
,因此您获得的空间与 相同\overrightarrow
。如果我们想让它稍微低一点,我们可以制作一个新版本的并在和\overarrow@
中使用它:\amsvect
\amsvectb
\makeatletter
\def\my@overarrow@#1#2#3{\vbox{\ialign{##\crcr #1#2\crcr \noalign{\kern-\p@\nointerlineskip}$\m@th \hfil #2#3\hfil $\crcr}}}
\newcommand{\amsvect}{%
\mathpalette {\my@overarrow@\vectfill@}}
\def\vectfill@{\arrowfill@\relbar\relbar{\raisebox{-3.81pt}[\p@][\p@]{$\mathord\mathchar"017E$}}}
\newcommand{\amsvectb}{%
\mathpalette {\my@overarrow@\vectfillb@}}
\newcommand{\vecbar}{%
\scalebox{0.8}{$\relbar$}}
\def\vectfillb@{\arrowfill@\vecbar\vecbar{\raisebox{-4.35pt}[\p@][\p@]{$\mathord\mathchar"017E$}}}
\makeatother
这里的神奇数字是\kern-\p@
中的\my@overarrow
,它将箭头向内推一点。同样,这可以进行微调。请注意,这是 中已经使用的值\vect
。
答案3
我非常喜欢esvect
软件包。如果你读过文档(https://www.ctan.org/pkg/esvect),它会告诉您可以选择所需的箭头类型。默认选项是
\usepackage[d]{esvect}
尽管你不需要在序言中添加“d”。
如果选择选项“h”,则箭头看起来更像中使用的箭头\vec
。