我想\span
成为一名数学操作员(跨度一组向量),但显然它已经是一个 TeX 命令了。你们建议我做什么呢?(我真的不想要一个奇怪的大写字母\Span
,或者其他奇怪的变体……但我猜重新定义不是一个好主意\span
?)
答案1
是的,这是个坏主意:\span
是一个在 中使用的原始命令\multicolumn
。
实际上\span
在 LaTeX 内核中只出现一次,因此可以说
\makeatletter
\let\@@span\span
\def\sp@n{\@@span\omit\advance\@multicnt\m@ne}
\makeatother
\renewcommand{\span}{...}
但其他包可能依赖于 的原始含义\span
。如果你喜欢冒险……
确实有一个重要的包依赖\span
它数学,它在其最重要的例程之一中使用该原语。当 LaTeX3 发布时,所有原语命令都将获得新名称,并且 LaTeX3 包将不再使用\span
;在此之前,请选择其他名称,例如\Span
或\vspan
。
答案2
由于\span
已经是一个成熟的宏,因此在新的命令中重新使用该词不是一个好主意。\spn
和\Span
作为 的替代品真的那么糟糕吗\span
? 以下 MWE 使用了amsmath
包及其DeclareMathOperator
命令,说明了 宏的用法\spn
:
\documentclass{article}
\usepackage{amsmath,amsfonts}
\DeclareMathOperator{\spn}{span}
\renewcommand{\vec}[1]{\mathbf{#1}}
\begin{document}
Let $\vec{e}_i = (0,\dots,0,1,0,\dots,0)'$ be an $n\times 1$ column
vector with $1$ in the $i$-th position and $0$ in all others. Then
$\spn\{\vec{e}_1,\vec{e}_2,\dots,\vec{e}_n\} = \mathbb{R}^n$.
\end{document}
答案3
考虑使用spann
或spanset
,我更喜欢后者使用一个简短的宏。
\documentclass{article}
\usepackage{amsmath,amsfonts}
\DeclareMathOperator{\spann}{span}
\newcommand\spanset[1]{\ensuremath\spann(#1)}
\begin{document}
\[
\spann(S) = \spann(v_1,\dots,v_r) = \{ {\lambda _1 v_1 + \dots + \lambda _r v_r \mid \lambda _1 , \dots ,\lambda _r \in \mathbf{K}} \}
\]
\[
\spanset{S}=\spanset{v_1,\dots,v_r}= \{ {\lambda _1 v_1 + \dots + \lambda _r v_r \mid \lambda _1 , \dots ,\lambda _r \in \mathbf{K}} \}
\]
\end{document}
答案4
\operatorname{span}
效果很好。