Использование символа 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 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).

Связанный контент