![使用 Computer Modern \int 符号,带有 txfonts 数学字体](https://linux22.com/image/405474/%E4%BD%BF%E7%94%A8%20Computer%20Modern%20%5Cint%20%E7%AC%A6%E5%8F%B7%EF%BC%8C%E5%B8%A6%E6%9C%89%20txfonts%20%E6%95%B0%E5%AD%A6%E5%AD%97%E4%BD%93.png)
我想使用标准\int
和\gammaup
来自txfonts
包的符号。我该如何混合使用这些符号?
梅威瑟:
\documentclass{article}
\usepackage{txfonts}
\begin{document}
Not the int I like, but the gammaup I do like:
\[\int \gammaup\]
\end{document}
答案1
意外的答案:-)
该txfonts
包已过时,通常可以用newtxtext
(用于文本字体)和newtxmath
(用于数学字体,您猜对了)来替换它。但是\int
的符号newtxmath
与 Computer Modern 的符号非常相似,因此它可能适合您。以下是它们之间的比较(从左到右:txfonts
、Computer Modern 和newtxmath
):
\documentclass{article}
\usepackage{newtxtext}% For text font
\usepackage{newtxmath}
% From txfonts
\DeclareSymbolFont{largesymbolstx}{OMX}{txex}{m}{n}
\DeclareMathSymbol{\txintop}{\mathop}{largesymbolstx}{"52}
\DeclareRobustCommand\txint{\txintop\nolimits}
% From Computer Modern
\DeclareSymbolFont{largesymbolscmr}{OMX}{cmex}{m}{n}
\DeclareMathSymbol{\cmrintop}{\mathop}{largesymbolscmr}{"52}
\DeclareRobustCommand\cmrint{\cmrintop\nolimits}
\begin{document}
\[\txint \cmrint \int \gammaup\]
\end{document}
为了找到符号,需要对来源进行一些挖掘(至少我是这样做的;可能有更好的方法)。
\cmrint
符号的 Computer Modern 定义可以在fontmath.ltx
(这是初始化 LaTeX 数学字体的地方。您可以kpsewhich fontmath.ltx
在终端中运行找到该文件)。\int
在代码中搜索,您会看到它的定义如下:
\DeclareRobustCommand\int{\intop\nolimits}
这意味着\int
只是\intop\nolimits
(\nolimits
是 TeX 原语),并且\intop
上面定义如下:
\DeclareMathSymbol{\intop}{\mathop}{largesymbols}{"52}
这意味着它是从字体\mathop
的插槽号"52
(十六进制 0x52)中获取的(运算符) largesymbols
。最后,largesymbols
在开头声明字体fontmath.ltx
:
\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}
表示编码OMX
、系列cmex
、系列m
(edium)、形状n
(ormal)。
为了举出上述例子,我将其重命名largesymbols
为largesymbolscmr
和\int(op)
为\cmrint(op)
以避免冲突。
\txint
过程类似,只是fontmath.ltx
我们不会查看,而是查看txfonts.sty
(用于kpsewhich txfonts.sty
查找文件)。虽然txfonts.sty
没有重新定义\int
,所以命令和 LaTeX 原版一样,txfonts
重新定义的是largesymbols
数学字体:
\DeclareSymbolFont{largesymbols}{OMX}{txex}{m}{n}
因此,为了获取txfonts
版本,\int
我们需要声明该字体,并制作一个使用txex
而不是的单独副本cmex
:
\DeclareSymbolFont{largesymbolstx}{OMX}{txex}{m}{n} % declare a TX copy of largesymbols
\DeclareMathSymbol{\txintop}{\mathop}{largesymbolstx}{"52} % declare a TX copy of \intop that uses the above
\DeclareRobustCommand\txint{\txintop\nolimits}
\txiint
这个和上面的类似。txfonts.sty
你会发现它的\iint
定义是:
\re@DeclareMathSymbol{\iintop}{\mathop}{largesymbolsA}{33}
\def\iint{\iintop\nolimits}
它使用largesymbolsA
先前定义的:
\DeclareSymbolFont{largesymbolsA}{U}{txexa}{m}{n}
因此您可以适应(以避免\re@Declare...
该包中定义的命令):
\DeclareSymbolFont{largesymbolstxA}{U}{txexa}{m}{n}
\DeclareMathSymbol{\txiintop}{\mathop}{largesymbolstxA}{"21} % 33 (decimal) = "21 (hexadecimal)
\DeclareRobustCommand\txiint{\txiintop\nolimits}
另一种在字体中查找字形的方法是使用包fonttable
,例如{U}{txexa}{m}{n}
:
\documentclass{article}
\usepackage{fonttable}
\begin{document}
\xfonttable{U}{txexa}{m}{n}
\end{document}
输出:
显示该字体的第 33 个插槽中的双重积分字形。
\cmriint
Computer Modern 字体没有双重整数字形,因此上述方法不起作用。但还有其他选择:
amsmath
用 模拟(最多)4 个积分符号\MultiIntegral
,其定义如下:
\newcommand{\MultiIntegral}[1]{%
\edef\ints@c{\noexpand\intop
\ifnum#1=\z@\noexpand\intdots@\else\noexpand\intkern@\fi
\ifnum#1>\tw@\noexpand\intop\noexpand\intkern@\fi
\ifnum#1>\thr@@\noexpand\intop\noexpand\intkern@\fi
\noexpand\intop
\noexpand\ilimits@
}%
\futurelet\@let@token\ints@a
}
然后\iint
定义为:
\ams@newcommand{\iint}{\DOTSI\protect\MultiIntegral{2}}
但是这将使用默认\intop
字形。要更改字体,您可以创建\MultiIntegral
使用(比如说)\cmrintop
上面定义的字体的副本(甚至重新定义)。
您还可以使用esint
包,它使用 Computer Modern 字形(的克隆)定义了几种类型的积分符号。要将 Computer Modern 积分符号与其他字体包一起使用,您只需确保esint
在所有字体包之后(以及之后amsmath
)加载。