
Estou tentando compor um documento no Linux Libertine e também quero usar a fonte para caracteres alfanuméricos no modo matemático. Estou usando unicode-math
, não mathspec
, porque preciso especificar alfabetos como mathup
explicitamente para compatibilidade com pacotes como hepnames
. Não encontrei uma maneira de fazer isso com mathspec
. O motor que uso é o XeLaTeX. Inicialmente, especifico TeX Gyre Pagella Math como uma fonte matemática completa para símbolos, etc. Quero que as declarações subsequentes substituam a fonte dos caracteres de texto como Libertine.
Encontro vários problemas, ilustrados pelo MWE abaixo:
- O
\boldmath
switch não faz nada. - Os números não são renderizados corretamente em negrito e itálico, apenas letras.
\mathbf
(o último "A = 1" no MWE) é renderizado em Pagella, e não em Libertine.
Já tentei adicionar /{latin,Latin,num}
nas range
declarações, sem sucesso. O que estou perdendo aqui?
\documentclass{minimal}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont[%
Ligatures=TeX,
BoldFont=LinLibertine_RB.otf,
ItalicFont=LinLibertine_RI.otf,
BoldItalicFont=LinLibertine_RBI.otf]
{LinLibertine_R.otf}
\setmathfont{texgyrepagella-math.otf}
\setmathfont[range=\mathup]{LinLibertine_R.otf}
\setmathfont[range=\mathbf]{LinLibertine_RB.otf}
\setmathfont[range=\mathit]{LinLibertine_RI.otf}
\setmathfont[range=\mathbfit]{LinLibertine_RBI.otf}
\begin{document}
\begin{tabular}{lll}
Text & A = 1 & \textit{B = 2}\\
Textbf & \textbf{A = 1} & \textbf{\textit{B = 2}}\\
Math & $A = 1$ & $\mathit{B = 2}$\\
Boldmath & {\boldmath $A = 1$} & {\boldmath $\mathit{B = 2}$}\\
Mathbf & $\mathbf{A = 1}$ & $\mathbfit{B = 2}$\\
\end{tabular}
\end{document}
Sem alterações de fonte, tudo parece OK:
\documentclass{minimal}
\begin{document}
\begin{tabular}{lll}
Text & A = 1 & \textit{B = 2}\\
Textbf & \textbf{A = 1} & \textbf{\textit{B = 2}}\\
Math & $A = 1$ & $\mathit{B = 2}$\\
Boldmath & {\boldmath $A = 1$} & {\boldmath $\mathit{B = 2}$}\\
\end{tabular}
\end{document}
Responder1
Encontrei uma solução que funciona para mim. Comecei a brincar com version=bold
, como David sugeriu, mas isso continuou mudandotodosmeu texto do modo matemático em negrito. No final, mudei dos nomes dos arquivos para os nomes das fontes do sistema. (Eu queria evitar isso inicialmente, já que estou trabalhando no mesmo documento em várias máquinas diferentes.) Com nomes de fontes do sistema, \boldmath
funcionou de forma imediata e automática. Também descobri que \mathbfup
deve ser especificado em vez de \mathbf
.
Outro problema com o uso de nomes de fontes do sistema é que, por algum motivo, o estilo Libertine semi-negrito é carregado por padrão como negrito. Essa é a razão da BoldFont
especificação no MWE abaixo.
A solução não é perfeita. Você pode ver que todos os números no modo matemático são renderizados na vertical, mesmo no formato \mathit
. Além disso, o número \mathbfit
não está em negrito. Todas as fontes estão corretas e são boas o suficiente para meus propósitos.
\documentclass{minimal}
\usepackage{fontspec}
\usepackage{unicode-math}
\setmainfont[
BoldFont=Linux Libertine Bold,
BoldItalicFont=Linux Libertine Bold Italic]
{Linux Libertine}
\setmathfont{TeX Gyre Pagella Math}
\setmathfont[range=\mathup,
BoldFont=Linux Libertine Bold,
BoldItalicFont=Linux Libertine Bold Italic]
{Linux Libertine}
\setmathfont[range=\mathit,
BoldFont=Linux Libertine Bold Italic]
{Linux Libertine Italic}
\setmathfont[range=\mathbfup]{Linux Libertine Bold}
\setmathfont[range=\mathbfit]{Linux Libertine Bold Italic}
\begin{document}
\begin{tabular}{lll}
~ &\ Regular &\ Italic\\
Text &\ A = 1 &\ \textit{A = 1}\\
Textbf &\ \textbf{A = 1} &\ \textbf{\textit{A = 1}}\\
Math &\ $A = 1$ &\ $\mathit{A = 1}$\\
Boldmath &\ {\boldmath $A = 1$} &\ {\boldmath $\mathit{A = 1}$}\\
Mathbf &\ $\mathbf{A = 1}$ &\ $\mathbfit{A = 1}$\\
\end{tabular}
\end{document}
Responder2
tg85 anotadoduas questões com a resposta que ele forneceu à sua própria pergunta:
A solução não é perfeita. Você pode ver que todos os números no modo matemático são renderizados na vertical, mesmo no formato
\mathit
. Além disso, o número\mathbfit
não está em negrito. Todas as fontes estão corretas e são boas o suficiente para meus propósitos.
Omatemática unicodemanual(Figura 7) afirma que a forma vertical é, na verdade, escolhida propositalmente para os numerais, porque eles “devem sempre ser retirados da fonte vertical, mesmo no estilo itálico”. De acordo com esta afirmação, parece que o Unicode não define slots para dígitos em itálico - embora defina slots para dígitos em negrito, dígitos sem serifa, etc.https://en.wikipedia.org/wiki/Mathematical_operators_and_symbols_in_Unicode#Mathematical_Alphanumeric_Symbols_block.
Posso compreender, no entanto, que ainda se deseje a composição tipográfica produzida pormatemática unicodepara ser consistente com a composição tipográfica original baseada em LaTeX, onde \mathit{1}
produz um dígito um em itálico. Portanto, inspiradocódigo do tg85, encontrei uma solução que corrige esses dois problemas (também funciona com LuaLaTeX):
% !TEX program = xelatex
\documentclass{minimal}
\usepackage{ifthen}
\usepackage[svgnames]{xcolor}
\usepackage[
mathit = sym, mathup = sym, mathbf = sym,
math-style = ISO, bold-style = ISO
]{unicode-math}
\setmainfont{LinLibertine_R.otf}[
ItalicFont = LinLibertine_RI.otf,
BoldFont = LinLibertine_RB.otf,
BoldItalicFont = LinLibertine_RBI.otf
]
\setmonofont{FiraMono-Medium.otf}[
Scale = 0.81,
Color = DarkBlue
]
\setmathfont{XITSMath-Regular.otf}[
BoldFont = XITSMath-Bold.otf
]
\setmathfont{XITSMath-Regular.otf}[
version = mathitVersion
]
\setmathfont{XITSMath-Regular.otf}[
version = mathbfitVersion
]
\setmathfont{XITSMath-Bold.otf}[
version = boldmathVersion
]
\setmathfont{LinLibertine_R.otf}[
range = up/{num, latin, Latin, greek, Greek},
BoldFont = LinLibertine_RB.otf
]
\setmathfont{LinLibertine_RI.otf}[
range = it/{num, latin, Latin, greek, Greek},
BoldFont = LinLibertine_RBI.otf,
NFSSFamily = mathitalic
]
\setmathfont{LinLibertine_RBI.otf}[
range = bfit/{latin, Latin, greek, Greek},
NFSSFamily = mathbolditalic
]
\setmathfont{LinLibertine_RB.otf}[
range = bfup/{num, latin, Latin, greek, Greek}
]
\newif \ifBoldMath \BoldMathfalse
\let \mathversionorig \mathversion
\renewcommand{\mathversion}[1]{%
\ifthenelse{\equal{#1}{bold}}{%
\BoldMathtrue%
}{%
\BoldMathfalse%
}%
\mathversionorig{#1}%
}
\AtBeginDocument{%
\let \mathitorig \mathit%
\renewcommand{\mathit}[1]{%
\ifBoldMath%
\textbf{%
\SetSymbolFont{__um_fam1}{boldmathVersion}{TU}{mathbolditalic}{b}{it}%
\SetSymbolFont{__um_fam2}{boldmathVersion}{TU}{mathbolditalic}{b}{it}%
\mathversion{boldmathVersion}%
\(\mathitorig{#1}\)%
}
\else%
\textit{%
\SetSymbolFont{__um_fam1}{mathitVersion}{TU}{mathitalic}{m}{it}%
\mathversion{mathitVersion}%
\(\mathitorig{#1}\)%
}%
\fi%
}%
\let \mathbfitorig \mathbfit%
\renewcommand{\mathbfit}[1]{{%
\textbf{%
\SetSymbolFont{__um_fam1}{mathbfitVersion}{TU}{mathbolditalic}{b}{it}%
\mathversion{mathbfitVersion}%
\(\mathbfitorig{#1}\)%
}%
}}%
}
\newcommand{\testUnicodeMath}{%
\bigskip
\begin{tabular}{l @{\quad}l @{\quad} l @{\quad} l @{\quad} l}
Row
& Math version/alphabet
& Regular
& Upright
& Italic \\[\medskipamount]
1
& Text
& A = 1a
& \textup{B = 2b}
& \textit{C = 3c} \\
2 &
\texttt{\textbackslash textbf}
& \textbf{A = 1a}
& \textbf{\textup{B = 2b}}
& \textbf{\textit{C = 3c}} \\
3
& \texttt{\textbackslash mathversion\{normal\}} (default)
& $A = 1a + \beta \times \Gamma \int_{-\infty}^{\infty} \frac{\mathup{d}x}{2}$
& $\mathup{B = 2b + \beta \times \Gamma}$
& $\mathit{C = 3c + \beta \times \Gamma}$ \\
4
& \texttt{\textbackslash mathversion\{bold\}}/\texttt{\textbackslash boldmath}
& \boldmath $A = 1a + \beta \times \Gamma \int_{-\infty}^{\infty} \frac{\mathup{d}x}{2}$
& \boldmath $\mathup{B = 2b + \beta \times \Gamma}$
& \boldmath $\mathit{C = 3c + \beta \times \Gamma}$ \\
5
& \texttt{\textbackslash mathbf}/\texttt{\textbackslash mathbfup}/\texttt{\textbackslash mathbfit}
& $\mathbf{A = 1a + \beta \times \Gamma \int_{-\infty}^{\infty} \frac{\mathup{d}x}{2}}$
& $\mathbfup{B = 2b + \beta \times \Gamma}$
& $\mathbfit{C = 3c + \beta \times \Gamma}$ \\
\end{tabular}%
\bigskip
\bigskip
}
\begin{document}
\testUnicodeMath
\textit{Check that everything works properly by invoking it a~second time:}
\testUnicodeMath
\textit{Check that everything works properly by invoking it a~third time:}
\testUnicodeMath
\end{document}
Isso produz a seguinte saída – observe que o “3” na linha 3 da tabela agora está em itálico e em negrito itálico nas linhas 4 e 5 da tabela:
Observe também o contraste entre \mathversion{bold}
/ \boldmath
e \mathbf
/ \mathbfup
/ \mathbfit
: o primeiro também deixa todos os operadores, integrais, etc. em negrito, enquanto o último afeta apenas letras e dígitos.
Responder3
Usar o pacote amsbsy e \pmb parece obter o negrito.
\documentclass{minimal}
\usepackage{fontspec}
\usepackage{unicode-math}
\usepackage{amsbsy}
\setmainfont[%
Ligatures=TeX,
BoldFont=LinLibertine_RB.otf,
ItalicFont=LinLibertine_RI.otf,
BoldItalicFont=LinLibertine_RBI.otf]
{LinLibertine_R.otf}
\setmathfont{texgyrepagella-math.otf}
\setmathfont[range=\mathup]{LinLibertine_R.otf}
\setmathfont[range=\mathbf]{LinLibertine_RB.otf}
\setmathfont[range=\mathit]{LinLibertine_RI.otf}
\setmathfont[range=\mathbfit]{LinLibertine_RBI.otf}
\begin{document}
\begin{tabular}{lll}
Text & A = 1 & \textit{B = 2}\\
Textbf & \textbf{A = 1} & \textbf{\textit{B = 2}}\\
Math & $A = 1$ & $\mathit{B = 2}$\\
Boldmath & { $\pmb{A = 1}$} & {$\pmb{\mathit{B = 2}}$}\\
Mathbf & $\mathbf{A = 1}$ & $\mathbfit{B = 2}$\\
\end{tabular}
\end{document}
Responder4
Com xelatex
oulualatex
\documentclass{standalone}
\usepackage{hepparticles}
\usepackage{hepnames}
\usepackage[math-style=ISO]{unicode-math}
\usepackage{libertinus}
\usepackage{array}
\begin{document}
\tabcolsep=10pt
\begin{tabular}{>{\ttfamily\textbackslash}lll}
normalfont & Regular &\itshape Italic\\
textnormal & A = 1 & \textit{A = 1}\\
textbf & \textbf{A = 1} & \textbf{\textit{A = 1}}\\
mathup & $\mathup{A} = 1$ & $A = 1$\\
symbf & $\symbfup{A = 1}$ & $\symbfit{A = 1}$\\
mathbf & $\mathbf{A = 1}$ & $\mathbfit{A = 1}$\\
\end{tabular}
\end{document}