我使用libertine
和newtxmath
字体包,它们提供直立希腊字母。但是,没有办法方便地在斜体和直立希腊字母之间切换。我需要一个命令,类似于讨论的命令这里,将普通的希腊字母改为直立的粗体符号。
命令\mathrm
、\mathbf
或\boldsymbol
均\bm
不会\theta
显示为\uptheta
。此外,isomath
包不适用于该编码,并且其字体不是所需的。我不想全局切换到直立希腊字母或更改字体形状。
\documentclass{report}
\usepackage[T1]{fontenc}
\usepackage[type1]{libertine}
\usepackage[libertine]{newtxmath}
\usepackage{bm}
\begin{document}
What I get: $\theta \bm{\theta} \mathrm{\theta} \bm{\mathrm{\theta}}$
What I want: $\theta \bm{\theta} \uptheta \bm{\uptheta}$
\end{document}
--- 部分解决方案 ---
我发现upgreek
可以定义一个新命令来在其参数中用\theta
它们的上位变体(例如)替换所有希腊字母宏(例如\uptheta
)。以下示例针对三个希腊字母执行此操作。该命令的作用域是本地的,因此两个变体都可以在单个方程中使用。
\documentclass{report}
\usepackage[T1]{fontenc}
\usepackage[type1]{libertine}
\usepackage[libertine]{newtxmath}
\usepackage{bm}
\newcommand{\upgreek}[1]{{
\renewcommand{\beta}{\upbeta}
\renewcommand{\theta}{\uptheta}
\renewcommand{\zeta}{\upzeta}
#1
}}
\begin{document}
$\upgreek{\theta} \bm{\upgreek{\theta}} \theta \bm{\theta}$
\end{document}
问题:
\mathrm
修补并运行\upgreek
其参数是否安全?
答案1
您可能想要向 的开发者提交功能请求newtxmath
;同时您可以更改希腊小写字母的定义。
\documentclass{report}
\usepackage[T1]{fontenc}
\usepackage[type1]{libertine}
\usepackage[libertine]{newtxmath}
\usepackage{bm}
\makeatletter
\re@DeclareMathSymbol{\alpha}{\mathord}{lettersA}{11}
\re@DeclareMathSymbol{\beta}{\mathord}{lettersA}{12}
\re@DeclareMathSymbol{\gamma}{\mathord}{lettersA}{13}
\re@DeclareMathSymbol{\delta}{\mathord}{lettersA}{14}
\re@DeclareMathSymbol{\epsilon}{\mathord}{lettersA}{15}
\re@DeclareMathSymbol{\zeta}{\mathord}{lettersA}{16}
\re@DeclareMathSymbol{\eta}{\mathord}{lettersA}{17}
\re@DeclareMathSymbol{\theta}{\mathord}{lettersA}{18}
\re@DeclareMathSymbol{\iota}{\mathord}{lettersA}{19}
\re@DeclareMathSymbol{\kappa}{\mathord}{lettersA}{20}
\re@DeclareMathSymbol{\lambda}{\mathord}{lettersA}{21}
\re@DeclareMathSymbol{\mu}{\mathord}{lettersA}{22}
\re@DeclareMathSymbol{\nu}{\mathord}{lettersA}{23}
\iftx@altnu
\re@DeclareMathSymbol{\nu}{\mathord}{lettersA}{40}
\fi
\re@DeclareMathSymbol{\xi}{\mathord}{lettersA}{24}
\re@DeclareMathSymbol{\pi}{\mathord}{lettersA}{25}
\re@DeclareMathSymbol{\rho}{\mathord}{lettersA}{26}
\re@DeclareMathSymbol{\sigma}{\mathord}{lettersA}{27}
\re@DeclareMathSymbol{\tau}{\mathord}{lettersA}{28}
\re@DeclareMathSymbol{\upsilon}{\mathord}{lettersA}{29}
\re@DeclareMathSymbol{\phi}{\mathord}{lettersA}{30}
\re@DeclareMathSymbol{\chi}{\mathord}{lettersA}{31}
\re@DeclareMathSymbol{\psi}{\mathord}{lettersA}{32}
\re@DeclareMathSymbol{\omega}{\mathord}{lettersA}{33}
\re@DeclareMathSymbol{\varepsilon}{\mathord}{lettersA}{34}
\re@DeclareMathSymbol{\vartheta}{\mathord}{lettersA}{35}
\re@DeclareMathSymbol{\varpi}{\mathord}{lettersA}{36}
\re@DeclareMathSymbol{\varrho}{\mathord}{lettersA}{37}
\re@DeclareMathSymbol{\varsigma}{\mathord}{lettersA}{38}
\re@DeclareMathSymbol{\varphi}{\mathord}{lettersA}{39}
\makeatother
\begin{document}
What I get: $\theta \bm{\theta}$
What I want: $\uptheta \bm{\uptheta}$
\end{document}
请注意,\mathbf{\theta}
不会有任何作用,只有拉丁字母会受到影响\mathbf
。
您还可以定义\mathup
和\mathbfup
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[type1]{libertine}
\usepackage[libertine]{newtxmath}
\usepackage{bm}
\DeclareRobustCommand{\mathup}[1]{\begingroup\changegreek\mathrm{#1}\endgroup}
\DeclareRobustCommand{\mathbfup}[1]{\begingroup\changegreekbf\mathbf{#1}\endgroup}
\makeatletter
\def\changegreek{\@for\next:={%
alpha,beta,gamma,delta,epsilon,zeta,eta,theta,kappa,lambda,mu,nu,xi,pi,rho,sigma,%
tau,upsilon,phi,chi,psi,omega,varepsilon,vartheta,varpi,varrho,varsigma,varphi}%
\do{\expandafter\let\csname\next\expandafter\endcsname\csname\next up\endcsname}}
\def\changegreekbf{\@for\next:={%
alpha,beta,gamma,delta,epsilon,zeta,eta,theta,kappa,lambda,mu,nu,xi,pi,rho,sigma,%
tau,upsilon,phi,chi,psi,omega,varepsilon,vartheta,varpi,varrho,varsigma,varphi}%
\do{\expandafter\def\csname\next\expandafter\endcsname\expandafter{%
\expandafter\bm\expandafter{\csname\next up\endcsname}}}}
\makeatother
\begin{document}
$\mathup{d}\mathup{\theta}d\theta$
$\mathbfup{d}\mathbfup{\theta}\bm{d}\bm{\theta}$
\end{document}
答案2
使用xelatex
或lualatex
您可以选择法式风格来呈现直立希腊字母,也可以使用命令来呈现粗体字母:
\documentclass{report}
\usepackage[math-style=french]{unicode-math}
\usepackage{libertine}
\setmathfont{XITS Math}
\begin{document}
What I get: $\theta \mbftheta \alpha \mbfalpha\mbftheta$ \\
What I want: $\theta \alpha\beta \mbfmu$
\end{document}