我知道这个问题听起来很危险,就像在征求意见,但我还是试了一下。因为我从来没有用过“下点重音符”,所以\d
我把它重新命名为数学模式中的微分
\renewcommand*{\d}{\mathop{}\!\mathrm{d}}
出于可移植性考虑,我决定稍微改变一下,以保留文本模式下的原意,写作
\let\originald\d
\renewcommand*{\d}{\relax\ifmmode\mathop{}\!\mathrm{d}\else\d\fi}
这不起作用,因为文本模式下的下划线位置很糟糕。然后我尝试了以下构造(现在在 MWE 中)
\documentclass{article}
\let\originald\d
\makeatletter
\renewcommand*{\d}{\relax\ifmmode\mathop{}\!\mathrm{d}\expandafter\@gobble\else\expandafter\@firstofone\fi\originald}
\makeatother
\begin{document}
Compare \d{x} with $\d{x}$.
\end{document}
看起来运行正常。
我的问题是:这种结构是否仍然会失效?或者可能有更好的方法?或者这只是一个非常糟糕的想法,我在任何情况下都不应该使用?;-)
答案1
不久前我得到了这个
\usepackage{etoolbox}
\letcs\originald{\encodingdefault\string\d}
\DeclareRobustCommand*\d
{\ifmmode\mathop{}\!\mathrm{d}\else\expandafter\originald\fi}
而且,没有\letcs
\expandafter\let\expandafter\originald\csname\encodingdefault\string\d\endcsname
\DeclareRobustCommand*\d
{\ifmmode\mathop{}\!\mathrm{d}\else\expandafter\originald\fi}
我不知道它是否有效,但我没有编造它:) 也许它\def
比\let
宏更好\originald
?