![使文本加粗/斜体的“正确”方法是什么?](https://linux22.com/image/244865/%E4%BD%BF%E6%96%87%E6%9C%AC%E5%8A%A0%E7%B2%97%2F%E6%96%9C%E4%BD%93%E7%9A%84%E2%80%9C%E6%AD%A3%E7%A1%AE%E2%80%9D%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
在使文本加粗方面,这两种方法是否比其他方法更好/更易读/更“合适”/更常规?如果是,原因是什么?
I like my text \textbf{bold}
相对:
I like my text {\bf bold}
答案1
Marc van Dongen 给出了一个很好的答案。我再补充一个原因:
\it
并且\bf
不能很好地协同工作。也就是说,它们不能像人们直观预期的那样嵌套:
而\textit
和确实\textbf
可以很好地协同工作:
这很好。但是,您可能会注意到,它仍然无法处理对小型大写字母的嵌套样式调整,因为 Computer Modern 字体不包含倾斜或粗体小型大写字母:
如果这对您来说是个问题,那么请将该slantsc
包与该包结合使用lmodern
。 slantsc
除其他外,它还提供\rmfamily
(roman)、\ttfamily
(typewriter/teletype)、\sffamily
(sans-serif)、\bfseries
(boldface)、\itshape
(italics)、\slshape
(slant/oblique) 和\scshape
(small caps)。通过这些,可以以倾斜形式获得小型大写字母:
作为奖励,slantsc
已修复\textsl
以便正常运行\textsc
,因此您可以继续使用它们(如果您愿意)。
唉,我还没有找到一个可以修复嵌套实例行为的包\textit
。在排版中,当你嵌套斜体时,你应该回来斜体转换为罗马体。例如,下面的单词“Titanic”是嵌套斜体(理想情况下应该呈现为罗马体,而不是斜体):
田中,雪莉。在船上泰坦尼克号:大客轮沉没时是什么样子纽约:Hyperion/Madison Press,1998 年。
作为一种解决方法,人们通常可以写\textrm
下来在这些情况下暂时返回非斜体,但当然这只有在您知道嵌套斜体级别的确切数量时才有效,而情况可能并非总是如此,特别是在宏中。
更新:
正如其他人指出的那样,\textit
和\textsl
会自动进行斜体校正,而\it
、\itshape
、\sl
和 则\slshape
不会。因此,您可以写\textit{stuff}
,但必须写{\it stuff\/}
或{\itshape stuff\/}
才能获得相同的效果。
答案2
在一般的如果文本后面是同一行上的更多文本,并且后面没有小标点符号,则命令 ( \textbf
/ ) 方法更有用。如果文本本身就是一个段落,或者后面跟着一个小标点符号,那其实并不重要。在这种情况下,声明 ( /和/ ) 相当于命令。正如其他人指出的那样,声明和已被弃用,应避免使用。\textit
\bf
\bfseries
\it
\itshape
\bf
\it
要了解为什么应该优先使用这些命令,请注意\textit
在末尾插入斜体校正,如果文本以带有长上升部分的字母结尾,并且否则会碰到下一个字符,则会添加一个小的水平补偿。声明(\it
和\itshape
)不会插入斜体校正。
下面的第四、第五和第六行显示了命令可能与声明不同的原因。在第四行中,您可以获得正确的斜体校正,而在第五和第六行中则没有,这导致连字符ff
跑到h
.
\documentclass{article}
\usepackage{booktabs}
\begin{document}
\Huge
\begin{tabular}{lll}
\toprule
\verb|\textbf{fluff} hair| & \textbf{fluff} hair
\\\verb|{\bf fluff} hair| & {\bf fluff} hair
\\\verb|{\bfseries fluff} hair| & {\bfseries fluff} hair
\\\midrule
\verb|\textit{fluff} hair| & \textit{fluff} hair
\\\verb|{\itshape fluff} hair| & {\itshape fluff} hair
\\\verb|{\it fluff} hair| & {\it fluff} hair
\\\bottomrule
\end{tabular}
\end{document}
答案3
首先,您不应该使用 LaTeX2.0 中的过时\bf
宏\it
。它们不使用 LaTeX2e 的新字体选择方案 (NFSS)。因此,它们\bf
只会进行粗体和粗体处理,但不会与斜体设置混合,这使得粗体斜体无法实现。请使用新\bfseries
宏。
\textbf{<content>}
和之间没有太多实际区别{\bfseries <content>}
。我认为大多数人(对于短文本)使用第一种用法,因为它遵循常见的\somemacro{<content>}
LaTeX 样式。当然,如果您想使环境/组的其余部分加粗,则应使用后者。
您应该注意到\textbf
使用\bfseries
内部,因此后者是更基本的宏。的定义\textbf
是:
\ifmmode
\nfss@text {\bfseries #1}%
\else
\hmode@bgroup
\text@command {#1}%
\bfseries \check@icl #1\check@icr
\expandafter
\egroup
\fi
因此\textbf
在数学模式中切换到文本模式,但\bfseries
显然没有。它还在内容前后添加了斜体校正检查,这是 LaTeX2e 的一大特色。
它的其中一个好处\bfseries
是它不会将内容读取为参数,这会干扰逐字内容和其他特殊代码所需的 catcode 更改。
总之,我建议\textbf
将其用于较小的文本,主要是因为斜体校正,以及数学模式。在我看来,\bfseries
它更适合环境和较大的文本。一个值得注意的例外是,如果您有粗体和斜体(等等)组合,那么您可以写\textit{\bfseries <content>}
,以避免两组括号,但这更像是一种时尚选择。您不应该在现代 LaTeX 文档中使用\bf
。