尽管许多人试图解释\mathrm
、\textrm
和\textnormal
(\text
以及其他?)之间的区别,但我发现他们具有误导性。
例如参见 LaTeX 的 Wiki\mathrm
解释
article
为什么错了?让我们在 an和 a中尝试所有这些beamer
,你会看到差异,因此,错误。
equation.tex
\begin{eqnarray*}
\int_1^9\! \cos{x} \,\mathrm{d}x & & \textrm{this is textrm}\
\sum_1^9 y & & \textsf{this is textsf}\
\prod_1^9 z & & \textnormal{this is textnormal}\
\bigcup_1^9 w & & \text{and this is just text}
\end{eqnarray*}
article.tex
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\begin{document}
\input {equation}
\end{document}
到目前为止一切看起来都很好......
beamer.tex
\documentclass{beamer}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\begin{document}
\begin{frame}
\input{equation}
\end{frame}
\end{document}
在这里我们可以清楚地看到,它的\mathrm
行为不符合预期,即没有提供功能方面d。有人知道我在这里应该用什么吗?只是\text
?? oO
此外,我看不出\textnormal
和之间有什么区别\text
。
最后,\textrm
看起来没用......
答案1
您没有说出您期望\mathrm
做什么但是它会切换到正在使用的数学版本指定的罗马字体,这就是您的图像所显示的。
如果在当前文本字体不是默认字体的地方进行测试,您将看到\text
(切换到当前文本字体)和(切换到文档默认字体)之间的区别。\textnormal
\math....
命令是数学模式命令,它们切换用于字母的字体,但内容在数学模式下处理。 \text...
命令是文本模式命令,它们在文本模式下处理其内容,它们也允许在数学中使用,但在水平盒子中处理命令(默认情况下)或如果amsmath
加载它们\text
在内部使用,以便它们切换到下标等的较小尺寸,但是设置仍然在水平盒子中,以便内容被处理为文本而不是数学。
\documentclass{article}
\usepackage{amsmath}
\begin{document}
abcdef
$\text{abcdef} + \textrm{abcdef} + \textnormal{abcdef} + \mathrm{abcdef}$
{\sffamily
abcdef
$\text{abcdef} + \textrm{abcdef} + \textnormal{abcdef} + \mathrm{abcdef}$
}
\end{document}
定义运算符时,您应该真正使用\DeclareMathOperator
而不是直接使用字体命令,这样它就可以在 Beamer 中按您的意愿工作,提供无衬线字体。如果您有现有的表达式使用\mathrm
,并且想要\mathrm
像\mathsf
在 Beamer 中一样工作,您可以重新定义它,如下面的第二个表达式所示。
\documentclass{beamer}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\DeclareMathOperator\mycos{cos}
\begin{document}
\begin{frame}
$
\cos 1
\mathop{\mathrm{cos}} 2
\mycos 3
\operatorname{cos}4
\mathop{\mathsf{cos}}
$
\let\mathrm\mathsf
$
\cos 1
\mathop{\mathrm{cos}} 2
\mycos 3
\operatorname{cos}4
\mathop{\mathsf{cos}}
$
\end{frame}
\end{document}
答案2
摘自我的回答https://tex.stackexchange.com/a/394240/75284
David 的回答很好地解释了这一点,但我发现缺少的代码无法清楚地显示每个命令相对于其他命令的作用。因此,我使用 Times 克隆文本模式和默认的 Computer Modern 数学模式构建了以下示例。此外,文本模式更改为无衬线斜体以显示这些命令中的所有更改:
\text
仅使用“外部”的具有所有格式的文本模式。\textup
类似,只是直立。\textnormal
将其内容设置回正常文档字体,不进行任何其他格式设置。\textrm
保留所有文本格式,仅重置字体系列。\mathrm
行为不同,我认为它是直立的数学模式,它在我的示例文本中显示为减号,吞噬空间和平方根,而编译器不会抱怨切换到数学模式 - 它已经是了。
根据您想要保留的格式,其中之一就是最佳选择。
\documentclass{article}
\usepackage{amsmath} % for \text
\usepackage{newtxtext} % Times-like font
\obeylines % automatic linebreaks
\begin{document}
default textmode
\sffamily\itshape
current textmode
\(\text{text}\)
\(\textup{textup}\)
\(\textnormal{textnormal}\)
\(\textrm{textrm}\)
\(\mathrm{m ath rm-\sqrt{f}}\)
\end{document}