我想知道公式中\mathrm{}
and/or \text{}
(或类似符号)的正确用法。我读过以下主题(以及更多主题):
但我对我的发现还不完全满意。据我所知,最好使用\text{}
以下方法:
$ a = b \text{if, and only if, ...} $
或者$ C = \text{const.} $
while\mathrm{}
将用于索引,例如
$ \rho_\mathrm{water} $
或者$ m_\mathrm{main} $
因为\text{}
不一定提供直立字体(例如在斜体环境中)。
我的问题\mathrm{}
是它不接受德语变音符号。我想命名一个参数$ m_{äq} $
,它是“m äquivalent”(等效质量)的缩写。当我使用m_\mathrm{äq}
“ä”时,它将不可见,甚至m_\mathrm{{\"a}q}
不起作用。m_\text{äq}
工作正常,但感觉\text{}
在这种情况下不是正确的命令。
我正在使用 mathtools (包括 amsmath)和
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
如果这有重要意义的话。
答案1
您应该使用\textup
或\textrm
如评论中所述。
它不起作用的原因是,即使您为文本数学指定 T1,仍然使用罗马字母的 7 位 OT1 编码。
你可以改变它:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\DeclareSymbolFont{operators}{T1}{cmr} {m}{n}
\makeatletter
\def\@inmathwarn#1{}
\makeatother
\begin{document}
$A_{\mathrm{Äpfel}}$
\end{document}
有效,但是尝试
$\Gamma=\Delta$
并且您发现大写希腊文(以及几个其他命令,尤其是数学重音符)需要 OT1 编码。当然,您可以将希腊文分配给另一个字体系列并重新定义所有命令,但许多软件包随后需要其定义的变体版本才能匹配新设置。
工作版本:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\DeclareSymbolFont{mathrmx}{T1}{cmr} {m}{n}
\DeclareSymbolFontAlphabet\mathrmx{mathrmx}
\usepackage{mathtools}
% make Ä follow the current math alphabet rather than
% use fam0 which os cmr which does not have the character.
\mathcode"C4="71C4
\makeatletter
\def\@inmathwarn#1{}
\makeatother
\begin{document}
\huge
$A_{\mathrmx{Äpfel}}$
$\Gamma=\Delta$
\end{document}
答案2
仅用于\textrm{äq}
下标。
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\begin{document}
$A_{\textrm{Äpfel}}$
\end{document}
答案3
如果您有几个文本下标并且其中没有特殊字符,请使用\mathrm
;否则使用\textnormal
然而,第二种方法有一个缺点:它不尊重\mathversion{bold}
,如下面的例子所示。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\begin{document}
$A_{\mathrm{apple}}$
{\mathversion{bold}$A_{\mathrm{apple}}$}
$A_{\textnormal{Äpfel}}$
{\mathversion{bold}$A_{\textnormal{Äpfel}}$}
\end{document}
如果只有少数下标,您可能只需在\bfseries
需要的地方添加即可;或者,如果您不使用粗体数学,可能就没什么可担心的。但是,某些类(例如 Springer 类)会将\mathversion{bold}
(或别名\boldmath
)添加到节标题的代码中。
因此,个人命令似乎是最好的:
\DeclareRobustCommand{\tsb}[1]{% textual subscript
\textnormal{\setupforversion#1}%
}
\makeatletter
\newcommand{\setupforversion}{%
\csname setupfor\math@version\endcsname
}
\makeatother
\newcommand{\setupfornormal}{}
\newcommand{\setupforbold}{\bfseries}
% set up also for possible other math versions you use
完整示例
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\DeclareRobustCommand{\tsb}[1]{% textual subscript
\textnormal{\setupforversion#1}%
}
\makeatletter % some syntactic sugar
\newcommand{\setupforversion}{%
\csname setupfor\math@version\endcsname
}
\makeatother
% the commands to execute for the various versions
\newcommand{\setupfornormal}{}
\newcommand{\setupforbold}{\bfseries}
\begin{document}
$A_{\mathrm{apple}}$
{\mathversion{bold}$A_{\mathrm{apple}}$}
$A_{\tsb{Äpfel}}$
{\mathversion{bold}$A_{\tsb{Äpfel}}$}
\end{document}
答案4
由于我自己也曾多次怀疑过(不仅限于此),我认为最好的方法是创建一种通用的方法,如果需要更改它,只需要回到序言即可。
使用我在此处发布的代码,以下语法有效:(A_|whatever|
可以选择另一个像A_[foo]
或A_(bar)
,但我更喜欢那些用于其他事情)。
基本上,我们使其_
活跃,并且,如果它后面跟着一个|
,那么参数由两个|..|
而不是一个来分隔{..}
,并且它会被放在我们选择的任何字体中。
\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\makeatletter
\def\sbtext|#1|{\sb{\textnormal{#1}}}
\begingroup\lccode`\~=`\_\lowercase{\endgroup\def~}{\@ifnextchar|\sbtext\sb}
\makeatother
\AtBeginDocument{\catcode`\_=12 \mathcode`\_="8000 }
\begin{document}
$A_{\mathrm{apple}}$
$A_|apple|$
$A_|Äpfel|$
$A_{\textnormal{Äpfel}}$
\end{document}