我想自动...mathrm

我想自动...mathrm

我看到了链接这里

我希望符号 i (斜体)通过代码自动转换为“直”

\AtBeginDocument{\renewcommand{\hat}[1]{\hat{\mathrm{#1}}}}

但它不起作用,请帮助我:(

非常感谢!

答案1

我不确定你为什么要这么做。无论如何,这是代码。

\documentclass{article}
\usepackage{amsmath}

\NewCommandCopy{\latexhat}{\hat}

\ExplSyntaxOn
\RenewDocumentCommand{\hat}{m}
 {
  \latexhat
   {
    \str_case:nnF { #1 }
     {
      {i}{\mathchar16}
      {j}{\mathchar17}
     }
     {% other cases
      \mathrm{#1}
     }
   }
 }
\ExplSyntaxOff

\begin{document}

$\hat{a}+\hat{i}+\hat{j}+\hat{z}$

\end{document}

但是,您应该使用语义命令,比如说\vrs(对于 versor),而不使用 clobbering \hat

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn
\NewDocumentCommand{\vrs}{m}
 {
  \hat
   {
    \str_case:nnF { #1 }
     {
      {i}{\mathchar16}% dotless i
      {j}{\mathchar17}% dotless j
     }
     {% other cases
      \mathrm{#1}
     }
   }
 }
\ExplSyntaxOff

\begin{document}

$\vrs{a}+\vrs{i}+\vrs{j}+\vrs{z}$

\end{document}

在此处输入图片描述

注意:无点 i 和 j 的代码在标准中有效pdflatex,可能需要针对某些数学字体包进行调整;它们肯定是错误的unicode-math;在这种情况下,请使用

\documentclass{article}
\usepackage{amsmath}
\usepackage{unicode-math}

\ExplSyntaxOn
\NewDocumentCommand{\vrs}{m}
 {
  \hat
   {
    \str_case:nnF { #1 }
     {
      {i}{\symrm{^^^^0131}}% dotless i
      {j}{\symrm{^^^^0237}}% dotless j
     }
     {% other cases
      \symrm{#1}
     }
   }
 }
\ExplSyntaxOff

\begin{document}

$\vrs{a}+\vrs{i}+\vrs{j}+\vrs{z}$

\end{document}

答案2

如果您确实想要重新定义该\hat命令,以便所有带帽子的变量(且只有那些变量)都是直立的,则您需要\hat在重新定义它之前保存原始命令。

\documentclass{article}

\let\oldhat\hat
\AtBeginDocument{\renewcommand{\hat}[1]{\oldhat{\mathrm{#1}}}}

\begin{document}
\[ \hat{i}
\]
\end{document}

如果您希望帽子取代 i 或 j 上的点,则不会,因此您需要定义将重音放在无点字母上的命令,例如 (without \hatredefined)

\newcommand\ihat{\hat{\mathrm{\i}}}
\newcommand\jhat{\hat{\mathrm{\j}}}

您可能还会发现,将 upright-with-hat 命令命名为其他名称更为实用,例如\uphat

如果您希望所有变量都是直立的,那么您最好加载一个执行此操作的包,例如\usepackage{eulervm}\usepackage[math-style=upright]{unicode-math}

相关内容