Я хотел бы использовать стандарт \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 math. Вы можете найти этот файл, запустив его 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
(normal).
Чтобы сделать пример выше, я просто переименовал largesymbols
в largesymbolscmr
и в, \int(op)
чтобы \cmrint(op)
избежать конфликтов.
\txint
Процесс похож, за исключением того, что вместо того, чтобы искать в fontmath.ltx
мы будем искать txfonts.sty
(используйте kpsewhich txfonts.sty
для поиска файла). Хотя txfonts.sty
не переопределяет \int
, поэтому определениекомандато же самое, что и оригинал LaTeX. Что txfonts
переопределяет, так это largesymbols
шрифт math:
\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
).