我正在尝试编写类似这样的内容\underset{\mathbb{P}}{foo}
,其中的开头foo
将与的 P 水平对齐\mathbb{P}
,即使“foo”可能很宽(比如说A \leftarrow \{0,1\} \cup \{5,6\}
)。换句话说:我正在尝试为 提供一个leftalign
选项underset
。
此外,如果此技巧可以与在中定义的宏
\oset
兼容,我会很高兴\uset
更改重叠中的垂直空间,可以控制垂直空间。
我实际上找到的唯一解决方案是手动添加水平空格,但我需要添加的空格量取决于命令中的内容underset
,因此当我需要使用大量空格时会花费大量时间。
答案1
我可以建议\lunderset
将主对象和下标之间的分隔作为可选参数(默认 1pt)。
\documentclass{article}
\usepackage{amsmath,amssymb}
\makeatletter
\DeclareRobustCommand{\lunderset}[3][1pt]{%
\binrel@{#3}%
\binrel@@{%
\vbox{%
\offinterlineskip\m@th
\ialign{##\hfil\cr$\displaystyle#3$\cr\noalign{\vskip#1}$\scriptstyle#2$\cr}%
}%
}%
}
\makeatother
\begin{document}
\[
\lunderset{\mathbb{P}}{A\gets\{0,1\}\cup\{5,6\}}
\]
\[
\lunderset[0pt]{\mathbb{P}}{A\gets\{0,1\}\cup\{5,6\}}
\]
\[
\lunderset{\mathbb{P}}{f\gets\{0,1\}\cup\{5,6\}}
\]
\end{document}
如果您计划以内联方式使用它,使用\displaystyle
并不是最好的,但这需要更多的工作。
\documentclass{article}
\usepackage{amsmath,amssymb}
\makeatletter
\DeclareRobustCommand{\lunderset}[3][1pt]{%
\binrel@{#3}%
\binrel@@{\mathpalette\lunderset@{{#1}{#2}{#3}}}%
}
\newcommand{\lunderset@}[2]{\lunderset@@#1#2}
\newcommand{\lunderset@@}[4]{%
\vbox{%
\offinterlineskip\m@th
\ialign{##\hfil\cr$#1#4$\cr\noalign{\vskip#2}$\lunderset@size{#1}#3$\cr}%
}%
}
\newcommand{\lunderset@size}[1]{%
\ifx#1\displaystyle\scriptstyle\else
\ifx#1\textstyle\scriptstyle\else
\scriptscriptstyle\fi\fi
}
\makeatother
\begin{document}
\[
\lunderset{\mathbb{P}}{A\gets\{0,1\}\cup\{5,6\}}
\]
\[
\lunderset[0pt]{\mathbb{P}}{A\gets\{0,1\}\cup\{5,6\}}
\]
\[
\lunderset{\mathbb{P}}{f\gets\{0,1\}\cup\{5,6\}}
\]
\end{document}
答案2
这是一个宏\lunderset
(左下划线),它与包\mathrlap
中的主内容一起使用。mathtools
phantom
\documentclass{article}
\usepackage{amssymb, mathtools}
\newcommand{\lunderset}[2]{\underset{\mathrlap{#1}}{\mathrlap{#2}}\phantom{#2}}
\begin{document}
Some text $\lunderset{\mathbb{P}}{A \leftarrow \{0,1\} \cup \{5,6\}}$ more text
\end{document}
这与Mico 的链接解决方案对于\uset
,除非在您的用法中主要内容不应包含在 中\mathrel
。因此请使用以下命令:
\makeatletter
\newcommand{\uset}[3][0ex]{%
{\mathop{#3}\limits_{
\vbox to#1{\kern-7\ex@
\hbox{$\scriptstyle#2$}\vss}}}}
\makeatother