箭头较小的分类限值

箭头较小的分类限值

我一直不喜欢amsmath命令\varinjlim\varprojlim分类限制。箭头太大而且太占主导地位,整个东西占用了太多的垂直空间,弄乱了行距。因此,我通常会定义自己的命令,见下文,想知道它们是否可以改进并变得更强大?在当前形式中,它们使用\raisebox绝对尺寸,因此在索引中使用时会导致问题(见下图)。如何改进我的构造?

这个问题有一些有趣的解决方案,但其中一个使用 PGF,这对我来说似乎过于夸张,第二个在索引等中使用时无法正确扩展。哦,是的,还有一个名为的包halloweenmath,但我不确定我是否信任具有这样名称的包。我想我更喜欢这里的一些 TeX 大师的解决方案。

\documentclass{article}

\usepackage{amsmath,graphicx}

\makeatletter
\newcommand\dirlimformat[1]{
    \mathop{
        \smash{
            \operatorname*{#1}\limits_{
                {}
                \raisebox{.21em}[0pt][0pt]{\scalebox{.85}{$\m@th
                    \xrightarrow{%
                        \hphantom
                        {%
                            \!\!
                            \scalebox{1.17}{$\m@th
                                {\operatorname{#1}}
                            $}
                            \!\!
                        }
                    }
                $}}
            }
        }
        \vphantom{\textstyle\lim_n}
    }
}

\newcommand\invlimformat[1]{
    \mathop{
        \smash{
            \operatorname*{#1}\limits_{
                {}
                \raisebox{.21em}[0pt][0pt]{\scalebox{.85}{$\m@th
                    \xleftarrow{%
                        \hphantom
                        {%
                            \!\!
                            \scalebox{1.17}{$\m@th
                                {\operatorname{#1}}
                            $}
                            \!\!
                        }
                    }
                $}}
            }
        }
        \vphantom{\textstyle\lim_n}
    }
}
\makeatother

\newcommand\dirlim{\dirlimformat{lim}}
\newcommand\invlim{\invlimformat{lim}}

\begin{document}

\( \varinjlim X_n \) vs.\ \( \dirlim X_n \)

\( \varprojlim X_n \) vs.\ \( \invlim X_n \)

\( a^{\invlim X_n} \)

\end{document}

在此处输入图片描述

答案1

\varinjim和的定义\varptojlimamsopn.sty

\def\varinjlim{%
  \mathop{\mathpalette\varlim@{\rightarrowfill@\textstyle}}\nmlimits@
}
\def\varprojlim{%
  \mathop{\mathpalette\varlim@{\leftarrowfill@\textstyle}}\nmlimits@
}

因此箭头总是在 内\textstyle。你可以使用以下方式进行自己的定义(或更改默认定义---带有常见的警告)\scriptstyle

\documentclass{article}

\usepackage{amsmath}

\makeatletter
\newcommand\dirlim{\mathop{\mathpalette\varlim@{\rightarrowfill@\scriptstyle}}\nmlimits@}
\newcommand\invlim{\mathop{\mathpalette\varlim@{\leftarrowfill@\scriptstyle}}\nmlimits@}
\makeatother

\begin{document}

\parskip=\medskipamount

\( \varinjlim X_n \) vs.\ \( \dirlim X_n \)

\( \varprojlim X_n \) vs.\ \( \invlim X_n \)

\( a^{\varprojlim X_n} \) vs.\ \( a^{\invlim X_n} \)

\end{document}

在此处输入图片描述

当然,这不是最理想的\scriptscriptstyle;你可以添加一个\mathpalette看起来不那么糟糕的解决方法

\documentclass{article}

\usepackage{amsmath}

\makeatletter

% same as above
\newcommand\dirlimA{\mathop{\mathpalette\varlim@{\rightarrowfill@\scriptstyle}}\nmlimits@}
\newcommand\invlimA{\mathop{\mathpalette\varlim@{\leftarrowfill@\scriptstyle}}\nmlimits@}

% alternative version
\def\varlim@@#1#2{%
  \vtop{\m@th\ialign{##\cr
    \hfil$#1\operator@font lim$\hfil\cr
    \noalign{\nointerlineskip\kern1.5\ex@}
    \expandafter#2\ifx#1\scriptscriptstyle\scriptscriptstyle\else\scriptstyle\fi\cr
    \noalign{\nointerlineskip\kern-\ex@}\cr}}%
}
\newcommand\dirlimB{\mathop{\mathpalette\varlim@@\rightarrowfill@}\nmlimits@}
\newcommand\invlimB{\mathop{\mathpalette\varlim@@\leftarrowfill@}\nmlimits@}

\makeatother

\begin{document}

\parskip=\medskipamount

$\varinjlim_{\varinjlim_{\varinjlim}}$

$\dirlimA_{\dirlimA_{\dirlimA}}$

$\dirlimB_{\dirlimB_{\dirlimB}}$

\end{document}

在此处输入图片描述

答案2

您可能想要使用old-arrows。使用选项old,标准箭头不会被修改,但我们可以修补\varinjlim\varprojlim使用较小的箭头尖。

\documentclass{article}
\usepackage{amsmath}
\usepackage[old]{old-arrows}
\usepackage{xpatch}

\makeatletter
\xpatchcmd{\varinjlim}{\rightarrowfill@}{\varrightarrowfill@}{}{}
\xpatchcmd{\varprojlim}{\leftarrowfill@}{\varleftarrowfill@}{}{}
\makeatother

\begin{document}

\[
\rightarrow\varrightarrow\varinjlim_{x\in X} \quad \varprojlim_{x\in X}
\]

\end{document}

在此处输入图片描述

箭头更小:

\documentclass{article}
\usepackage{amsmath}
\usepackage[old]{old-arrows}
\usepackage{xpatch}

\makeatletter
\xpatchcmd{\varinjlim}{\rightarrowfill@}{\varrightarrowfill@}{}{}
\xpatchcmd{\varinjlim}{\textstyle}{\scriptstyle}{}{}
\xpatchcmd{\varprojlim}{\leftarrowfill@}{\varleftarrowfill@}{}{}
\xpatchcmd{\varprojlim}{\textstyle}{\scriptstyle}{}{}
\makeatother

\begin{document}

\[
\varinjlim_{x\in X} \quad \varprojlim_{x\in X}
\]

\end{document}

在此处输入图片描述

相关内容