创建 \varinjlim 的变体,而无需重新定义 \varinjlim 本身

创建 \varinjlim 的变体,而无需重新定义 \varinjlim 本身

我想定义一个命令\laxcolim,它呈现的效果与 does 相同\varinjlim,只是多出两个“l”,而不是一个。但我仍然希望\varinjlim可以使用通常的命令。(同样,我想要一个与\laxlimdoes 类似的命令\varprojlim,但多了一个“l”。)

我尝试修改此解决方案更改为以下内容:

\documentclass[ a4paper, leqno]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amssymb, amsfonts, mathtools}

\makeatletter\def\varlim@#1#2{%
\vtop{\m@th\ialign{##\cr
\hfil$#1\operator@font llim$\hfil\cr
\noalign{\nointerlineskip\kern1.5\ex@}#2\cr
\noalign{\nointerlineskip\kern-\ex@}\cr}}%
}
\makeatother

\begin{document}

\[ \varinjlim( E_{α},f_{α\,β}),\quad\varprojlim( E_{α},f_{β\,α}),\]%

\end{document}​ 

除了它改变了命令本身之外,结果看起来很棒\varinjlim,而我需要通常的\varinjlim命令和我修改后的命令都可以使用。

为了解决这个问题,我做了以下更改。我实际上不知道我在做什么,但目的是定义一个新命令\varllim而不是覆盖\varlim命令,然后复制 的通常定义\varinjlim,但用\varllim代替\varlim

\documentclass[ a4paper, leqno]{article}

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{amssymb, amsfonts, mathtools}

\makeatletter\def\varllim@#1#2{%
\vtop{\m@th\ialign{##\cr
\hfil$#1\operator@font llim$\hfil\cr
\noalign{\nointerlineskip\kern1.5\ex@}#2\cr
\noalign{\nointerlineskip\kern-\ex@}\cr}}%
}
\makeatother

\def\laxcolim{%
  \mathop{\mathpalette\varllim@{\rightarrowfill@\textstyle}}\nmlimits@
}
\def\laxlim{%
  \mathop{\mathpalette\varllim@{\leftarrowfill@\textstyle}}\nmlimits@
}

\begin{document}

\[ \varinjlim( E_{\alpha},f_{\alpha\,\beta}),\quad\varprojlim( E_{\alpha},f_{\beta\,\alpha}),\]%
\[ \laxcolim( E_{\alpha},f_{\alpha\,\beta}),\quad\laxlim( E_{\alpha},f_{\beta\,\alpha}),\]%
\end{document}​

我收到一条错误消息,提示这\varllim是一个未定义的控制序列。我想我遗漏了一些非常基本的东西!

答案1

与其重新实现整个事情,不如做几个补丁更简单:

\documentclass[ a4paper, leqno]{article}
\usepackage{amsmath}
\usepackage{xpatch}

\NewCommandCopy{\laxcolim}{\varinjlim}
\makeatletter
\NewCommandCopy{\varllim@}{\varlim@}
\xpatchcmd{\laxcolim}{\varlim@}{\varllim@}{}{}
\xpatchcmd{\varllim@}{lim}{llim}{}{}
\makeatother

\begin{document}

\[
\varinjlim( E_{\alpha},f_{\alpha\,\beta}),
\quad
\laxcolim( E_{\alpha},f_{\beta\,\alpha}),
\]

\end{document}

在此处输入图片描述

另一种可能的策略:

\documentclass[ a4paper, leqno]{article}
\usepackage{amsmath}

\makeatletter
\newcommand{\genericinjlim}[1]{%
  \mathop{\mathpalette\varlim@{{#1}{\rightarrowfill@\textstyle}}}\nmlimits@
}
\def\varlim@#1#2{\varlim@@#1#2}
\def\varlim@@#1#2#3{%
  \vtop{\m@th\ialign{##\cr
    \hfil$#1\operator@font #2$\hfil\cr
    \noalign{\nointerlineskip\kern1.5\ex@}#3\cr
    \noalign{\nointerlineskip\kern-\ex@}\cr}}%
}
\makeatother

\renewcommand{\varinjlim}{\genericinjlim{lim}}
\newcommand{\laxcolim}{\genericinjlim{llim}}

\begin{document}

\[
\varinjlim( E_{\alpha},f_{\alpha\,\beta}),
\quad
\laxcolim( E_{\alpha},f_{\beta\,\alpha}),
\]

\end{document}

你可以用以下方法补充

\newcommand{\genericprojlim}[1]{%
  \mathop{\mathpalette\varlim@{{#1}{\leftarrowfill@\textstyle}}}\nmlimits@
}

对于射影极限。

为了获得更好的箭,可以使用old-arrows

\documentclass[a4paper,leqno]{article}
\usepackage{amsmath}
\usepackage[old]{old-arrows}

\makeatletter
\newcommand{\genericinjlim}[1]{%
  \mathop{\mathpalette\varlim@{{#1}{\varrightarrowfill@\textstyle}}}\nmlimits@
}
\newcommand{\genericprojlim}[1]{%
  \mathop{\mathpalette\varlim@{{#1}{\varleftarrowfill@\textstyle}}}\nmlimits@
}
\def\varrightarrowfill@{\arrowfill@\relbar\relbar\varrightarrow}
\def\varleftarrowfill@{\arrowfill@\varleftarrow\relbar\relbar}

\def\varlim@#1#2{\varlim@@#1#2}
\def\varlim@@#1#2#3{%
  \vtop{\m@th\ialign{##\cr
    \hfil$#1\operator@font #2$\hfil\cr
    \noalign{\nointerlineskip\kern1.5\ex@}#3\cr
    \noalign{\nointerlineskip\kern-\ex@}\cr}}%
}
\makeatother

\renewcommand{\varinjlim}{\genericinjlim{lim}}
\renewcommand{\varprojlim}{\genericprojlim{lim}}
\newcommand{\laxcolim}{\genericinjlim{llim}}

\newcommand{\elts}{\genericinjlim{\mathsf{elts}}}

\begin{document}

\[
\varinjlim( E_{\alpha},f_{\alpha\,\beta})
\quad
\laxcolim( E_{\alpha},f_{\beta\,\alpha})
\quad
\varprojlim( E_{\alpha},f_{\beta\,\alpha})
\quad
\elts(F)
\]

\end{document}

在此处输入图片描述

相关内容