数学模式下自定义新命令,根据输入参数提供两个备选输出

数学模式下自定义新命令,根据输入参数提供两个备选输出

我编写了一些自定义命令以在 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}

在此处输入图片描述

相关内容