我需要区分斜体和直立希腊字母。我使用包来做这件事。这允许我在数学模式中通过输入alphabeta
来写一个直立字母。我可以扩展它以产生直立的吗?\mu
$\text\mu$
\mathrm
\mu
\documentclass{article}
\usepackage{amsmath}
\usepackage{alphabeta}
\begin{document}
\begin{align}
\text{is italic mu: } & \mu \mathit \mu\\
\text{should be upright mu: } & \text \mu \mathrm \mu
\end{align}
\end{document}
答案1
的解决方案pdftex
。未经广泛测试,因此可能存在我没有想到的问题。请注意alphabeta
不能无法加载,但提供了其基本功能。
\documentclass{article}
\usepackage{amsmath}% for \text
\usepackage{bm}
\usepackage{textalpha}
\makeatletter
\def\@tempa#1#2#3{%
\let#2=#1
\def#1{\TextOrMath{#3}{\ifnum\fam=0 \text{#3}\else#2\fi}}%
}
\@tempa\alpha\mathalpha\textalpha
\@tempa\beta\mathbeta\textbeta
\@tempa\gamma\mathgamma\textgamma
\@tempa\delta\mathdelta\textdelta
\@tempa\epsilon\mathepsilon\textepsilon
\@tempa\zeta\mathzeta\textzeta
\@tempa\eta\matheta\texteta
\@tempa\theta\maththeta\texttheta
\@tempa\vartheta\mathvartheta\texttheta
\@tempa\iota\mathiota\textiota
\@tempa\kappa\mathkappa\textkappa
\@tempa\lambda\mathlambda\textlambda
\@tempa\mu\mathmu\textmu
\@tempa\mnu\mathmnu\textmnu
\@tempa\xi\mathxi\textxi
\@tempa\rho\mathrho\textrho
\@tempa\varrho\mathvarrho\textrho
\@tempa\sigma\mathsigma\textsigma
\@tempa\tau\mathtau\texttau
\@tempa\upsilon\mathupsilon\textupsilon
\@tempa\phi\mathphi\textphi
\@tempa\chi\mathchi\textchi
\@tempa\psi\mathpsi\textpsi
\@tempa\omega\mathomega\textomega
\makeatother
\begin{document}
See \alpha\beta\gamma, but \theta\vartheta\ or \rho\varrho.\par
Normal: $a\alpha l\lambda r\rho\varrho x_{\mu}$\par
With \verb+\mathrm+: $\mathrm{a\alpha l\lambda r\rho\varrho x_{\mu}}$\par
With \verb+\bm+: $\bm{\alpha}$, but $\bm{\mathrm{\alpha}} $
\end{document}
答案2
答案3
由于你似乎在数学模式中主要(专门?)使用希腊字母,你可能需要熟悉上希腊语包,它提供了名为\upalpha
、\upbeta
等的宏。
\documentclass{article}
\usepackage{upgreek}
\begin{document}
\begin{tabular}{ll}
slanted greek math-mode letters: & $\alpha\beta\gamma\dots\mu\nu\dots\omega$ \\
upright greek math-mode letters: & $\upalpha\upbeta\upgamma\dots\upmu\upnu\dots\upomega$
\end{tabular}
\end{document}
答案4
在评论中,我提到了使用\unslant
希腊字母的可能性,就像这里所做的那样:直立希腊字体适合计算机现代。但是,楼主想要一个可以自动执行此操作的宏。
在这里,我创建了一个宏\mathgr{}
,它使用一个标记循环来检查参数中的每个标记...如果它们\up<greek>
可以,它就使用\unslant
它们(即,它只使用 upgreek 来确定标记的希腊语性)。
因为 tokcycle 在排版之前会收集标记,所以宏和分组参数之类的东西不会造成困难。例如,在 MWE 中,在参数中\mathgr
,我使用非希腊字母宏,我使用围绕指数的分组,我使用非希腊字母字符,我使用活动标记~
以及嵌套的\textrm
。
\ThisStyle{...\SavedStyle...}
该包的语法用于scalerel
为非倾斜字符保留较小的数学样式。
此方法仅适用于 pdflatex。
\documentclass{article}
\usepackage{upgreek}% ONLY USED TO DEFINE NAMES \up...
\usepackage{tokcycle,scalerel}
\newsavebox{\foobox}
\newcommand{\slantbox}[2][0]{\mbox{%
\sbox{\foobox}{#2}%
\hskip\wd\foobox
\pdfsave
\pdfsetmatrix{1 0 #1 1}%
\llap{\usebox{\foobox}}%
\pdfrestore
}}
\newcommand\unslant[2][-.25]{\ThisStyle{\slantbox[#1]{$\SavedStyle#2$}}}
\makeatletter
\newcommand\mathgr[1]{\tokcycle
{\addcytoks{##1}}
{\processtoks{##1}}
{\ifcsname up\expandafter\@gobble\string##1\endcsname
\addcytoks{\unslant{##1}}%
\else\addcytoks{##1}\fi}
{\addcytoks{##1}}{#1}%
\expandafter\mathrm\expandafter{\the\cytoks}%
}
\makeatother
\begin{document}
\begin{tabular}{ll}
slanted greek math-mode letters: &
$ab c \alpha\beta\gamma^{\pi+1}\dots\mu~\nu\dots\omega\textrm{a b c}$ \\
tokcycle + unslant &
$\mathgr{ab c \alpha\beta\gamma^{\pi+1}\dots\mu~\nu\dots\omega\textrm{a b c}}$
\end{tabular}
\end{document}
如果人们对的外观感到满意upgreek
,并希望避免的变化\unslant
,那么可以调整令牌循环以达到以下目的:
\documentclass{article}
\usepackage{upgreek}%
\usepackage{tokcycle}
\makeatletter
\newcommand\mathgr[1]{\tokcycle
{\addcytoks{##1}}
{\processtoks{##1}}
{\ifcsname up\expandafter\@gobble\string##1\endcsname
\addcytoks[1]{\csname up\expandafter\@gobble\string##1\endcsname}%
\else\addcytoks{##1}\fi}
{\addcytoks{##1}}{#1}%
\expandafter\mathrm\expandafter{\the\cytoks}%
}
\makeatother
\begin{document}
\begin{tabular}{ll}
slanted greek math-mode letters: &
$ab c \alpha\beta\gamma^{\pi+1}\dots\mu~\nu\dots\omega\textrm{a b c}$ \\
tokcycle + unslant &
$\mathgr{ab c \alpha\beta\gamma^{\pi+1}\dots\mu~\nu\dots\omega\textrm{a b c}}$
\end{tabular}
\end{document}
补充
OP 似乎决心“覆盖” \mathrm
。虽然我不建议替换它,但可以做到自动包含 token 循环
\documentclass{article}
\usepackage{upgreek}% ONLY USED TO DEFINE NAMES \up...
\usepackage{tokcycle,scalerel}
\newsavebox{\foobox}
\newcommand{\slantbox}[2][0]{\mbox{%
\sbox{\foobox}{#2}%
\hskip\wd\foobox
\pdfsave
\pdfsetmatrix{1 0 #1 1}%
\llap{\usebox{\foobox}}%
\pdfrestore
}}
\newcommand\unslant[2][-.25]{\ThisStyle{\slantbox[#1]{$\SavedStyle#2$}}}
\makeatletter
\newcommand\mathgr[1]{\tokcycle
{\addcytoks{##1}}
{\processtoks{##1}}
{\ifcsname up\expandafter\@gobble\string##1\endcsname
\addcytoks{\unslant{##1}}%
\else\addcytoks{##1}\fi}
{\addcytoks{##1}}{#1}%
\expandafter\svmathrm\expandafter{\the\cytoks}%
}
\let\svmathrm\mathrm
\renewcommand\mathrm[1]{\mathgr{#1}}
\makeatother
\begin{document}
\begin{tabular}{ll}
slanted greek math-mode letters: &
$ab c \alpha\beta\gamma^{\pi+1}\dots\mu~\nu\dots\omega\textrm{a b c}$ \\
mathrm (tokcycle + unslant) &
$\mathrm{ab c \alpha\beta\gamma^{\pi+1}\dots\mu~\nu\dots\omega\textrm{a b c}}$
\end{tabular}
\end{document}