我编写了一些自定义命令以在 mathmode 中使用。该命令基本上纠正了左侧子标和上标的样式。它决定哪个脚本最长,并将最短的脚本右对齐。该命令有时有效,但有时会失败,并在日志文件中显示错误消息。
我附加了我的 .tex 文档和输出 .pdf 的基本示例
\documentclass{article}
\usepackage{tikz}
\usepackage{amsmath}
\usepackage{mathtools}
\newlength{\ArgOne}
\newlength{\ArgTwo}
\makeatletter
\newcommand*{\stripunit}[1]{\strip@pt#1}
\makeatother
\newcommand{\Tes}[5]{
\settowidth{\ArgOne}{#2} \settowidth{\ArgTwo}{#3}
\ifdim \stripunit{\ArgOne} pt>\stripunit{\ArgTwo} pt
{}_{#2}^{\mathmakebox[\stripunit{\ArgOne} pt]{\hfill#3}}#1_{#4}^{#5}
\else
{}_{\mathmakebox[\stripunit{\ArgTwo} pt-4pt]{\hfill#2}}^{#3}#1_{#4}^{#5}
\fi
}
\begin{document}
Regular expressions:
${}_{j+1}^{k}{K}_{l}^{m}$\;\;\;\;\;${}_{j}^{k+1}{K}_{l}^{m}$
Using custom command:
$\Tes{K}{j+1}{k}{l}{m}$\;\;\;\;\;$\Tes{K}{j}{k+1}{l}{m}$
\end{document}
这是没有错误时的输出 pdf
当编译失败时我收到消息:
缺少$插入行#(使用我的命令的第一行)
答案1
\par
错误是由开头的空行(将转换为 )引起的\Tes
:
\newcommand{\Tes}[5]{
\settowidth{\ArgOne}{#2}
% ...
}
而且没有必要先剥离pt
然后再添加回去。
\documentclass{article}
\usepackage{mathtools}
\newlength{\ArgOne}
\newlength{\ArgTwo}
\newcommand{\Tes}[5]{
\settowidth{\ArgOne}{#2}
\settowidth{\ArgTwo}{#3}
\ifdim\ArgOne>\ArgTwo
{}_{#2}^{\mathmakebox[\ArgOne]{\hfill#3}}#1_{#4}^{#5}
\else
{}_{\mathmakebox[\ArgTwo-4pt]{\hfill#2}}^{#3}#1_{#4}^{#5}
\fi
}
\begin{document}
Regular expressions:
${}_{j+1}^{k}{K}_{l}^{m}$\;\;\;\;\;${}_{j}^{k+1}{K}_{l}^{m}$
\bigskip
Using custom command:
$\Tes{K}{j+1}{k}{l}{m}$\;\;\;\;\;$\Tes{K}{j}{k+1}{l}{m}$
\end{document}
答案2
我建议使用一个宏\Tes
,将右下标的相同“倾斜”复制到左侧。
\def\Tes#1#2#3#4#5{
\setbox0=\hbox{$#1_x$}
\setbox1=\hbox{$#1_x^x$}
\dimen1=\wd1 \advance\dimen1 by-\wd0
\setbox0=\hbox{$\scriptstyle#2$}
\setbox1=\hbox{$\scriptstyle#3$}
\dimen0=\wd0
\ifdim\wd1>\wd0 \dimen0=\wd1 \fi
{}_{\hbox to\dimen0{\hss \box0}}^{\hbox to\dimen0{\hss \box1\kern-\dimen1}}
#1_{#4}^{#5}
}
$\Tes{K}{j+1}{k}{l}{m}$
\bye
答案3
我不确定你为什么要去掉pt
它然后再加回去。我也不明白-4pt
。
只需测量物体并确定哪一个更长。我还添加了幻影以将上标和下标设置为相同的高度。
\documentclass{article}
\usepackage{mathtools}
\newlength{\tessup}
\newlength{\tessub}
\newcommand{\Tes}[5]{%
\settowidth{\tessub}{$\scriptstyle#2$}%
\settowidth{\tessup}{$\scriptstyle#3$}%
\ifdim\tessup>\tessub
\setlength{\tessub}{\tessup}%
\fi
\vphantom{#1}_{\mathmakebox[\tessub][r]{#2\vphantom{#4}}}%
^{\mathmakebox[\tessub][r]{#3\vphantom{#5}}}%
{#1}_{#4\vphantom{#2}}^{#5\vphantom{#3}}%
}
\begin{document}
$\Tes{K}{j+1}{k}{l}{m}$
$\Tes{K}{j}{k+1}{l}{m}$
$\Tes{\hat{K}}{j}{k+1}{l}{m}$
\end{document}