我在 LaTeX 文档中使用 Fourier 字体,但我需要的是 Computer Modern 右箭头,而不是 Fourier 提供的 \rightarrow。
例如,我需要
代替:
我尝试使用 \DeclareMathSymbol 但没有成功并且完全陷入困境 - 任何帮助都将不胜感激!
答案1
一旦你知道如何做,这非常简单。;-)
\documentclass{article}
\usepackage{fourier}
\usepackage{amsmath}
% load the CM symbol font
\DeclareSymbolFont{arrows}{OMS}{cmsy}{m}{n}
% change the arrows to be taken from the CM symbol font
\DeclareMathSymbol{\leftrightarrow}{\mathrel}{arrows}{"24}
\DeclareMathSymbol{\leftarrow}{\mathrel}{arrows}{"20}
\let\gets=\leftarrow
\DeclareMathSymbol{\rightarrow}{\mathrel}{arrows}{"21}
\let\to=\rightarrow
\DeclareMathSymbol{\mapstochar}{\mathrel}{arrows}{"37}
% the bar for making longer arrows
\DeclareMathSymbol{\relbardash}{\mathbin}{arrows}{"00}
\DeclareRobustCommand\relbar{%
\mathrel{\smash\relbardash}% \smash, because - has the same height as +
}
\begin{document}
$X\to Y\gets Z$
$X\longrightarrow Y\longleftarrow Z$
$x\mapsto f(x)$
$X\xrightarrow{aaaaaaaaa}Y$
\end{document}
如何找到这个解决方案?这里有一个方法。
我们知道我们需要一个新的数学符号字体,将要修改的箭头分配给它。所以我查看了fontmath.ltx
包含标准分配的文件。在那里我找到了这一行
\DeclareSymbolFont{symbols}{OMS}{cmsy}{m}{n}
并为符号字体指定一个新名称(我选择了arrows
)。然后我查找\rightarrow
、\leftarrow
和\mapstochar
,它们是所需箭头的基本成分,并通过更改为复制相应的行symbols
。arrows
我还输入了两个\let
指令,以确保别名\to
和\gets
指向重新定义的符号。
\longrightarrow
关于和 的问题不太容易\longleftarrow
。它们是通过将减号和箭头粘贴在一起而构建的:
\DeclareRobustCommand{\longrightarrow}{\relbar\joinrel\rightarrow}
\DeclareRobustCommand{\longlefttarrow}{\leftarrow\joinrel\relbar}
我们还需要改变\relbar
,因为\joinrel
只是负间距。现在,fontmath.ltx
我们发现
\DeclareRobustCommand\relbar{%
\mathrel{\smash-}% \smash, because -has the same height as +
}
我们发现了一个问题。这个定义使用了减号,但我们不想改变来自 Fourier 字体的减号。所以我找到了以下行-
:
\DeclareMathSymbol{-}{\mathbin}{symbols}{"00}
并定义一个具有相同属性的新符号;最后,我重新声明\relbar
使用它来代替减号:
% the bar for making longer arrows
\DeclareMathSymbol{\relbardash}{\mathbin}{arrows}{"00}
\DeclareRobustCommand\relbar{%
\mathrel{\smash\relbardash}% \smash, because - has the same height as +
}
可以对其他符号字体执行类似操作,通过查看样式文件,其中定义了符号与三元组“数学类型+数学字体+插槽”的对应关系。