我看到了链接这里
我希望符号 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 \hat
redefined)
\newcommand\ihat{\hat{\mathrm{\i}}}
\newcommand\jhat{\hat{\mathrm{\j}}}
您可能还会发现,将 upright-with-hat 命令命名为其他名称更为实用,例如\uphat
。
如果您希望所有变量都是直立的,那么您最好加载一个执行此操作的包,例如\usepackage{eulervm}
或\usepackage[math-style=upright]{unicode-math}
。