我已将问题简化得更清楚一些。
如何在序言中添加宏来改变任何出现的模式\mathbf{foo}_{boo}
成为\mathbf{foo}_{\!boo}
例如,给定这个文件
\documentclass[12pt]{article}%
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
%---> need macro here
\begin{document}
\begin{align}
\mathbf{V}_{D} & =\mathbf{V}_{C}+\boldsymbol{\omega}_{CD}\times\mathbf{r}_{D/C}
\end{align}
But we also see that $\mathbf{V}_{D}$ can be written as
\end{document}
然后,只需修改序言,我希望生成的 PDF 就像我写的那样
\begin{document}
\begin{align}
\mathbf{V}_{\!D} & =\mathbf{V}_{\!C}+\boldsymbol{\omega}_{CD}\times\mathbf{r}_{\!D/C}
\end{align}
But we also see that $\mathbf{V}_{\!D}$ can be written as
\end{document}
仅在序言中使用宏或其他 Latex 技巧。我无法编辑文档内的代码或使用编辑器进行全局搜索/替换。
注意:我正在使用路拉泰克斯在 texlive 上编译为 pdf。
答案1
我不知道这可能会破坏多少东西:
\documentclass{article}%
\usepackage{amsmath}
\begin{document}
\begin{align}
\mathbf{V}_{D} & =\mathbf{V}_{C}+\mathbf{\omega}_{CD}\times\mathbf{r}_{D/C}
\end{align}
But we also see that $\mathbf{V}_{D}$ can be written as
\let\oldmathbf\mathbf
\makeatletter
\renewcommand{\mathbf}[1]{\oldmathbf{#1}\@ifnextchar_{\msubscript}{}}
\def\msubscript_#1{_{\!#1}}
\makeatother
\begin{align}
\mathbf{V}_{D} & =\mathbf{V}_{C}+\mathbf{\omega}_{CD}\times\mathbf{r}_{D/C}
\end{align}
But we also see that $\mathbf{V}_{D}$ can be written as
\end{document}
设置之后,我们先查看一下输入流中\mathbf{.}
是否有,以及插入 的条件。_
\!
答案2
您不想\!
在 中的每个下标后面添加\mathbf
: 的示例\mathbf{A}_{\!D}
应该足够了。
相反,定义您自己的宏并检查其参数中的最后一个或唯一字母,以决定是否添加\!
或不添加任何内容或另一个间距命令(我使用了 A、V、W 和 Y 作为示例)。上标也需要注意。
\documentclass{article}
\usepackage{amsmath}
\usepackage{xparse}
\NewDocumentCommand{\vect}{ m e{_^} }{\innervect{#1}{#2}{#3}}
\ExplSyntaxOn
\NewDocumentCommand{\innervect}{mmm}
{
\mathbf{#1}
\IfValueT{#2}% there is a subscript
{
\str_case_x:nnF { \tl_item:nn { #1 } { -1 } }
{
{V}{\sb{\!#2}}
{W}{\sb{\!#2}}
{Y}{\sb{\mspace{-1mu}#2}}
}
{\sb{#2}}
}
\IfValueT{#3}% there is a superscript
{
\str_case_x:nnF { \tl_item:nn { #1 } { -1 } }
{
{A}{\sp{\!#3}}
}
{\sp{#3}}
}
}
\ExplSyntaxOff
\begin{document}
$\vect{V}_{D}+\vect{A}_{D} \mid \mathbf{V}_{D}+\mathbf{A}_{D}$
$\vect{V}^{2}+\vect{A}^{2} \mid \mathbf{V}^{2}+\mathbf{A}^{2}$
$\vect{V}_{D}^{2}+\vect{A}_{D}^{2} \mid
\mathbf{V}_{D}^{2}+\mathbf{A}_{D}^{2}$
\end{document}