我想以某种方式进行组合,\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}