能否确定给定数学列表的第一个字符?

能否确定给定数学列表的第一个字符?

我仍在追求编写更好的 \widebar 命令.我可以去酒吧單個字元我已经做得很好了,但在字母组合方面我遇到了问题,例如AW\overline{AW}产生

\overline{AW} 的输出

在我看来,这并不好看:栏目向左延伸得太远;它没有考虑到倾斜度A

为了纠正这个问题,我必须能够找出命令参数的第一个字符\widebarAW这很容易,但我还想介绍以下参数:

  1. \mathcal{AW}\mathcal{A}W\mathcal{A}第一个字符在哪里),
  2. \sin x(其中直立字母s为第一个字符)
  3. \mathchar"0141A(这只是标准数学字体中的字符),
  4. \left(a^2+b^2\right)(其中 some(是第一个字符)。

也许 #4 太棘手了,因为大数(可能最终会变成一个方框而不是一个字符。当然,分数和根号不应该出现在论证的开头;就我个人而言,我不想在这样的数量上加重划线。

所以我的问题是:给定一个以字符开头的数学列表,能否找出第一个字符是什么?

答案1

这或多或少是bm重建的。它产生了

First letter A in \symsymbols
First letter A in \symsymbols
First letter s in \symoperators
First letter A in 1
First letter ( 

根据问题中给出的例子。

\documentclass{article}

\makeatletter
\def\firstchar#1{\begingroup%
\let\fcmathgroup\relax
\let\protect\@empty
\let\@typeset@protect\@empty
\let\mathop\@firstofone
\let\use@mathgroup\insert
\def\left##1{\ifx.##1\null\fi##1}%
\fc@expand#1\null\valign
\endgroup}



\def\fc@expand{\afterassignment\fc@exp@nd\count@`\a}
\def\fc@exp@nd{\afterassignment\fc@test\count@`\a}
\def\fc@test{\futurelet\@let@token\fc@test@}

\def\fc@test@{%
\let\fc@next\@empty
%\show\@let@token
\ifx\@let@token\relax
 \let\fc@next\fc@gobble
\else\ifx\@let@token\bgroup
 \let\fc@next\fc@group
\else\ifx\@let@token\use@mathgroup
 \let\fc@next\fc@usemgroup
\else\ifx\@let@token\mathgroup
 \let\fc@next\fc@mgroup
\else\ifx\@let@token\mathchar
 \let\fc@next\fc@mathchar
\else
 \let\fc@next\fc@show
\fi\fi\fi\fi\fi
\fc@next
}

\def\fc@show#1#2\valign{%
%\def\xshow{#1|||[#2]}\show\xshow
\typeout{First letter #1 %
\ifx\fcmathgroup\relax\else in \expandafter\string\fcmathgroup\fi
}
}

\def\fc@gobble#1{%
%\def\xgobble{#1}\show\xgobble
\fc@expand
}

\def\fc@group#1{%
%  \def\xgroup{#1}\show\xgroup
\fc@expand#1}

\def\fc@usemgroup#1#2#3#4{%
%  \def\xumathgroup{#1//#2//#3/#4}\show\xumathgroup
\def\fcmathgroup{#3}%
\fc@expand#4}

\def\fc@mgroup#1#2{%
%\def\xmathgroup{#1//#2}\show\xmathgroup
\def\fcmathgroup{#2}%
\fc@expand}


\def\fc@mathchar#1{%
  \afterassignment\fc@mathchar@\count@}

\def\fc@mathchar@{%
\@tempcnta\count@
\@tempcntb\count@
\divide\@tempcnta"100
\multiply\@tempcnta"100
\advance\@tempcntb-\@tempcnta
\uccode`\a\@tempcntb
\@tempcntb\@tempcnta
\divide\@tempcntb"1000
\multiply\@tempcntb"1000
\advance\@tempcnta-\@tempcntb
\divide\@tempcnta"100
\edef\fcmathgroup{\the\@tempcnta}%
\uppercase{\fc@expand a}}

\makeatother




\begin{document}

$a$

%\tracingall
$\firstchar{\mathcal{AW}}$

$\firstchar{\mathcal{A}W}$

$\firstchar{\sin x}$

$\firstchar{\mathchar"0141}$

$\firstchar{\left(a^2+b^2\right)}$
\end{document}

相关内容