
Пакет arevmath
предлагает два разных a, доступных как \origa и \vara (значение по умолчанию). Однако добавление \DeclareMathSymbol{a}{\mathalpha}{extraitalic}{50}
в преамбулу для включения \origa в качестве a по умолчанию, вывод становится неверным; например, $\mathsf{a}$ выдает 2, то же самое для $\mathbf{a}$.
\documentclass{article}
\usepackage{arevmath}
\DeclareMathSymbol{a}{\mathalpha}{extraitalic}{50} % \origa by default
\begin{document}
$a, \mathsf{a}, \mathbf{2}, \vara, \origa, \mathsf{\origa}$
\end{document}
Как это исправить?
решение1
Устаревшие шрифты, имеющие всего 128 или 256 слотов, требовали большого количества кодирования и множества файлов поддержки шрифтов.
Для arevmath
package, for a
, tt и tt bold могут быть тем, что вам нужно. В противном случае, "round" a
кажется нормой.
Краткая информация:
(Хотя проще использовать шрифты ttf\otf с unicode-math
пакетом.)
МВЭ
Таблицы шрифтов/списки глифов:
\documentclass{article}
\usepackage{arevmath}
\usepackage{fonttable}
%\DeclareMathSymbol{b}{\mathalpha}{extraitalic}{50} %
\newcommand\showfont[6]{\newpage #1-#2-#3-#4 : for #5, #6 = {\usefont{#1}{#2}{#3}{#4}\char#6}\par\xfonttable{#1}{#2}{#3}{#4}}
\newcommand\xshowfont[6]{\par#1-#2-#3-#4 : for #5, #6 = {\usefont{#1}{#2}{#3}{#4}\char#6}}
\begin{document}
\xshowfont{U}{zavm}{m}{n}{nonstandard alternate glyphs, upright}{113}
\xshowfont{U}{zavm}{m}{it}{nonstandard alternate glyphs, italic}{50}
\xshowfont{U}{zavm}{m}{it}{nonstandard alternate glyphs, italic}{139}
\xshowfont{OT1}{zavm}{m}{n}{operators normal}{97}
\xshowfont{OML}{zavm}{m}{it}{letters normal}{97}
\xshowfont{OMS}{zavm}{m}{n}{symbols normal}{65}
\xshowfont{OMX}{mdbch}{m}{n}{largesymbols normal}{74}
\xshowfont{OT1}{zavm}{b}{n}{mathbf normal}{97}
\xshowfont{T1} {fvm} {m}{n}{mathtt normal}{97}
\xshowfont{OMS}{cmsy}{m}{n}{mathcal}{65}
\xshowfont{U}{rsfs}{m}{n}{mathscr}{65}
\xshowfont{OML}{zavm}{b}{it}{mathbm}{97}
%\showfont{U}{futm}{m}{n}{mathbb}{1}
%=====
\xshowfont{OT1}{zavm}{b}{n}{operators bold}{97}
\xshowfont{OML}{zavm}{b}{it}{letters bold}{97}
\xshowfont{OMS}{zavm}{b}{n}{symbols bold}{65}
\xshowfont{OMX}{mdbch}{b}{n}{largesymbols bold}{72}
\xshowfont{OT1}{zavm}{b}{n}{mathbf bold}{97}
\xshowfont{T1}{fvm}{b}{n}{mathtt bold}{97}
% with font table
\showfont{U}{zavm}{m}{n}{nonstandard alternate glyphs, upright}{113}
\showfont{U}{zavm}{m}{it}{nonstandard alternate glyphs, italic}{50}
\showfont{OT1}{zavm}{m}{n}{operators normal}{97}
\showfont{OML}{zavm}{m}{it}{letters normal}{97}
\showfont{OMS}{zavm}{m}{n}{symbols normal}{65}
\showfont{OMX}{mdbch}{m}{n}{largesymbols normal}{74}
\showfont{OT1}{zavm}{b}{n}{mathbf normal}{97}
\showfont{T1} {fvm} {m}{n}{mathtt normal}{97}
\showfont{OMS}{cmsy}{m}{n}{mathcal}{65}
\showfont{U}{rsfs}{m}{n}{mathscr}{65}
\showfont{OML}{zavm}{b}{it}{mathbm}{97}
%\showfont{U}{futm}{m}{n}{mathbb}{1}
%=====
\showfont{OT1}{zavm}{b}{n}{operators bold}{97}
\showfont{OML}{zavm}{b}{it}{letters bold}{97}
\showfont{OMS}{zavm}{b}{n}{symbols bold}{65}
\showfont{OMX}{mdbch}{b}{n}{largesymbols bold}{72}
\showfont{OT1}{zavm}{b}{n}{mathbf bold}{97}
\showfont{T1}{fvm}{b}{n}{mathtt bold}{97}
%\DeclareSymbolFontAlphabet{\mathnormal}{letters}
%\DeclareSymbolFontAlphabet{\mathit} {letters}
%\DeclareSymbolFontAlphabet{\mathrm} {operators}
%\DeclareSymbolFontAlphabet{\mathsf} {letters}
\end{document}
Редактировать
Типичный устаревший шрифт:
Варианты букв берутся из файла шрифта с U
кодировкой (="unknown"), что означает пользовательское расположение глифов, концептуально схожее с областью частного использования Unicode.
в то время как «нормальные» буквы берутся из файла шрифта на 128 ячеек с одной из устаревших кодировок ( OML
)
и символы из OMS
кодировки:
и т. д. для жирного шрифта и т. д.... (Код выводит различные таблицы.)
Пакет arevmath
работает так, как задумано.
«Исправлением», вероятно, было бы использование пакетов, поддерживающих Unicode, которые могут переключать шрифты в зависимости от используемого вами компилятора, или unicode-math
непосредственное погружение в пакет и компиляция с помощью xelatex/lualatex (или, может быть, переписывание arevmath
? — последний раз он поддерживался в 2006 году).
Мини-пример импорта символов с помощью unicode-math
Допустим, у нас есть набор математических шрифтов Unicode на выбор (отмечен шрифт sans):
Допустим, мы хотим использовать шрифт TeX Gyre Schola Math, но заменить его «круглые а» без курсива буквенно-цифровыми символами из шрифта Asana-Math.
(Обратите внимание, что символы прямого ввода и именованные макросимволы нормализованы в соответствии с действующим в настоящее время жирным и математическим начертанием, в основном либо прямым, либо курсивом.)
Вот шрифт TeX Gyre Schola Math, установленный в качестве математического шрифта со стилем ISO, чтобы показать курсивное начертание.
Эта range=
опция используется для выбора символа(ов) для импорта. Мы сделаем их красными, чтобы выделить их.
(Обратите внимание, что range={sfit,bfsfit}
будут импортированы шрифты без курсива и полужирный шрифт без курсива для латинских заглавных букв, латинских строчных букв, греческих заглавных букв, греческих строчных букв и цифр; range=
можно принимать параметры, чтобы ограничить импорт только одним из них или их комбинацией, или даже только отдельными глифами.)
Для получения более подробной информации сделайте следующее texdoc unicode-math
.
МВЭ
\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{unicode-math}
\setmathfont{Asana-Math}[Colour=brown]
\setmainfont{Noto Serif}
\usepackage{xparse}
% maths
\newfontfamily\asanamath{Asana}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/asana-math/,
UprightFont =*-Math,
]
\newfontfamily\firamathregular{FiraMath}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/firamath/,
UprightFont =*-Regular,
]
\newfontfamily\gfsneohellenicmath{GFSNeohellenicMath}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/gfsneohellenicmath/,
UprightFont =GFSNeohellenicMath,
]
\newfontfamily\latinmodernmath{latinmodern}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/lm-math/,
UprightFont =*-math,
]
\newfontfamily\libertinusmath{LibertinusMath}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/libertinus-fonts/,
UprightFont =*-Regular,
]
\newfontfamily\stixmath{STIXMath}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/stix/,
UprightFont =*-Regular,
]
\newfontfamily\stixiimath{STIX2Math}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/stix2-otf/,
UprightFont =STIX2Math,
]
\newfontfamily\texgyrebonummath{texgyrebonum}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/tex-gyre-math/,
UprightFont =*-math,
]
%
\newfontfamily\texgyredejavumath{texgyredejavu}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/tex-gyre-math/,
UprightFont =*-math,
]
%
\newfontfamily\texgyrepagellamath{texgyrepagella}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/tex-gyre-math/,
UprightFont =*-math,
]
%
\newfontfamily\texgyrescholamath{texgyreschola}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/tex-gyre-math/,
UprightFont =*-math,
]
%
\newfontfamily\texgyretermesmath{texgyretermes}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/tex-gyre-math/,
UprightFont =*-math,
]
%
\newfontfamily\xitsmathbold{XITSMath}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/xits/,
UprightFont =*-Bold,
]
%
\newfontfamily\xitsmathregular{XITSMath}[Extension=.otf,Path=C:/.../tl/texlive/2020/texmf-dist/fonts/opentype/public/xits/,
UprightFont =*-Regular,
]
%-------------------------------------------------------------
\ExplSyntaxOn
\cs_generate_variant:Nn
\seq_gset_split:Nnn
{ cno }
\tl_new:N \g_fc_namespace_tl
%------------------
\cs_set:Npn \fc_funcsymbolcompare:n #1 {
% 1=font switch name
\tl_set:Nx
\l_tmpa_tl
{
#1
}
\use:c
{ \tl_use:N \g_tmpa_tl } % sample name taking font name as parameter
{ \tl_use:N \l_tmpa_tl } % font name from seq
{ \tl_use:N \g_tmpb_tl } % symbol
}
%------------------
\cs_set:Npn \fc_funcprintesc:n #1 {
% 1=string
\exp_args:NNf \str_set:Nn \l_tmpa_str { #1 }
\group_begin:
\color{blue}
\usefont{T1}{zi4}{b}{n}
\large
\textbackslash
{\str_use:N \l_tmpa_str}
\group_end:
}
%------------------
\cs_set:Npn \fc_funcprint:n #1 {
% 1=string
\exp_args:NNf \str_set:Nn \l_tmpa_str { #1 }
\str_remove_all:Nn \l_tmpa_str {\protect}
\exp_args:NNxx
\str_replace_all:Nnn
\l_tmpa_str
{\space\space\c_left_brace_str}
{\c_left_brace_str}
\exp_args:NNxx
\str_replace_all:Nnn
\l_tmpa_str
{\space\c_left_brace_str}
{\c_left_brace_str}
\group_begin:
\color{blue}
\usefont{T1}{zi4}{b}{n}
\large
{\str_use:N \l_tmpa_str}
\group_end:
}
%****************************************************
%* utility commands
%****************************************************
%--------------------
\newcommand\mfssamplewidth{0.5in}
\NewDocumentCommand { \psymcmp } { m m } {
% 1=font name
% 2=symbol(s)
\use:c { #1 }
\tex_par:D
\colorbox
{blue!7}
{
\makebox[\mfssamplewidth][c]{\large #2}
}
{\usefont{T1}{lmr}{m}{n} \ #1}
}
%****************************************************
%* main commands
%****************************************************
%--------------------
\NewDocumentCommand { \mfsloadaseq } { o m +m } {
% 1=namespace
% 2=seq name
% 3=data
\IfNoValueTF { #1 }
{ \tl_clear:N \g_fc_namespace_tl }
{ \tl_gset:Nn \g_fc_namespace_tl { #1 } }
\cs_if_free:cT
{ g_fc_rwe \g_fc_namespace_tl #2 _seq }
{ \seq_new:c
{ g_fc_rwe \g_fc_namespace_tl #2 _seq }
}
\seq_gclear:c
{ g_fc_rwe \g_fc_namespace_tl #2 _seq }
\seq_gset_split:cno
{ g_fc_rwe \g_fc_namespace_tl #2 _seq }
{ , }
{ #3 }
}
%****************************************************
%*
%****************************************************
%--------------------
\NewDocumentCommand { \mfssymbolcompare } { o m m m } {
% 1=namespace
% 2=seq name
% 3=sample name
% 4=symbol
\IfNoValueTF { #1 }
{ \tl_clear:N \g_fc_namespace_tl }
{ \tl_gset:Nn \g_fc_namespace_tl { #1 } }
\tl_gset:Nn \g_tmpa_tl { #3 }
\tl_gset:Nn \g_tmpb_tl { #4 }
\group_begin:
\exp_args:Nx
\seq_map_function:cN
{ g_fc_rwe \g_fc_namespace_tl #2 _seq }
\fc_funcsymbolcompare:n
\group_end:
}
%****************************************************
%*
%****************************************************
%-------------------- Meta
\tl_new:N \l_myparmb_tl
%-------------------- MetaC
\NewDocumentCommand \mmc { s m } { % 1=run, 2 = text
\tl_set:Nn \l_myparmb_tl { #2 }
\IfBooleanTF { #1 }
{
\fc_funcprint:n { \tl_use:N \l_myparmb_tl }
\space $\mapsto$ \space \l_myparmb_tl
}
{
\fc_funcprintesc:n { \tl_use:N \l_myparmb_tl }
}
}
%-------------------- xMetaV
\NewDocumentCommand \xmmv { s O{\texttt} m } { % 1 = font, 2 = text
\tl_set:Nn \l_tmpa_tl { #2 { \tl_to_str:n {#3} }
\IfBooleanT {#1} { \space $\mapsto$\space #3 }
}
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\newcommand\mtable[1]{% 1-(text)font for mmode
\begin{tabular}{lll}
\rowcolor{brown!15}
generic macros
& specific macros
& direct input
\\
\mmc*{$\symsfup{a}x$}
& \mmc*{$\msansa x$}
& \xmmv*[#1]{$