水平对齐(左对齐类型)带下移/上移

水平对齐(左对齐类型)带下移/上移

我正在尝试编写类似这样的内容\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中的主内容一起使用。mathtoolsphantom

在此处输入图片描述

\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

在此处输入图片描述

相关内容