我想使用標準\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
中獲取的(運算符)。最後,字體在開頭聲明:"52
largesymbols
largesymbols
fontmath.ltx
\DeclareSymbolFont{largesymbols}{OMX}{cmex}{m}{n}
這意味著編碼OMX
,家庭cmex
,系列m
(edium),形狀n
(ormal)。
為了製作上面的範例,我只是將其重命名largesymbols
為largesymbolscmr
和\int(op)
to\cmrint(op)
以避免衝突。
\txint
這個過程是類似的,只不過fontmath.ltx
我們不是查看txfonts.sty
(使用kpsewhich txfonts.sty
來查找文件)。雖然txfonts.sty
沒有重新定義\int
,所以的定義命令和LaTeX原來的一樣。 redefinetxfonts
是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 積分符號與其他字體包一起使用,您只需確保esint
在所有字體包之後加載(以及之後amsmath
)。