我想定义一个命令\laxcolim
,它呈现的效果与 does 相同\varinjlim
,只是多出两个“l”,而不是一个。但我仍然希望\varinjlim
可以使用通常的命令。(同样,我想要一个与\laxlim
does 类似的命令\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}