设置限制

设置限制

我正在尝试在 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}

在此处输入图片描述

相关内容