目前,我使用 LuaLatex 和fontspec
来管理文档中的字体。但是,我发现当我想使用 Roboto 等无衬线字体作为“普通文本”时,数学模式文本也是 Roboto 字体,尽管字母和符号是衬线数学字体。这很成问题,因为它会使内容更难阅读。以下是我的问题的几个例子:
请注意,两个示例都处于数学模式,但文本全部是无衬线字体。
有人知道如何强制将数学模式中的所有文本变为计算机现代数学字体吗?
我在这里读过这篇文章:在数学模式下强制将字体设置为计算机现代字体(衬线字体),尽管它被设置为无衬线字体但是发布的解决方案要求我\mathrm{}
在遇到的几乎所有数学环境中进行书写,这会很痛苦。
我也在这里读过这篇文章:在数学模式下强制使用现代计算机但我没有使用beamer
。
编辑:下面的代码
\documentclass[15pt]{article}
% define paper margins
\usepackage[
a4paper,
portrait,
top=1.2cm,
bottom=1.2cm,
left=1.5cm,
right=1.5cm,
headheight=15pt, % avoid warning by fancyhdr
includehead,includefoot,
heightrounded % to avoid underfull messages
]{geometry}
% Make justifications better.
\usepackage{microtype}
% Allows inclusion of sample text.
\usepackage{blindtext}
% Gets outlines right.
\usepackage{bookmark}
% ams stuff
\usepackage{amsmath, amsthm, amssymb}
% Allows inclusion of special spaces
\usepackage{xspace}
% fancy headers
\usepackage{fancyhdr}
\pagestyle{fancy}
% Allows inclusion of custom fonts.
\usepackage[no-math]{fontspec}
% Allows the use of custom enumerators in lists.
\usepackage{enumitem}
% Allows drawing of graphical images.
\usepackage{tikz}
% Allows inclusion of images.
\usepackage{graphicx}
% Automatic paragraph spacing
\usepackage{parskip}
% Allows inclusion of links
\usepackage{hyperref}
% Allows boxes to be drawn around text and math environments.
\usepackage{tcolorbox}
% Includes extra mathtools.
\usepackage{mathtools}
% Use Unicode math fonts.
\usepackage{unicode-math}
% hyperref setup
\hypersetup {
colorlinks=true,
linkcolor=blue,
filecolor=magenta,
urlcolor=cyan
}
% Augmented Matrix environment.
\newenvironment{amatrix}[1]
{\left[\begin{array}{@{}#1@{}}}
{\end{array}\right]}
% Commands
\newcommand{\latex}{\LaTeX\xspace}
\renewcommand\qedsymbol{$\blacksquare$}
\newcommand{\reals}{\mathbb{R}}
\newcommand{\naturals}{\mathbb{N}}
\newcommand{\integers}{\mathbb{Z}}
\newcommand{\rationals}{\mathbb{Q}}
\newtheorem{theorem}{Theorem}
\newtheorem{lemma}[theorem]{Lemma}
% Fixing brackets
%\let\originalleft\left
%\let\originalright\right
%\renewcommand{\left}{\mathopen{}\mathclose\bgroup\originalleft}
%\renewcommand{\right}{\aftergroup\egroup\originalright}
% Line spacing
\renewcommand{\baselinestretch}{1.22}
\DeclareMathOperator{\Tr}{Tr}
\DeclareMathOperator{\sgn}{sgn}
\DeclareMathOperator{\lcm}{lcm}
\DeclareMathOperator{\Span}{Span}
\DeclareMathOperator{\Col}{Col}
\DeclareMathOperator{\Null}{Null}
\DeclareMathOperator{\Row}{Row}
\DeclareMathOperator{\Rank}{Rank}
\DeclareMathOperator{\Nullity}{Nullity}
\DeclarePairedDelimiter\ceil{\lceil}{\rceil}
\DeclarePairedDelimiter\floor{\lfloor}{\rfloor}
\DeclarePairedDelimiter\sqb{[}{]}
\DeclarePairedDelimiter\pr{(}{)}
\DeclarePairedDelimiter\cb{\{}{\}}
\DeclarePairedDelimiter\vbar{|}{|}
\newcommand{\ro}[1]{%
\xrightarrow{\mathmakebox[\rowidth]{#1}}%
}
\newlength{\rowidth}% row operation width
\AtBeginDocument{\setlength{\rowidth}{6.8em}}
% Font
\defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
\setmainfont{Roboto}
%\setmathfont{Fira Math}[Color=7a4cef]
\setmonofont{Ubuntu Mono}
% Miscellaneous Variables
\newcommand{\me}{Kookie}
% Title
\title{\Huge Something}
\author{\me}
\date{\today}
\begin{document}
$$\Rank A + \Nullity A = c$$
$$\lim_{h\to 0}\frac{f(x+h) - f(x)}{h}$$
\end{document}
答案1
使用mathrm=sym
强制unicode-math
使用数学字体:
\documentclass{article}
\usepackage[mathrm=sym]{unicode-math}
\DeclareMathOperator{\Rank}{Rank}
\DeclareMathOperator{\Nullity}{Nullity}
\setmainfont{Roboto}
\begin{document}
\[\Rank A + \Nullity A = c\]
\[\lim_{h\to 0}\frac{f(x+h) - f(x)}{h}\]
\end{document}
另一种方法是将 mathrm 字体设置为更好的文本字体或例如数学字体本身:
\documentclass{article}
\usepackage{unicode-math}
\DeclareMathOperator{\Rank}{Rank}
\DeclareMathOperator{\Nullity}{Nullity}
\setmainfont{Roboto}
\setmathrm{Latin Modern Math}
\begin{document}
\[\Rank A + \Nullity A = c\]
\[\lim_{h\to 0}\frac{f(x+h) - f(x)}{h}\]
\end{document}
答案2
LaTeX 文档传统上用于\mathrm
做两件不同的事情:排版直立的数学符号(例如 ISO 样式中的常量)和在数学模式下排版短文本段落。该fontspec
包默认设置\mathrm
为主字体,但它提供了一个\setmathrm
命令来覆盖它。因此,如果您想在文本模式下使用 Roboto 但将 Latin Modern 用作\mathrm
,您可以这样写:
\defaultfontfeatures{Scale = MatchLowercase}
\setmainfont{Roboto}[Scale = 1.0]
\setmathrm{Latin Modern Roman}
它提供了中的字体\setboldmathrm
,这与您使用 获得的字体不同,它还具有和。\mathrm
\boldmath
\mathbf
\setmathrom[BoldFont = ....
\setmathsf
\setmathtt
unicode-math
除此以外,该包还提供了另一组数学字母表来表示数学符号。通常,您可以使用字母表\symup
、\symit
等来访问它们。但是,由于作者传统上使用\mathrm
、\mathit
等,因此该包可以选择为mathrm=sym
创建\mathrm
同义词\symup
。它还允许您使用声明任意数量的数学字母表\setmathfontface
。
默认情况下,诸如\sin
和 之类的运算符\log
将使用\mathrm
,但unicode-math
允许您使用 覆盖它。如果您已将 重新定义为\setoperatorfont
,那么您肯定会想要这样做。\mathrm
\symup
以下是欧拉方程的 ISO 样式示例,其中的数学符号为赫尔曼·扎普夫的欧拉式中的直立符号。其他数学符号来自他的 Palatino 的克隆,对于运算符sin
和cos
,我使用了他的 Optima 的克隆。您会注意到虚数常数 i 和 sin 中的 i 之间的差异。
\documentclass{minimal}
\usepackage[math-style=ISO,mathup=sym]{unicode-math}
\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{TeX Gyre Pagella}[Scale=1.0]
\setsansfont{URW Classico}
\setmathfont{Asana Math}
\setmathfont[range={up/{Latin,latin,Greek,greek},
bfup/{Latin,latin,Greek,greek},
cal,bfcal},
script-features={},sscript-features={}]
{Neo Euler}
\setmathsf[Ligatures={Common, TeX}]{URW Classico}
\setoperatorfont{\mathsf}
\begin{document}
\begin{align*}
\mathup{e}^{\mathup{i} \theta} &= \sin \theta + \mathup{i} \cos \theta \\
\mathup{e}^{\mathup{i \pi}} - 1 &= 0
\end{align*}
\end{document}
这是一个更准确地按照您的要求进行的版本,将直立数学常量设置为 Computer Modern Upright Italic,但将数学运算符设置为 Computer Modern Roman:
\documentclass{minimal}
\usepackage[math-style=ISO,mathup=sym]{unicode-math}
\defaultfontfeatures{Scale=MatchLowercase}
\setmathfont{Latin Modern Math}
\setmathfont[range=up/{Latin,latin,Greek,greek}]{CMU Serif Upright Italic}
\setmathfontface\mathcmr{CMU Serif}
\setoperatorfont{\mathcmr}
\begin{document}
\begin{align*}
\mathup{e}^{\mathup{i} \theta} &= \sin \theta + \mathup{i} \cos \theta \\
\mathup{e}^{\mathup{i \pi}} - 1 &= 0
\end{align*}
\end{document}
您可以使用诸如\lim
、、或之\textnormal{otherwise}
类的命令来获取输出。\operatorname{Nullity}
\DeclareMathOperator\Rank{Rank}