我有时想使用不同的语法来写下标,而不是$u_{xx} blahblah$
像这样写
$u⎵xx blah blah$
, 甚至$u⎵xx+blah blah$
其中x
1. 中的 后面的空格或 2. 中的加号会将其踢出下标。
是否可以使用 TeX 中的一些巧妙方法来实现这一点?
-我正在使用 XeLatex
答案1
在文档中这样做确实不是一个好主意,但作为 TeX 练习,它有 pdftex 和 xetex 版本:
\documentclass{article}
\ifx\XeTeXmathchar\undefined
% E2 8E B5
\catcode"E2\active
\else
\catcode"23B5\active
\fi
\def⎵{\sb\bgroup\xcollectsub}
\def\xcollectsub{\afterassignment\collectsub\global\let\tmp= }
\def\collectsub{%
\ifcat a\tmp
\tmp\expandafter\xcollectsub
\else
\egroup\expandafter\tmp
\fi}
\begin{document}
$u⎵xx blah blah$, or even
$u⎵xx+blah blah$
\end{document}
答案2
不推荐!
“⎵” hallo bit only shows that
⎵ 在文本模式下不活跃。
代码
\documentclass{article}
\usepackage{ltxcmds}
\makeatletter
\let\qrr@openbrace={
\begingroup
\catcode`⎵=\active
\gdef ⎵{\qrr@subscript{}{}}
\gdef\qrr@subscript#1#2{%
\ltx@ifnextchar@nospace{ }{_{#1#2}}{%
\@ifnextchar+{_{#1#2}}{%
\@ifnextchar-{_{#1#2}}{%
\@ifnextchar\qrr@openbrace{\qrr@subscript@{#1#2}}{\qrr@subscript{#1#2}}}%
}%
}%
}
\gdef\qrr@subscript@#1#2{% groups the second argument
\qrr@subscript{#1}{{#2}}%
}
\endgroup
\makeatother
\mathcode`⎵="8000
\begin{document}
``⎵'' hallo \par
$u ⎵xx f⎵rz $ \par
$u ⎵xx+ x⎵rz- f⎵x\mathrm{text}x $ \par
$ f⎵x{ab \over cd}y $
\end{document}