如何将 \hat{H} 重新定义为 \hat{\cal H}?

如何将 \hat{H} 重新定义为 \hat{\cal H}?

我想重新定义\hat{H}\hat{\cal H}针对这个特定字母(物理学中的汉密尔顿符号)。非常感谢。

答案1

嗯,我猜这里有两种方法可以解决:

  • 使用编辑器的“查找和替换”工具将所有匹配的替换\hat{H}\hat{\mathcal{H}}

  • 更吸引人一点...在文档的序言中定义一个新命令,比如\newcommand*{\hham}{\hat{\mathcal{H}}}。然后使用编辑器的“查找和替换”工具将所有匹配的 替换\hat{H}\hham

MWE 将是

\documentclass{article}
\usepackage{amsmath}
\newcommand*{\hham}{\hat{\mathcal{H}}}

\begin{document}

The relation,
\[\hham\psi_n = E_n\psi_n\]
is valid for every  eigenstate $\psi_n$ of the Hamiltonian $\hham$.
\end{document}

干杯!

答案2

最简单的方法是定义一个新命令\hatH

\documentclass{article}
\newcommand*{\hatH}{\hat{\mathcal{H}}}
\begin{document}
\[ \hatH \]
\end{document}

结果

\hat由于 TeX 数学规则,对 的重新定义要复杂得多。\hat扩展为\mathaccent不会将其基数解析为“参数”,而是解析为<math field>。后者可以是数学符号或子公式。这不能以 100% 兼容的方式通过宏参数进行解析。

H近似值是以下示例,它测试或{H}遵循的情况\hat

\documentclass{article}

\makeatletter
\newcommand*{\old@hat}{}
\let\old@hat\hat
\newcommand*{\hatH}{\old@hat{\mathcal{H}}}
\renewcommand*{\hat}{%
  \@ifnextchar\bgroup{%
    \new@hat
  }{%
    \@ifnextchar H{%
      \expandafter\hatH\@gobble
    }{%
      \old@hat
    }%
  }   
}     
\newcommand*{\new@hat@H}{H}
\newcommand*{\new@hat@arg}{}
\newcommand*{\new@hat}[1]{% 
  \renewcommand*{\new@hat@arg}{#1}%
  \ifx\new@hat@arg\new@hat@H
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {% 
    \hatH
  }{%
    \old@hat{#1}%
  }%
}   
\makeatother

\begin{document}
\[ \hatH \hat H \hat{H} \hat x \hat{x} \hat{ab} \]
\end{document}

结果

相关内容