将数学格式应用于非数学字体

将数学格式应用于非数学字体

这篇文章总结了一篇题外话,该题始于对不同的岗位与用户日本足协

这里的基本问题是,为了在数学模式下实现多样化的格式,需要什么命令才能使非数学字体(在本例中为 TeX Gyre Termes)的完整字符集在数学模式下可访问。

我现在想向 TeX.SE 社区提出这个问题。

答案1

这更像是对您的答案的回答,而不是对您的问题的回答! ;-) 事实上,我只是想澄清这个问题,即mathastextvsfontspec 是否带有其选项no-math。您在答案中所说的内容是由于您在代码中使用了mathspec。事实上,以下是摘录自mathspec.pdf

实际上,mathspec 通常使用 no-math 选项加载 fontspec。要取消此功能,请明确使用 math 选项:例如 \usepackage[math]{mathspec}。

mathspec(用于 XeLaTeX)专门用于设置数学字体(用于拉丁字母、数字和希腊字母),它还提供了定义数学字母的命令。它会自动fontspec 使用选项加载no-math。它可用于设置希腊字母,然后可以加载mathastext 以设置拉丁字母和数字(以及来自基本拉丁语集的几个标点符号)。

该软件包mathastext 是为传统 TeX 引擎设计的,但可与 Unicode 引擎一起使用;正如其文档中明确指出的那样,它仅处理 Unicode 世界中的 Basic Latin 子集。感谢您的提问/回答,我意识到可以将其与一起使用mathspec(我最初以为它们会相互对抗)。例如,可以使用mathspec 来设置希腊字母的字体,然后让其mathastext 使用 Basic Latin 字符完成其适度的工作。已经使用标准 LaTeX 和 T1 编码,对于mathastext在数学模式下直接输入源中的带变音符号(例如 é 或 à)的字母没有任何特殊处理(我相信同样适用于mathspec)。

现在这里有一个小文档,允许您mathastext在 XeTeX(或 LuaLaTeX)下使用您选择的各种 Unicode 字体进行测试,可以使用或不使用mathspec(仅限 XeTeX),也可以在不使用时使用或不 使用mathspec 选项。目前,源没有输入 ,您将能够看到使用选项的重要性。但要查看希腊字母,例如在数学模式下直接输入时,您需要取消注释加载(仅限 XeTeX)。希望对您有所帮助!no-mathfontspecmathspecno-mathfontspecmathastext$α$mathspec

\documentclass[12pt]{article}

\usepackage{amsmath} % problem with `\- !!! (see below)

%% \usepackage{mathspec}
%% \setmathsfont(Greek)[Uppercase=Regular,Lowercase=Regular]{Arial}

\usepackage[no-math]{fontspec} 
% The no-math option should be used for not interfering with
% mathsastext. Important: mathspec loads by default fontspec with
% the no-math option.

%\defaultfontfeatures{Ligatures=TeX} % syntaxe pour luatex
\defaultfontfeatures{Mapping=tex-text} % syntaxe pour xetex

\usepackage[noendash]{mathastext} 
% noendash because of amsmath, see first line
% after \begin{document}

%%% mathastext allows to define multiple math versions,
%%% beyond the default "normal" one:

\setmainfont{Times New Roman} % or any other font
\Mathastext[times]            % no space in the math version name

\setmainfont{Impact}          % this is a very heavy upright
                              % font
\Mathastext[impact]           % available on the computer at
                              % my office

\setmainfont{Arial}           
\Mathastext[arial]       

\newcommand{\textandmathandgreek}{   
   \centerline{abcdefghijklmnopqrstuvwxyz\rlap{ (text)}}
   \centerline{$abcdefghijklmnopqrstuvwxyz$\rlap{ (math)}}

   \centerline{ABCDEFGHIJKLMNOPQRSTUVWXYZ\rlap{ (text)}}
   \centerline{$ABCDEFGHIJKLMNOPQRSTUVWXYZ$\rlap{ (math)}}

   \centerline{0123456789\rlap{ (text)}}
   \centerline{$\mathrm{0123456789}$\rlap{ (math with \texttt{\symbol{92}mathrm})}}
   \centerline{$0123456789$\rlap{ (math)}}

   \centerline{!\,?\,*\,,\,.\,:\,;\,+\,\textendash\,=\,(\,)\,[\,]\,/\,\#\,%
   \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\symbol{92}\rlap{ (text)}}
   \centerline{$!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,%
   \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$\rlap{ (math)}}

   \centerline{αβγΔΓΦ\rlap{ (text)}}
   \centerline{$αβγΔΓΦ$\rlap{ (math, direct input)}}
   \centerline{$\alpha\beta\gamma\Delta\Gamma\Phi$\rlap{
       (math, named letters)}}

   \medskip
}

\pagestyle{empty}

\begin{document}
% FIX FOR THE AMSMATH PROBLEM WITH MINUS SIGN
%\luatexUmathcode`\-="2 \symmtoperatorfont "2013 \relax
\XeTeXmathcode`\- ="2 \symmtoperatorfont "2013 \relax

\MTversion{normal}  % font at the time of loading mathastext
\centerline{Default Text Font}
\textandmathandgreek

\MTversion{times}
\centerline{Times New Roman}
\textandmathandgreek

\MTversion{impact}
\centerline{Impact}
\textandmathandgreek

\MTversion{arial}
\centerline{Arial}
\textandmathandgreek

The main job of mathastext is to allow to
type the characters from the Basic Latin set \emph{as is} in math mode,
and to have them without further ado be in the same font as
the document text (possibly in italic, with
\emph{italic} passed to the package, and when the font used
does exist in Italic Style). But for Unicode
characters not in the Basic Latin set (such as é, or æ or ŋ)
they should be input in math mode within a \verb|\mathrm| or
similar math alphabet commands $\zeta=\int
\frac{\mathrm{é}}{\mathbf{æ}}d\mathit{ŋ}$, or alternatively
within a \verb|\text| command (from package amsmath)
$\zeta=\int \frac{\text{é}}{\text{\bfseries
    æ}}d\text{\itshape ŋ}$ (this offers more possibilities
as the \verb|\math..| commands are not cumulative).

Mathastext has options related to Greek letters but only in
relation to fonts in \TeX\ format (fonts in LGR encoding, or
the Euler font, or the Symbol font). The Greek letters can
be set up arbitrarily by another package: with Xe\TeX{}
one can use the package \emph{mathspec} to specify the Greek
letters, this is compatible with loading also mathastext for
dealing with Latin letters and Digits (a job which can also
be done by mathspec). 

\end{document}

答案2

一个答案,日本足协并且我已经在另一篇文章的评论中讨论过,使用包来mathastext完成此操作。mathastext非常好,但在我看来,它的工作原理并不完全符合文档中的描述。

我正在使用 XeLaTeX,fontspec为了获得完整的 CJK 功能(这里没有说明)。第 8 页mathastext文档

使用 XeTeX/LuaLaTeX 的用户请注意fontspec:必须在no-math之前加载选项 , mathastext

日本足协还表明noendash必须将选项传递mathastext给以避免目前与存在的小冲突amsmath。(用户对同一问题有不同的解决方案菲利普这里

但是,我没有看到该选项的任何明显效果。下面是设计用于显示将 传递给no-math时输出差异的最小代码。数字字符串加上非数学字符 ā 输出三次:首先作为文本,然后格式化为简单的数学,最后格式化为数学但带有。no-mathfontspec\textrm

%!TEX TS-program = xelatex
%!TEX encoding = UTF-8 Unicode

\documentclass[12pt]{article}
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{mathspec}            % replaces amssymb; do not use unicode-math
\usepackage{xeCJK}
\usepackage{fontspec}

\defaultfontfeatures{Mapping=tex-text}
\setmainfont{TeX Gyre Termes}
\usepackage[italic,noendash]{mathastext}  % propagates document text font to math mode

\begin{document}

\centerline{0123456789ā}\centerline{\(0123456789ā\)}\centerline{\(\textrm{0123456789ā}\)}

\end{document}

输出如下:

将选项no-math传递给fontspec

无数学 4

no-math没有传递给的选项fontspec

无需数学 4

我发现这两个输出之间没有区别。 的存在与否不会影响文本的外观,并且除非使用,no-math否则非数学字符 ā 不会出现在数学模式中。\textrm

因此,在我看来,mathastext仅靠这一点不足以使非数学字体中的所有字符都以数学格式显示。我很想知道是否有比在每个数学环境中使用mathastext加号更简单的方法来完成此任务。\textrm

相关内容