删除符号和其后的上标之间的无用空格 \top

删除符号和其后的上标之间的无用空格 \top

假设您使用的所有字体中的转置运算符 ⊤ 的形式都类似于 Computer Modern 中的拉丁字母 T。我究竟如何才能自动将 ⊤ 向左移动,并在必要时向下移动?一方面,⊤ 可以在 中稍微向左移动,$W^{\top}T^{\top}M^{\top}$但不能移动太多。另一方面,字母与后面的 ⊤ 之间的垂直和水平间距在 中$A^{\top} L^{\top} u^{\top} w^{\top}$大得可怕:

转置不同的符号

换句话说,我需要一个通用宏,比如说,\transpose{stuff}它可以自动处理将下钉符号作为内容的右上标,但不浪费空间。当然,“通用”并没有明确的定义;我们只是希望宏能为尽可能多的字体和字母完成正确的工作。(顺便说一句:已知的缓解措施使用固定水平长度 -1\mu 并且没有垂直空间变化。这对我来说还不够好。)

我尝试使用 LaTeX3 同时进行水平和垂直间距调整,但没有明显的效果。在下面的示例中,它tl_case没有按预期工作,例如,\transpose{u} 与以下内容相同u^{\top}(但不应该如此):

\tl_new:N\l_tl_lastTokenOfList
\NewDocumentCommand{\transpose}{m}{
\tl_set:Nn \l_tl_lastTokenOfList {\tl_item:nn {#1} {-1}}
  #1^{\tl_case:NnTF \l_tl_lastTokenOfList
       { {A}{\mkern-3mu\top}
         {L}{\mkern-3mu\top}
         {u}{\mkern-3mu\raisebox{-.1ex}{\top}}
         {w}{\mkern-3mu\raisebox{-.1ex}{\top}}
       }
       {}
       {\top}
     }
}

答案1

这是我的看法,这个想法是用来xstring查看输入中的最后一个字符,然后进行相应的调整。这里的优点当然是我们可以从前言中进行调整。当然,诸如此类的事情\big)不是可以用这种方法捕捉到的。

\documentclass[a4paper]{memoir}
\usepackage{xstring}

% Caveat \transpose{ A } is not allowed as we cannot see the A at the
% end because of the trailing space
\newcommand\transpose[1]{
  \begingroup
  % define more if needed
  \def\ADJa{\mkern-3mu}
  \noexpandarg
  #1^{
    \IfEndWith{#1}{A}{\ADJa}{}
    \IfEndWith{#1}{L}{\ADJa}{}
    \IfEndWith{#1}{u}{\ADJa}{}
    \IfEndWith{#1}{w}{\ADJa}{}
    \top
  }
  \endgroup
}


\begin{document}
\[
 \transpose{A}
 \transpose{L}
 \transpose{u}
 \transpose{w}
 \transpose{W}
 \transpose{T}
 \transpose{M}
\]
\end{document}

在此处输入图片描述

相关内容