有任何像 \xlongequal 这样的用于子集的命令吗?

有任何像 \xlongequal 这样的用于子集的命令吗?

我想在子集/子集等号上方/下方写文字。有什么方法可以做到这一点而不造成任何不愉快的事情吗?即在小符号上方/下方写长文字!

答案1

可能\xleftarrow通过使用由剪切符号组成的可重复项来重现其工作原理\subseteq

\documentclass{article}
\usepackage{amsmath}
\usepackage{trimclip}

\makeatletter
\newcommand{\joinsubseteq}{%
  \mathrel{\hbox{\clipbox{{0.45\width} 0 0 0}{$\m@th\subseteq$}}}%
}
\newcommand{\xsubseteq}[2][]{%
  \ext@arrow 3095 \subseteqfill@{#1}{#2}%
}
\newcommand{\subseteqfill@}{\arrowfill@\subseteq\joinsubseteq\joinsubseteq}
\newcommand{\joinsupseteq}{%
  \mathrel{\hbox{\clipbox{0 0 {0.45\width} 0}{$\m@th\supseteq$}}}%
}
\newcommand{\xsupseteq}[2][]{%
  \ext@arrow 0359 \supseteqfill@{#1}{#2}%
}
\newcommand{\supseteqfill@}{\arrowfill@\joinsupseteq\joinsupseteq\supseteq}
\makeatletter

\begin{document}

$A \xsubseteq{\text{some long text}} B$

$A \xsupseteq{\text{some long text}} B$

\end{document}

我担心结果会非常糟糕。

在此处输入图片描述

一些背景知识

和命令基于一个通用命令构建,\xleftarrow该命令带有七个参数。前四个参数是与间距相关的数字:“箭头”必须超出上方或下方文本的多少,以及为了不与箭头尖冲突而进行的修正;在这里我只是从箭头的代码中复制了它们,因为我们不希望文本位于弯曲部分的上方。第五个参数是一个从各个部分构建箭头的命令,见下文。第六个和第七个参数分别是要位于下方和上方的文本。\xrightarrow\ext@arrow

接下来的任务是构建“箭头”。标准箭头是用\rightarrowfill@和完成的\leftarrowfill@,所以我查看了它们的定义。例如,我们发现

% amsmath.sty, line 974:
\def\leftarrowfill@{\arrowfill@\leftarrow\relbar\relbar}

所以这个宏是建立在另一个通用宏之上的,即\arrowfill@

% amsmath.sty, line 968:
\def\arrowfill@#1#2#3#4{%
  $\m@th\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip
   \relax#4#1\mkern-7mu%
   \cleaders\hbox{$#4\mkern-2mu#2\mkern-2mu$}\hfill
   \mkern-7mu#3$%
}

别担心,我们不需要理解这一点,只要知道它做了正确的事情即可。\arrowfill@需要四个参数,但第四个参数将由 提供,\ext@arrow并不重要。重要的是它必须跟在三个主要标记后面:开始、转发器和结束。它\arrowfill@负责用转发器填充所需的空间。

因此宏\xleftrightarrow最终会调用\arrowfill@\leftarrow\relbar\rightarrow,而\xleftarrow调用\arrowfill@\leftarrow\relbar\relbar

\relbar宏从减号构建一个关系符号,用作扩展器。在我们的例子中,我们需要剪切符号\subseteq以删除弯曲部分;这将与起始符号适当连接。要查看具体内容\clipbox,请查看 的文档trimclip

答案2

我现在找到了这个 hack。但我认为如果文本很长,它看起来仍然很丑。

\resizebox{ 4ex }{ 2ex } { $\subseteq$ }

即使 \resizebox 命令本身是数学模式环境的一部分,\subseteq 命令也应该在美元之间(正如我所理解的)!

相关内容