我想在子集/子集等号上方/下方写文字。有什么方法可以做到这一点而不造成任何不愉快的事情吗?即在小符号上方/下方写长文字!
答案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 命令也应该在美元之间(正如我所理解的)!