2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Цифры в формуле другим шрифтом
Сообщение01.02.2017, 10:37 
Собираю проект через xelatex с использованием нестандартных шрифтов, однако в формулах все цифры печатаются другим шрифтом. Как поправить?
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[]{beamer}
\usepackage[14pt]{extsizes}
\usepackage{geometry}
\geometry{landscape,a4paper,left=1mm,right=16mm,top=1mm,bottom=0cm}

\usepackage{fontspec}
\setmainfont[Mapping=tex-text]{OfficinaSerifC}
\setsansfont[Scale=.975]{OfficinaSerifC}                   %% задаёт шрифт без засечек
\setmonofont{OfficinaSerifC}                   %% задаёт моноширинный шрифт
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{mathtext}               % русские буквы в фомулах
\usepackage{amsmath,amssymb,amsfonts,textcomp,latexsym,pb-diagram,amsopn}

\begin{document}
       
        Нужно чтобы формулы печатались одним шрифтом OfficinaSerifC так: $\text{20 $-$ 25} \cdot \lg(\theta) = \text{13}x$, однако все цифры в формулах печатаются другим шрифтом: $20 - 25 \cdot \lg(\theta) = 13 x$.
    Как поправить и сделать один шрифт для формул, чтобы не брать каждую цифру в тег text?

\end{document}


Вроде тут обсуждается похожий пример _http://tex.stackexchange.com/questions/172787/mathsf-prints-digits-in-serif-font
Попроще нельзя ли сделать, чтобы по-умолчанию в формулах работало?

 
 
 
 Re: Цифры в формуле другим шрифтом
Сообщение01.02.2017, 20:06 
Как так получается, что для примера, на котором желающие Вам помочь могли бы опробовать разные идеи, не смогли подобрать шрифт, который бы не формировал ошибку
The font "OfficinaSerifC" cannot be found.

 
 
 
 Re: Цифры в формуле другим шрифтом
Сообщение02.02.2017, 14:57 
Попробуйте так
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[]{beamer}
\usepackage[14pt]{extsizes}
\usepackage{geometry}
\geometry{landscape,a4paper,left=1mm,right=16mm,top=1mm,bottom=0cm}

\usepackage{fontspec}
\setmainfont[Mapping=tex-text]{Arial}
\setsansfont[Scale=.975]{Arial}                   %% задаёт шрифт без засечек
\setmonofont{Arial}                   %% задаёт моноширинный шрифт
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{mathtext}               % русские буквы в фомулах
\usepackage{amsmath,amssymb,amsfonts,textcomp,latexsym,pb-diagram,amsopn}

\begin{document}
       
        Нужно чтобы формулы печатались одним шрифтом OfficinaSerifC так: $\text{20 $-$ 25} \cdot \lg(\theta) = \text{13}x$, однако все цифры в формулах печатаются другим шрифтом: $20 - 25 \cdot \lg(\theta) = 13 x$.
    Как поправить и сделать один шрифт для формул, чтобы не брать каждую цифру в тег text?

\end{document}


или так

код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass[]{beamer}
\usepackage[14pt]{extsizes}
\usepackage{geometry}
\geometry{landscape,a4paper,left=1mm,right=16mm,top=1mm,bottom=0cm}

\usepackage{fontspec}
\setmainfont[Mapping=tex-text]{Times New Roman}
\setsansfont[Scale=.975]{Times New Roman}                   %% задаёт шрифт без засечек
\setmonofont{Times New Roman}                   %% задаёт моноширинный шрифт
\usepackage[utf8]{inputenc}
\usepackage[english,russian]{babel}
\usepackage{mathtext}               % русские буквы в фомулах
\usepackage{amsmath,amssymb,amsfonts,textcomp,latexsym,pb-diagram,amsopn}

\begin{document}
       
        Нужно чтобы формулы печатались одним шрифтом OfficinaSerifC так: $\text{20 $-$ 25} \cdot \lg(\theta) = \text{13}x$, однако все цифры в формулах печатаются другим шрифтом: $20 - 25 \cdot \lg(\theta) = 13 x$.
    Как поправить и сделать один шрифт для формул, чтобы не брать каждую цифру в тег text?

\end{document}

 
 
 
 Re: Цифры в формуле другим шрифтом
Сообщение02.02.2017, 17:04 
Аватара пользователя
Можно воспользоваться услугами пакета mathspec (попроще) или unicode-math (посложнее).

1) Если используете mathspec, то пакет fontspec загружать нужно с опцией no-math (или вообще не загружать: mathspec сделает это сам). Простенький пример (я убрал из преамбулы большую часть не относящегося к делу мусора; к слову, если используете xelatex, то пакет inputenc вообще не нужен):
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass{article}

\usepackage{mathtools,amssymb}

\usepackage{mathspec}
\newcommand*{\myfont}{Georgia}
\setmainfont{\myfont}[Ligatures=TeX]
\setsansfont{\myfont}[Scale=0.975]
\setmonofont{\myfont}
\setmathfont(Digits){\myfont}

\usepackage[english,russian]{babel}

\begin{document}

\noindent
$0123456789AaBbCcfi$\\
$\textnormal{0123456789}\textit{AaBbCcfi}$

\begin{gather}
\int_{0}^{1}x^{-x}\mathrm{d}x=\sum_{n=1}^{\infty}n^{-n}\\
A\setminus A=\varnothing\ne\emptyset
\end{gather}

\end{document}


2) Аналогичный пример с unicode-math (всякие математические пакеты типа amsmath и amssymb нужно подключать раньше unicode-math):
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass{article}

\usepackage{mathtools,amssymb}

\usepackage{fontspec}
\newcommand*{\myfont}{Georgia}
\setmainfont{\myfont}[Ligatures=TeX]
\setsansfont{\myfont}[Scale=0.975]
\setmonofont{\myfont}

\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\setmathfont[range={"0030-"0039}]{\myfont}

\usepackage[english,russian]{babel}

\begin{document}

\noindent
$0123456789AaBbCcfi$\\
$\textnormal{0123456789}\textit{AaBbCcfi}$

\begin{gather}
\int_{0}^{1}x^{-x}\mathrm{d}x=\sum_{n=1}^{\infty}n^{-n}\\
A\setminus A=\varnothing=\emptyset
\end{gather}

\end{document}

При взгляде на последнюю формулу можно заметить 2 проблемы:
1) Вместо значка $\setminus$ (разность множеств) — просто пустое место. Дело в том, что соответствующий символ отсутствует в шрифте Latin Modern Math. Можно взять его из другого шрифта или использовать вместо него \smallsetminus. (Можно переопределить команду \setminus, но нужно иметь в виду, что пакет unicode-math творит значительную часть своей магии после \begin{document}, поэтому и переопределять нужно после.)
2) Вместо красивого значка пустого множества $\varnothing$ используется $\emptyset$. Это из-за того, что в Юникоде есть лишь один символ пустого множества, поэтому обе команды \emptyset и \varnothing выдают одно и то же (результат зависит от шрифта). Можно позаимствовать нужный символ из другого шрифта, например Asana Math (пакет asana-math), с помощью опции range.

Подправленный с учётом этих замечаний пример:
код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX
\documentclass{article}

\usepackage{mathtools,amssymb}

\usepackage{fontspec}
\newcommand*{\myfont}{Georgia}
\setmainfont{\myfont}[Ligatures=TeX]
\setsansfont{\myfont}[Scale=0.975]
\setmonofont{\myfont}

\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\setmathfont[range={"0030-"0039}]{\myfont}
\setmathfont[range={\varnothing}]{Asana Math}

\AtBeginDocument{
\renewcommand*{\setminus}{\smallsetminus}
}

\usepackage[english,russian]{babel}

\begin{document}

\noindent
$0123456789AaBbCcfi$\\
$\textnormal{0123456789}\textit{AaBbCcfi}$

\begin{gather}
\int_{0}^{1}x^{-x}\mathrm{d}x=\sum_{n=1}^{\infty}n^{-n}\\
A\setminus A=\varnothing=\emptyset
\end{gather}

\end{document}

А можно вместо Latin Modern Math использовать шрифт STIX Two Math (http://www.stixfonts.org/), который лишён упомянутых двух недостатков. (Или тот же Asana Math.)

 
 
 
 Re: Цифры в формуле другим шрифтом
Сообщение02.02.2017, 17:46 
Вариант
Цитата:
(попроще)
работает, спасибо

 
 
 
 Re: Цифры в формуле другим шрифтом
Сообщение06.02.2017, 18:25 
Появилась необходимость использовать LuaLaTeX.
Подскажите как под него адаптировать ваш вариант попроще.

 
 
 
 Re: Цифры в формуле другим шрифтом
Сообщение06.02.2017, 23:36 
Попробовал вариант №3 под LuaLaTeX работает, однако в beamer некорректно отображает символы (в article - корректно).

код: [ скачать ] [ спрятать ]
Используется синтаксис LaTeX

\documentclass{beamer}%Некорректно
%\documentclass{article}%А так корректно

\usepackage{mathtools,amssymb}

\usepackage{fontspec}
\newcommand*{\myfont}{Georgia}
\setmainfont{\myfont}[Ligatures=TeX]
\setsansfont{\myfont}[Scale=0.975]
\setmonofont{\myfont}

\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\setmathfont[range={"0030-"0039}]{\myfont}
\setmathfont[range={\varnothing}]{Asana Math}

\AtBeginDocument{
\renewcommand*{\setminus}{\smallsetminus}
}

\usepackage[english,russian]{babel}

\begin{document}

\noindent
$0123456789AaBbCcfi$\\
$\textnormal{0123456789}\textit{AaBbCcfi}$

\begin{gather}
\int_{0}^{1}x^{-x}\mathrm{d}x=\sum_{n=1}^{\infty}n^{-n}\\
A\setminus A=\varnothing=\emptyset
\end{gather}

\begin{equation}G(\theta)= \begin{cases}
& 29 - 25\lg(\theta)\text{ при } 1^{\circ}<\theta\leq20^{\circ}; \\
& -3,5\text{ при } 20^{\circ}<\theta\leq26,3^{\circ}; \\
& 32 - 25\lg(\theta)\text{ при } 26,3^{\circ}<\theta\leq48^{\circ}; \\
& -10\text{ при } 48^{\circ}<\theta\leq180^{\circ}. \\  
\end{cases}\end{equation}

\end{document}


Как можно исправить?

 
 
 
 Re: Цифры в формуле другим шрифтом
Сообщение07.02.2017, 00:18 
Аватара пользователя
Попробуйте добавить в преамбулу
Используется синтаксис LaTeX
\usefonttheme{professionalfonts}

Или даже
Используется синтаксис LaTeX
\usefonttheme{professionalfonts,serif}
, раз уж всё равно используете шрифт с засечками.

 
 
 
 Re: Цифры в формуле другим шрифтом
Сообщение07.02.2017, 18:16 
Ок, работает

 
 
 [ Сообщений: 9 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group