
Как получить Charter с опцией «старого стиля» в текстовом режиме и с символами Charter (включая цифры) в математическом режиме?
Предлагаемое решение должно работать с LuaLaTeX (поскольку некоторые текстовые символы не являются символами ASCII, и я предпочитаю вставлять эти символы, не являющиеся символами ASCII, в исходный файл и сохранять исходный файл как UTF-8).
Редактировать:На всякий случай, если это актуально, я использую MiKTeX v.2.9. Нужно ли мне обновляться, чтобы решить эту проблему?
Я могу подобраться к цели невероятно близко, но не могу заставить все работать одновременно.
МВЭ 1:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{XCharter} % see https://tex.stackexchange.com/a/205558
\usepackage[oldstyle]{xcharter}
% See https://tex.stackexchange.com/a/347574 for why this is needed.
\AtBeginDocument{%
\Umathcode`0="7 "0 `0
\Umathcode`1="7 "0 `1
\Umathcode`2="7 "0 `2
\Umathcode`3="7 "0 `3
\Umathcode`4="7 "0 `4
\Umathcode`5="7 "0 `5
\Umathcode`6="7 "0 `6
\Umathcode`7="7 "0 `7
\Umathcode`8="7 "0 `8
\Umathcode`9="7 "0 `9
}
\usepackage[charter]{newtxmath}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies a/b=c/d.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
Цифры в текстовом режиме именно такие, как я хочу. Более того, буквы в математическом режиме — это курсив Charter, который я хочу. Однако, цифры в математическом режиме — Computer Modern, несмотря на мою попытку использовать код вэтот ответ, который ответил на аналогичный вопрос относительно Libertine.
МВЭ 2
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{fontspec}
\setmainfont{XCharter}[Numbers={OldStyle}] % see https://tex.stackexchange.com/a/205558
\usepackage[charter]{newtxmath}
% See https://tex.stackexchange.com/a/347574 for why this is needed.
\AtBeginDocument{%
\Umathcode`0="7 "0 `0
\Umathcode`1="7 "0 `1
\Umathcode`2="7 "0 `2
\Umathcode`3="7 "0 `3
\Umathcode`4="7 "0 `4
\Umathcode`5="7 "0 `5
\Umathcode`6="7 "0 `6
\Umathcode`7="7 "0 `7
\Umathcode`8="7 "0 `8
\Umathcode`9="7 "0 `9
}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
Теперь я пытаюсь получить цифры старого стиля в текстовом режиме, взламывая \setmainfont вместо \usepackage{xcharter}. Но это, похоже, передает параметр oldstyleI (а не oldstyle) в \usepackage{xcharter}. В любом случае, результат таков, что в текстовом режиме есть цифры старого стиля, но с маленькой заглавной буквой I вместо 1. Хорошие новости в том, что цифры в математическом режиме — это Charter, что мне и нужно.
Было бы еще лучше, если бы и текстовый, и математический режимы могли использовать старые цифры Charter. Таким образом, я мог бы хранить таблицы как массивы в математическом режиме. Необходимость перехода в текстовый режим для цифр в таблицах влечет за собой замену eg $\begin{array}{r} n \\ 1 \end{array}$
на \begin{tabular}{r} $n$ \\ 1 \end{tabular}
.
решение1
Поскольку вы используете LuaLaTeX, вы можете загрузить unicode-math
вместо newtxmath
, у которого есть проблемы с совместимостью. Используйте шрифт XCharter-Math для математики.
РЕДАКТИРОВАТЬ:В комментариях вы запросили цифру 1 из [oldstyleI]
, которая является вариантом символа 01 в версии OpenType XCharter. Исправленная версия приведена ниже.
\documentclass[12pt,a4paper]{article}
\usepackage{unicode-math}
\defaultfontfeatures[XCharter]{ Numbers=OldStyle,
CharacterVariant=1, % Change the shape of 1 in text mode
UprightFont=*-Roman,
BoldFont=*-Bold,
ItalicFont=*-Italic,
SlantedFont=*-Slanted,
BoldItalicFont=*-BoldItalic,
BoldSlantedFont=*-BoldSlanted,
Extension=.otf }
\setmainfont{XCharter}
\setmathfont{XCharter-Math}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
В маловероятном случае, если вам когда-нибудь понадобятся числа старого стиля в математическом режиме, вы можете добавить команду:
\setmathfont{XCharter-Roman.otf}[range={up/num},
Numbers=OldStyle,
CharacterVariant=01] % Change the shape of 1 in math mode
Вот версия, которая работает в PDFLaTeX:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage[charter]{mathdesign}
\usepackage[oldstyle]{xcharter}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
Я рекомендую вам использовать unicode-math
LuaLaTeX, когда вы можете, и PDFLaTeX с устаревшими 8-битными шрифтами, когда вам это необходимо. Но, поскольку вы говорите, что проблема здесь была в невозможности прочитать Unicode, есть большая вероятность, что ваш документ будет работать, если вы сохраните его в кодировке NFC (нормализованный предкомпозитный) UTF-8. PDFLaTeX не понимает комбинированные символы Unicode, но может обрабатывать любые символы Unicode, которые напрямую отображаются в 8-битной входной кодировке.
Редактировать:
Если вы действительно хотите использовать текстовый шрифт OpenType вместе с устаревшим математическим шрифтом Type 1, это должно сработать:
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage[charter]{mathdesign}
\usepackage{fontspec}
\setmainfont{XCharter}[NFSSFamily=mdbch, Numbers=OldStyle]
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd.$ $8=5+3=9-1=2\times4=2^3.$
\end{document}
решение2
Если вы не хотите использовать unicode-math
, вам придется переопределить operators
шрифт для использования XCharter с линейными цифрами.
\documentclass[12pt,a4paper]{article}
\usepackage{amsmath}
\usepackage{fontspec}
\usepackage[charter]{newtxmath}
\setmainfont{XCharter}[Numbers={OldStyle}] % see https://tex.stackexchange.com/a/205558
\newfontfamily{\XCharterLF}{XCharter}[NFSSFamily=xcharterlf]
\DeclareSymbolFont{operators}{TU}{xcharterlf}{m}{n}
\begin{document}
Digits in plain text: 48/96=135/270.
$a=48, b=96, c=135, d=270\implies ab=cd$.
$8=5+3=9-1=2\times4=2^3$.
$\sin x$
\end{document}