我对重新定义命令有疑问\<
\documentclass{article}
\renewcommand{\<}{\left\langle\!\left\langle}
\renewcommand{\>}{\right\rangle\!\right\rangle}
\begin{document}
$\< qs \> $
\end{document}
编译提示我 dvi 文件没有问题。有人知道吗?
Running `LaTeX' on `tot' with ``latex -interaction=nonstopmode "\input" tot.tex''
This is pdfTeX, Version 3.1415926-1.40.10 (TeX Live 2009/Debian)
entering extended mode
LaTeX2e <2009/09/24>
Babel <v3.8l> and hyphenation patterns for english, usenglishmax, dumylang, nohyphenation, french, basque, loaded.
(./tot.tex (/usr/share/texmf-texlive/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(/usr/share/texmf-texlive/tex/latex/base/size10.clo))
! LaTeX Error: \<undefined.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.3 \renewcommand{\<}
{\left\langle\!\left\langle}
(./tot.aux) [1] (./tot.aux) )
(see the transcript file for additional information)
Output written on tot.dvi (1 page, 336 bytes).
Transcript written on tot.log.
LaTeX exited abnormally with code 1 at Tue Sep 24 14:59:35
答案1
\<
未预定义。
\documentclass{article}
\newcommand{\<}{\left\langle\!\left\langle}
\renewcommand{\>}{\right\rangle\!\right\rangle}
\begin{document}
$\< qs \> $
\end{document}
注意:\>
在 LaTeX2e 中预定义为数学跳过。
答案2
我认为您已经找到了 LaTeX 的一个错误。
错误信息应该是
! LaTeX Error: \< undefined.
如果您使用带有字母的普通命令名称,则会得到一个空格。
\renewcommand\wibble{aaa}
生产
! LaTeX Error: \wibble undefined.
有趣的是,LaTeX 2.09 做对了这一点,但我们在保存一些标记时破坏了它。
目前的定义是
\def\renew@command#1{%
\begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup
\expandafter\@ifundefined\@gtempa
{\@latex@error{\noexpand#1undefined}\@ehc}%
\relax
\let\@ifdefinable\@rc@ifdefinable
\new@command#1}
它应该是
\def\renew@command#1{%
\begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup
\expandafter\@ifundefined\@gtempa
{\@latex@error{\string#1 undefined}\@ehc}%
\relax
\let\@ifdefinable\@rc@ifdefinable
\new@command#1}
如今,可能人们都负担得起额外一个字节的内存。
LaTeX2.09定义没有这个问题:
\def\renewcommand#1{\edef\@tempa{\expandafter\@cdr\string
#1\@nil}\@ifundefined{\@tempa}{\@latexerr{\string#1\space undefined}\@ehc
}{}\@ifnextchar [{\@reargdef#1}{\@reargdef#1[0]}}
但它确实存在另一个无法重新定义的问题\@tempa
。
% Reorganised slightly so that |\renewcommand{\reserved@a}[1]{foo}|
% works. I am not sure this is worth it, as a following
% |\newcommand| would over-write the definition of |\reserved@a|.
%
% Recall that \LaTeX2.09 goes into an infinite loop with
% |\renewcommand[1]{\@tempa}{foo}| (DPC 6 October 93).
%
随后删除空格的更改似乎值得怀疑
% \changes{LaTeX2e}{1993/11/23}{Macro reimplemented and extended}
% \changes{v1.1f}{1994/05/2}{Removed surplus \cs{space} in error}
% \begin{macrocode}
答案3
线索就在错误消息中:
! LaTeX Error: \<undefined.
您不能使用\renewcommand
未定义的命令。
\<
仅在环境中定义tabbing
。因此您需要使用\newcommand
而不是\renewcommand
。但是,如果您使用tabbing
(或使用tabbing
在其定义中使用 的任何代码),则会遇到问题。