我正在尝试在 Latex 中定义一个有向上确界算子,但我无法想出一个在所有情况下都能表现良好的算子。以下是我尝试过的:
\documentclass{article}
\usepackage{amsmath}
\newcommand\dirup{\!{}^{\upset}}
\newcommand\upset{\ensuremath{\mathord{\uparrow}\mkern1mu}}
\begin{document}
$\mathop{\bigsqcup\dirup}_{i\in I}$
$$\mathop{\bigsqcup\dirup}_{i\in I}$$
$\mathop{\bigsqcup\dirup_{i\in I}}$
$$\mathop{\bigsqcup\dirup_{i\in I}}$$
$\mathop{\bigsqcup_{i\in I}}\dirup$
$$\mathop{\bigsqcup_{i\in I}}\dirup$$
\end{document}
在第一种情况下,下标会向右移动(在两种数学模式下)。在第二种情况下,内联数学模式按预期工作,但显示模式不会将下标置于上确界符号下方。最后,第三种情况在显示数学模式下按预期工作,但内联数学被破坏,因为下标\dirup
向右移动。
有什么办法可以解决这个问题吗?我可以重新定义\dirup
。
编辑:
请注意,当省略下标时,运算符也应该表现良好,例如,以下不应将集合显示\{ a \}
得太接近上确界:
$\mathop{\bigsqcup\dirup} \{ a \}$
答案1
显示文本样式、显示样式、脚本样式和脚本样式。已编辑以考虑无下标的情况。
\documentclass{article}
\usepackage{amsmath}
\usepackage{stackengine,scalerel}
\def\foo{\,\ThisStyle{\ensurestackMath{%
\bigsqcup\stackengine{-0pt}{\!}{\SavedStyle\!^{\mathord{\uparrow}}}{O}{l}{F}{T}{S}}}\,}
\DeclareMathOperator*{\foobarX}{\foo}
\newcommand\foobar{\!\foobarX}
\begin{document}
\centering$a\foobar_{i\in I}a\qquad a\foobar a$
\[a\foobar_{i\in I}a\qquad a\foobar a\]
\[\scriptstyle a\foobar_{i\in I}a\qquad a\foobar a\]
\[\scriptscriptstyle a\foobar_{i\in I}a\qquad a\foobar a\]
\end{document}
或者也许是这个轻微的变体,它被重新编辑以处理 OP 提供的特定用例。它筛选了 和\{
,[
而(
之前间距一直是个问题。
\documentclass{article}
\usepackage{amsmath}
\usepackage{stackengine,scalerel}
\def\foo{\,\ThisStyle{\ensurestackMath{%
\bigsqcup\stackengine{-0pt}{\,}{\SavedStyle\!^{\mathord{\uparrow}}}{O}{l}{F}{T}{S}}}\!}
\DeclareMathOperator*{\foobarX}{\foo}
\makeatletter
\newcommand\foobar{\!\foobarX\@ifnextchar\{{\,}{\@ifnextchar[{\,}{\@ifnextchar({\,}{}}}}
\makeatother
\begin{document}
\centering$x\foobar_i A_i\qquad x\foobar_{i\in I}A_i\qquad x\foobar A_i$
\[x\foobar_i A_i\qquad x\foobar_{i\in I}A_i\qquad x\foobar A_i\]
\[\scriptstyle x\foobar_i A_i\qquad x\foobar_{i\in I}A_i\qquad x\foobar A_i\]
\[\scriptscriptstyle x\foobar_i A_i\qquad x\foobar_{i\in I}A_i\qquad x\foobar A_i\]
$\quad \foobar \{ A_i : i\in I \}\quad \foobar [ A_i : i\in I ]\quad \foobar ( A_i : i\in I )$
\end{document}
答案2
这是一个复杂的版本,但是,嘿,它有效!
这\negphantom
宏可以在以下位置找到方程中的负幻像
\documentclass{article}
\usepackage{amsmath,mathstyle}
\makeatletter
\newlength{\negph@wd}
\DeclareRobustCommand{\negphantom}[1]{%
\ifmmode
\mathpalette\negph@math{#1}%
\else
\negph@do{#1}%
\fi
}
\newcommand{\negph@math}[2]{\negph@do{$\m@th#1#2$}}
\newcommand{\negph@do}[1]{%
\settowidth{\negph@wd}{#1}%
\hspace*{-\negph@wd}%
}
\newcommand\bigsqcupwithup{%
\ifnum\mathstyle=\z@ % displaystyle
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{%
\mathop{}\!\negphantom{{}^{\uparrow}}
\mathop{\hphantom{{}^\uparrow}{\bigsqcup}{}^{\uparrow}}%
}%
{\bigsqcup^{\scriptscriptstyle\uparrow}}%
}
\makeatother
\begin{document}
$\bigsqcupwithup_{i\in I}$
\[
A\bigsqcupwithup_{i\in I}B_i
\]
\[
A\bigsqcup_{i\in I}B_i
\]
\end{document}
不同的版本
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\newlength{\negph@wd}
\DeclareRobustCommand{\negphantom}[1]{%
\ifmmode
\mathpalette\negph@math{#1}%
\else
\negph@do{#1}%
\fi
}
\newcommand{\negph@math}[2]{\negph@do{$\m@th#1#2$}}
\newcommand{\negph@do}[1]{%
\settowidth{\negph@wd}{#1}%
\hspace*{-\negph@wd}%
}
\DeclareRobustCommand{\bigsqcupwithup}{%
\@ifnextchar_{\sub@bigsqcupwithup}{\nosub@bigsqcupwithup}%
}
\newcommand{\nosub@bigsqcupwithup}{%
\mathop{
\mathchoice
{\disp@bigsqcupwithup{}}
{\nodisp@bigsqcupwithup{\hphantom{\scriptscriptstyle\uparrow}}}
{\nodisp@bigsqcupwithup{\hphantom{\scriptscriptstyle\uparrow}}}
{\nodisp@bigsqcupwithup{\hphantom{\scriptscriptstyle\uparrow}}}
}
}
\def\sub@bigsqcupwithup_#1{%
\mathop{
\mathchoice
{\disp@bigsqcupwithup{#1}}
{\nodisp@bigsqcupwithup{#1}}
{\nodisp@bigsqcupwithup{#1}}
{\nodisp@bigsqcupwithup{#1}}
}
}
\newcommand{\disp@bigsqcupwithup}[1]{%
\negphantom{{}^\uparrow}%
{\mathop{\hphantom{{}^\uparrow}{\bigsqcup}{}^\uparrow}\limits_{#1}}%
}
\newcommand{\nodisp@bigsqcupwithup}[1]{%
\bigsqcup^{\scriptscriptstyle\uparrow}_{#1}%
}
\makeatother
\begin{document}
$\bigsqcupwithup_{i\in I}X$
$\bigsqcupwithup X$
\[
A\bigsqcupwithup_{i\in I}B_i
\qquad
A\bigsqcupwithup B_i
\]
\end{document}
答案3
由于您关心的是空白,也许\mathrlap
?
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\newcommand\dirup{\!{}^{\upset}}
\newcommand\upset{\mathrlap{\mathord{\uparrow}}}
\begin{document}
$\mathop{\bigsqcup\dirup}_{i\in I}$
\[\mathop{\bigsqcup\dirup}_{i\in I}\]
$\mathop{\bigsqcup\dirup_{i\in I}}$
\[\mathop{\bigsqcup\dirup_{i\in I}}\]
$\mathop{\bigsqcup_{i\in I}}\dirup$
\[\mathop{\bigsqcup_{i\in I}}\dirup\]
\end{document}