假设您使用的所有字体中的转置运算符 ⊤ 的形式都类似于 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}