可扩展的成对分隔符,下标可作为前标和后标

可扩展的成对分隔符,下标可作为前标和后标

我正在尝试定义一个命令,根据表单上的输入\mydef{pre}{main}{post},给出类似于的输出:

1

(其中“foo”和“bar”仅供参考,里面的分数用于提供高输入。)也就是说,我想要一个成对的分隔符,其中前言和后记的参数作为下标。我想要一个未缩放的默认版本,最好是一个根据自动缩放的带星号的版本main,但前言与后记对齐。以上内容由以下内容生成:

\documentclass{article}

\usepackage{mathtools}

\DeclarePairedDelimiterXPP{\mydef}[3]{_{#1}}{[}{]}{_{#3}}{#2}

\begin{document}

\[
    foo \mydef*{pre}{\frac{main}{main}}{post} bar
\]

\end{document}

我认为\DeclarePairedDelimiterXPP提供的命令mathtools是一个好的开始,但我似乎无法让处方正确对齐。

同一个包提供的命令\prescript可能会有用,但如果您要推荐它,请记住它会将下标呈现为好像有上标一样,而我不想要这样:

\documentclass{article}

\usepackage{mathtools}

\begin{document}

\[
    {}_{pre} main \quad \prescript{}{pre}{main} \quad {}_{pre}^{} main
\]

\end{document}

3

所以我想找到解决这个问题的方法。

答案1

这是一种相当严厉的方法。

显示了两种方法。第一种 ——“显而易见”的方法 —— 不起作用。我还没弄清楚为什么。

重点是\displaystyle在构建盒子时要指定的要求。我最初未能应用这一点,并且预脚本设置得太高。在我意识到问题所在之后,我尝试在两个地方修复它。不幸的是,应用幻影的尝试失败了。

\documentclass{article}

\usepackage{mathtools}

\DeclarePairedDelimiter{\mydefa}{[}{]}

\newcommand{\mydef}[3]{%
  \vphantom{\displaystyle\mydefa*{#2}}_{#1}\mydefa*{#2}_{#3}}

\newcommand{\mydefb}[3]{%
  \setbox0=\hbox{$\displaystyle\mydefa*{#2}$}%
  \rule[-\dp0]{0pt}{\ht0} _{#1}\mydefa*{#2}_{#3}}

\begin{document}

trying to use a \verb+\vphantom+:
\[
    foo \mydef{pre}{\frac{main}{main}}{post} bar
\]

using the dimensions of the box created from the core element:
\[
    foo \mydefb{pre}{\frac{main}{main}}{post} bar
\]

\end{document}

示例代码的输出

答案2

我们\mydef只需抓住第一个括号内的内容,然后将控制权传递给\mydefA抓住真正参数的部分:

\documentclass{article}
\usepackage{mathtools}

\newcommand{\mydef}{}% initialize
\def\mydef#1#{\mydefA{#1}}
\newcommand{\mydefA}[4]{%
  \mathopen{}\mathclose{\vphantom{\mydefB#1{#3}}}_{#2}\kern-\scriptspace
  \mydefB#1{#3}_{#4}%
}
\DeclarePairedDelimiter{\mydefB}{[}{]}

\begin{document}

\[
x \mydef*{pre}{\frac{main}{main}}{post} y \mydef[\Big]{pre}{\frac{main}{main}}{post} z
\]

\end{document}

另外,也许更容易理解的是,

\documentclass{article}
\usepackage{mathtools}
\usepackage{xparse}

\NewDocumentCommand{\mydef}{sO{}mmm}{%
  \IfBooleanTF{#1}
   {\mathopen{}\mathclose{\vphantom{\mydefB*{#4}}}_{#3}\kern-\scriptspace\mydefB*{#4}_{#5}}%
   {\mathopen{}\mathclose{\vphantom{\mydefB[#2]{#4}}}_{#3}\kern-\scriptspace\mydefB[#2]{#4}_{#5}}%
}
\DeclarePairedDelimiter{\mydefB}{[}{]}

\begin{document}

\[
x \mydef*{pre}{\frac{main}{main}}{post} y \mydef[\Big]{pre}{\frac{main}{main}}{post} z
\]

\end{document}

在此处输入图片描述

相关内容