![能否确定给定数学列表的第一个字符?](https://linux22.com/image/255388/%E8%83%BD%E5%90%A6%E7%A1%AE%E5%AE%9A%E7%BB%99%E5%AE%9A%E6%95%B0%E5%AD%A6%E5%88%97%E8%A1%A8%E7%9A%84%E7%AC%AC%E4%B8%80%E4%B8%AA%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我仍在追求编写更好的 \widebar 命令.我可以去酒吧單個字元我已经做得很好了,但在字母组合方面我遇到了问题,例如AW
。\overline{AW}
产生
在我看来,这并不好看:栏目向左延伸得太远;它没有考虑到倾斜度A
。
为了纠正这个问题,我必须能够找出命令参数的第一个字符\widebar
。AW
这很容易,但我还想介绍以下参数:
\mathcal{AW}
或\mathcal{A}W
(\mathcal{A}
第一个字符在哪里),\sin x
(其中直立字母s
为第一个字符)\mathchar"0141
A
(这只是标准数学字体中的字符),\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}