使用電腦現代 \int 符號,帶有 txfonts 數學字體

使用電腦現代 \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

符號的電腦現代定義可以在fontmath.ltx(這是 LaTeX 數學字體初始化的地方。您可以透過kpsewhich fontmath.ltx在終端機中運行找到該檔案)找到。\int在程式碼中搜尋你會發現它的定義是:

    \DeclareRobustCommand\int{\intop\nolimits}

這意味著它\int只是\intop\nolimits\nolimits是一個 TeX 原語),並且\intop在上面定義為:

\DeclareMathSymbol{\intop}{\mathop}{largesymbols}{"52}

這意味著它是從字體的槽號(十六進制 0x52)\mathop中獲取的(運算符)。最後,字體在開頭聲明:"52largesymbolslargesymbolsfontmath.ltx

\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}

這意味著編碼OMX,家庭cmex,系列m(edium),形狀n(ormal)。

為了製作上面的範例,我只是將其重命名largesymbolslargesymbolscmr\int(op)to\cmrint(op)以避免衝突。

\txint

這個過程是類似的,只不過fontmath.ltx我們不是查看txfonts.sty(使用kpsewhich txfonts.sty來查找文件)。雖然txfonts.sty沒有重新定義\int,所以的定義命令和LaTeX原來的一樣。 redefinetxfontslargesymbols數學字體:

\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 積分符號與其他字體包一起使用,您只需確保esint在所有字體包之後加載(以及之後amsmath)。

相關內容