带有德语变音符号 ä 的索引 - \mathrm{} 或 \text{}?

带有德语变音符号 ä 的索引 - \mathrm{} 或 \text{}?

我想知道公式中\mathrm{}and/or \text{}(或类似符号)的正确用法。我读过以下主题(以及更多主题):

对于何时使用 \text 和 \mathrm 有何偏好?

\textrm{} 和 \mathrm{} 之间的区别

\mathrm 真的比 \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}

相关内容