我正在管理一个 XeLaTeX 模板来编辑我自己的书籍,该模板mathspec
允许我从目录中选择一些字体系列并在文档中使用它们。
不幸的是,由于讨论中经常将数学方程式作为文本的一部分,而不是公式,所以我想采用文本字体(,
、.
和;
):
并在数学模式。
使用的字体文本以及数学是不同的,我做的最远的是采取其中一个数学字体子集(Digits
、Latin
或Greek
)来使用标点符号,但这些字体集均不用于数学模式中使用的标点符号相同文本模式。
抱歉,我把所有我通常使用的软件包都包括进去了,但是尝试删除一些我认为没有必要提供的软件包,MWE 却给我带来了一些随机错误。
\documentclass[a4paper,12pt,twoside]{book}
\usepackage{indentfirst}
\usepackage{graphicx}
\usepackage{pdfpages}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{fdsymbol}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{multicol}
\usepackage{longtable}
\usepackage{xcolor}
\usepackage{colortbl}
\usepackage{paralist}
\usepackage{enumitem}
\usepackage{titleps}
\usepackage{mathspec}
\usepackage{polyglossia}
\usepackage{geometry}
\usepackage{lipsum}
\setdefaultlanguage{brazil}
\geometry{a5paper, left=2.000cm, right=2.000cm, top=2.800cm, bottom=2.800cm}
\defaultfontfeatures{Scale=MatchLowercase,Ligatures=TeX}
% ?
\XeTeXinterchartokenstate=1
% Declaring Font Families
\newfontfamily{\setpunctfont}[
Path = ./fonts/text/ ,
UprightFont = regular.otf ,
BoldFont = regular.otf ,
ItalicFont = regular.otf ,
BoldItalicFont = regular.otf ,
Scale = MatchLowercase ,
NFSSFamily = puncty
]{jPunct}
\setmainfont[
Path = ./fonts/text/ ,
UprightFont = regular.otf ,
BoldFont = bold.otf ,
ItalicFont = italic.otf ,
BoldItalicFont = bold-italic.otf ,
Scale = MatchLowercase
]{jMain}
\setmathfont(Latin)[
Path = ./fonts/math/ ,
UprightFont = latin.otf ,
BoldFont = latin.otf ,
ItalicFont = latin.otf ,
BoldItalicFont = latin.otf ,
Scale = MatchLowercase
]{jMathLatin}
% ?
\makeatletter
\ifx\e@alloc@intercharclass@top\@undefined
\chardef\CharBound=255
\else
\chardef\CharBound=\e@alloc@intercharclass@top
\fi
\makeatother
\chardef\CharBase=0
\newXeTeXintercharclass\CharPcts
\XeTeXcharclass"002C=\CharPcts
\XeTeXcharclass"002E=\CharPcts
\XeTeXcharclass"003A=\CharPcts
\XeTeXcharclass"003B=\CharPcts
\newtoks\TokenPunctFont
\TokenPunctFont={\begingroup\setpunctfont}
\XeTeXinterchartoks\CharBase\CharPcts=\TokenPunctFont
\XeTeXinterchartoks\CharBound\CharPcts=\TokenPunctFont
\XeTeXinterchartoks\CharPcts\CharBase={\normalfont\endgroup}
\XeTeXinterchartoks\CharPcts\CharBound={\normalfont\endgroup}
\DeclareSymbolFont{PunctSymb}{TU}{puncty}{m}{n}
\Umathchardef\MathPunctComma="3 \symPunctSymb "002C
\Umathchardef\MathPunctDot="3 \symPunctSymb "002E
\Umathchardef\MathPunctSemiColon="3 \symPunctSymb "003B
\Umathchardef\MathPunctColon="3 \symPunctSymb "003A
\begin{document}
ASP.<> $ASP.;,:<>$ \textbf{A.B,C} \textit{A,B;C.}. $\MathPunctDot$.
\end{document}
所以,我想要数学 .
对应\MathPunctDot
,我可以正确地修复另外三个标点符号。
答案1
\Umathchardef
通过 XeLaTeX 文档,您可以使用命令代替\Umathcode
。由于您想更改标点符号以使其保持如下状态文本模式,则可以设置以下内容:
您不需要为标点符号使用单独的字体系列。只需声明
NFSSFamily
您的主要字体即可。\setmainfont[ Path = ./fonts/text/ , UprightFont = regular.otf , BoldFont = bold.otf , ItalicFont = italic.otf , BoldItalicFont = bold-italic.otf , Scale = MatchLowercase , NFSSFamily = puncty ]{jMain}
宣言
\DeclareSymbolFont{PunctSymb}{TU}{puncty}{m}{n}
现在可以直接处理您的主字体。您可以声明数学模式本声明后的标点符号如下:
\Umathcode"002C="6 \symPunctSymb "002C \Umathcode"002E="6 \symPunctSymb "002E \Umathcode"003A="6 \symPunctSymb "003A \Umathcode"003B="6 \symPunctSymb "003B
该
6
索引代表数学标点符号。如果您想要或需要使用更多字体,我建议您删除
fdsymbol
包,否则您可能会遇到错误Too many fonts declared
。