如何才能得到矢量上的一个点?

如何才能得到矢量上的一个点?

我想以某种方式进行组合,\vec{x}这样\dot{x}我就能得到一个 x,上面有一个矢量箭头,上面还有一个点。有什么建议吗?

答案1

那显而易见的呢$\dot{\vec{a}}$?间距有点偏离……可以通过使用esvect包(一般用于向量)并使用:

\documentclass{minimal}

\usepackage{esvect}

\begin{document}
$\dot{\vv{a}}$
\end{document}  

使用第一个解决方案的结果在左侧,使用的esvect结果在右侧:

结果


更新:
我添加了自己的一个小解决方案,具有良好的间距使用latex法线向量箭头[但需要accents包]。这可以使用命令获得\DotVec(不需要额外的\vec;代码:

\usepackage{accents}
\newcommand*{\DotVec}[1]{%
  \accentset{\mbox{\hspace{0.25ex}.}}{\ensuremath{\vec{#1}}}}  

我创建了一个文档来比较我的解决方案、“简单”latex解决方案和@Eddy_Em 的 [我希望这样可以吗?] 解决方案。代码如下:

\documentclass{minimal}

%% solution using esvect
\usepackage{esvect}

%% required for looping all letters
\usepackage{pgffor}

%% my solution using the accents package
\usepackage{accents}
\newcommand*{\DotVec}[1]{%
  \accentset{\mbox{\hspace{0.25ex}.}}{\ensuremath{\vec{#1}}}}

%% this is Eddy_Em's solution
\newsavebox{\hght}
\def\dotvec#1{\savebox{\hght}{$\vec{#1}$}\dot{\raisebox{0pt}[.8\ht\hght]{$\vec{#1}$}}}

%% this is used for a little extra vertical space in the below listing
\def\vSpacer{\vrule height 15pt width 0pt}

\begin{document}
\noindent
Order is:
\begin{verbatim*}
\dot{\vec{a}} \dot{\vv{a}} \dotvec{a} \DotVec{a}
\end{verbatim*}
For roman alphabet:\\[5pt]

\par\noindent
\foreach \l in {a,...,z} {%
    \vSpacer $\dot{\vec{\l}} \; \dot{\vv{\l}} \; \dotvec{\l} \; \DotVec{\l},\quad$
}

\par\noindent
\foreach \l in {A,...,Z} {%
    \vSpacer $\dot{\vec{\l}} \; \dot{\vv{\l}} \; \dotvec{\l} \; \DotVec{\l},\quad$
}

\end{document}  

生成的文件:

结果

放大字母a

飞涨

答案2

我是这样做的:

\newsavebox{\hght}
\def\dotvec#1{\savebox{\hght}{$\vec{#1}$}\dot{\raisebox{0pt}[.8\ht\hght]{$\vec{#1}$}}}

一些解释:

  • \newsavebox{\boxname}定义一个“保存框”——一个可以包含任何用于预处理的框(例如,输出之前的每一页\box255);
  • \savebox{\boxname}{text}放入text盒子里\boxname,我们将我们的向量放在那里;
  • 然后我们需要在其上添加一个点(\dot),但为了避免点和矢量之间有太大间隙,我们将矢量的高度“减少”20%(\raisebox不仅“提升”其内容,还可以改变其高度和深度)。

这里我们只使用了来测量向量的高度,但在参数中我们可以写入\savebox而不是向量本身。这样可能会更快,因为 latex 不需要再次处理这个盒子——它只会使用一个现成的盒子。\raisebox\usebox{\hght}

相关内容