我正在编写自己的命令,我想为每个字母定义:
\newcommand{\fletter}{\mathfrak{letter}}
但我甚至无法为我所写的信件做到这一点\renewcommand
。
是否可以为字母 i 定义该命令?
答案1
在某些情况下\renewcommand
可以安全地使用;最主要的是当我们想要修改我们已知的命令的行为时:经典的
\let\latexsection\section
\renewcommand{\section}{%
...<something to do before a section title>...
\latexsection
}
是一个经常使用的技巧。
另一种情况是
\renewcommand{\phi}{\varphi}
所以我们可以肯定,即使我们输入\phi
“打开”的形状也会被使用。
其他情况可能包括破坏我们知道的命令名称,并且绝对肯定我们不会在文档中使用。假设我们加载的包提供了一个\foo
仅在顶层使用的命令,而我们不需要它;然而,这并不值得推荐。
一位同事曾经打电话给我,问我为什么他无法在论文中排版合著者的名字,因为 LaTeX 会发出奇怪的错误消息。问题是合著者是土耳其人,他的名字中包含Ş
。
如果使用支持 的编码Ş
,TeX 看到的是\c{S}
,就像输入这个较长的组合一样。好吧,事实证明我的同事
\renewcommand{\c}{\gamma}
在他的序言中。(事实上情况\def\c{\gamma}
更糟,但效果是一样的。)
永远不能像 : 这样的 clobber 重音命令\c
例如您无法知道它们是否会用于您的参考书目。
永远不能用于\renewcommand
您不太了解的命令;当\renewcommand
它出现在从不完全可信的来源获得的代码中时,要保持怀疑。1 .如有疑问或开始收到来自 LaTeX 的奇怪错误消息,请咨询专家。
永远不能使用\renewcommand
未在 LaTeX 手册索引或“LaTeX 符号综合列表”,除非你知道恰恰你在做什么。
请注意,该命令\fi
既不在手册索引中,也不在符号列表中。
重新定义诸如
\if
、\fi
、之类的命令\box
将使处理文档变成一场充满神秘错误的噩梦,而不会得到任何合理的输出。它类似于重新定义\begin
或\end
,但更糟糕。
在某些情况下,专家可以通过以下方法找到解决棘手问题的方法本地重新定义一个原始函数,使其执行与通常预期不同的工作,但这种技巧非常危险,如果不在受控环境中进行,很容易爆炸。
1我有时认为自己是一个值得信赖的消息来源。;-)
答案2
\renewcommand
这是可能的,从某种意义上说,如果你使用而不是,你就可以做出定义,\newcommand
但它会破坏几乎所有的乳胶使用,所以我不推荐它。
即使这失败了
\documentclass{article}
\renewcommand{\fi}{\mathfrak{i}}
\begin{document}
\end{document}
答案3
不要破坏\fi
,这确实不是一个好主意,而是定义一个命令\f
(可以定义)为
\documentclass{article}
\usepackage{amsmath,amssymb}
\newcommand\f[1]{\mathfrak{#1}}
\begin{document}
$\f i$
\end{document}
然后你就可以得到你想要的数学成绩。
\newcommand
使用(而不是\def
仅仅让 )的好处\let\f\mathfrak
是,如果命令名称已被使用,它\newcommand
会警告你。当然,你也可以这样做
\newcommand\f{}
\let\f\mathfrak
然后,您会在破坏文档所需的某些内容之前收到警告,以便文档能够按预期进行编译。