加载 \usepackage{hyperref} 时 \mathaccent 出现问题

加载 \usepackage{hyperref} 时 \mathaccent 出现问题

这里有一个MWE

\documentclass[a4,12pt]{report}

\usepackage{amssymb}
\usepackage{amsmath}

\renewcommand{\.}[1]{\ensuremath{\mathrm{#1}}}
\newcommand{\+}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\ud}{\mathop{}\!\mathrm{d}}


%\usepackage{hyperref}

\begin{document}

Let $\.f(x) = (x+2a)^3 -27 a^2 x$, where $a\ge 0$. 
By sketching  $\.f(x)$, show that $\.f(x)\ge 0$ for~$x \ge0$. 



\end{document}

我想我已经找到问题所在了。但不确定为什么会发生这种情况。

一切都是美好的没有\usepackage{hyperref}。但是当我加载包时,它无法编译latex myfile.tex。错误消息说

请在数学模式下使用 \mathaccent 表示重音。\add@accent ...@spacefactor \spacefactor }\accent #1 #2\egroup \spacefactor ...

我正在用来latex -> dvips -> ps2pdf编译。

答案1

\newcommand如果覆盖现有命令,latex 会产生错误,其原因是为了减少这种错误发生的可能性。\.是 latex 的核心命令,不应该重新定义(除非你重新定义 latex 的所有文本处理,例如针对 unicode tex 变体而不是经典 tex 等。)重新定义它会破坏文档,即使它们没有\.明确规定:

\documentclass{article}

\begin{document}

\emph{Ġood}

\renewcommand{\.}[1]{\ensuremath{\mathrm{#1}}}


\emph{Less Ġood}

\end{document}

不产生错误但产生

在此处输入图片描述

但是如果您真的必须这样做,而简单地将命令更改为任何其他名称是不可能的,那么只需在乳胶文本处理\renewcommand\.之后移动该行\usepackage{hyperref},然后仍然中断,但 hyperref 对重音命令的检查也会被覆盖,因此添加 hyperref 不会使事情变得更糟。

\documentclass[a4paper,12pt]{report}

\usepackage{amssymb}
\usepackage{amsmath}


\newcommand{\+}[1]{\ensuremath{\mathbf{#1}}}
\newcommand{\ud}{\mathop{}\!\mathrm{d}}


\usepackage{hyperref}
\renewcommand{\.}[1]{\ensuremath{\mathrm{#1}}}% not recommended, use a different name!


\begin{document}

Let $\.f(x) = (x+2a)^3 -27 a^2 x$, where $a\ge 0$. 
By sketching  $\.f(x)$, show that $\.f(x)\ge 0$ for~$x \ge0$. 



\end{document}

在此处输入图片描述

相关内容