使用 Computer Modern \int 符号,带有 txfonts 数学字体

使用 Computer Modern \int 符号,带有 txfonts 数学字体

我想使用标准\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)。

为了举出上述例子,我将其重命名largesymbolslargesymbolscmr\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)加载。

相关内容