\textrm{}
您能解释一下在数学模式下使用时它们之间的区别吗\mathrm{}
?在什么情况下一个比另一个更受欢迎?
答案1
\textrm
(和相应的开关\rmfamily
)更改字体的一个方面 - 在本例中为系列。如果可能的话,其他方面 - 如系列(粗体或非粗体)或形状(斜体) - 将被保留。 -\text...
命令可以嵌套,并且它们的“方面更改”可以组合:
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
\sffamily\bfseries\itshape abc
\textrm{abc}\textrm{\textup{abc}}
\end{document}
\mathrm
而其他数学字母表不会只改变字体的一个方面。它们会切换到特定的字体。它们使得以特殊字体打印符号成为可能。完全可以设置一些东西,例如\mathrm
使用时间,\mathbf
是粗体 palatino,\mathit
倾斜的 Arial 等。您还可以通过定义\mathbf
为浅色 itshape palatino 和\mathit
粗体 Arial 来迷惑所有人。您可以定义自己的特殊数学字体,例如\mathvector
或\mathmatrix
或\mathfancy
。由于所有这些命令都会切换到专用字体,因此它们不能嵌套。最后一个命令(内部命令)始终获胜:
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
$\mathit{A}
\mathbf{A}
\mathit{\mathbf{A}}
\mathbf{\mathit{A}}$
\end{document}
答案2
抱歉,我使用了巫术,但我想更详细地讲一下:
该\textrm
命令使用默认字体系列,即\familydefault
在 NFSS 中或加载\setmainfont
时指定的字体系列fontspec
。它还使用周围文本的粗细和形状参数。因此,的参数\textrm
将在斜体定理语句中以斜体显示,或在粗体标题中以粗体显示。内容将以文本模式呈现,因此输出中会出现空格。
该\mathrm
命令使用声明为 的字母表。这是用NFSS 中的或命令或中的命令\mathrm
设置的。它将字体更改为正常粗细和直立形状,并且内容将以数学模式呈现,因此空格将被忽略。\DeclareMathAlphabet
\DeclareSymbolFontAlphabet
\setmathrm
fontspec
大多数字体包会将\mathrm
和设置\textrm
为相同的字体。但有一个例外eulerpx
,它将默认罗马字体设置为 Palatino,将数学字母设置为 AMS Euler。
答案3
\mathrm
和之间的一个重要区别\textrm
是,它将、、等\mathrm
解释为数学运算符。因此,连字符被解释并排版为减号。如果您使用文本注释变量,则更合适。通常用于编写函数名称(尽管,-
+
=
\textrm
\mathrm
\operatorname
可能更合适)
例子:
\documentclass[]{article}
\usepackage[fleqn]{amsmath}
\begin{document}
\noindent This is \texttt{{\textbackslash}mathrm}:\\
$\mathrm{hello-world; How are you?}\\
\mathrm{I am fine. Woo-hoo! A+B=C}$
\\
\noindent This is \texttt{{\textbackslash}textrm}:\\
$\textrm{hello-world; How are you?}\\
\textrm{I am fine. Woo-hoo! A+B=C}$
\begin{align}
\texttt{{\textbackslash}mathrm\:\:\:\:} & x_\mathrm{special-case} = x_\mathrm{normal-case}^{1+\theta} \\
\texttt{{\textbackslash}textrm\:\:\:\:} & x_\textrm{special-case} = x_\textrm{normal-case}^{1+\theta} \\
\texttt{{\textbackslash}mathrm\:\:\:\:} & \mathrm{frame-rate} = \mathrm{frames / time-in-seconds} \\
\texttt{{\textbackslash}textrm\:\:\:\:} & \textrm{frame-rate} = \textrm{frames / time-in-seconds} \\
\texttt{{\textbackslash}mathrm\:\:\:\:} & \mathrm{duration} = \mathrm{end - start} \\
\texttt{{\textbackslash}textrm\:\:\:\:} & \textrm{duration} = \textrm{end - start}
\end{align}
\end{document}