Как получить цифры устава в обоих режимах; старый стиль в текстовом режиме?

Как получить цифры устава в обоих режимах; старый стиль в текстовом режиме?

Как получить 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}

Образец XCharter

В маловероятном случае, если вам когда-нибудь понадобятся числа старого стиля в математическом режиме, вы можете добавить команду:

\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-mathLuaLaTeX, когда вы можете, и 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}

введите описание изображения здесь

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