我正在尝试定义一个命令,根据表单上的输入\mydef{pre}{main}{post}
,给出类似于的输出:
(其中“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}
所以我想找到解决这个问题的方法。
答案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}