粗体和非粗体文本之间的字距

粗体和非粗体文本之间的字距

我想写一个粗体单词,后跟一个逗号和一个非粗体单词,如下所示:

\textbf{why}, blah

如果我只是写,why,TeX 会插入一个字距,将逗号稍微移近“y”。但是当我写{why},(即使没有\textbf),TeX 不会插入字距;显然字距调整不会发生在组边界之外。如果我写{why,},我会得到字距,但我也会得到一个粗体逗号。

我想知道的是:

  • 有没有办法让 TeX 识别出一对字母应该进行字距调整,即使中间有一个组边界?
  • 从风格上来说,应该那个逗号要加粗吗?

答案1

如果你想添加基于“外部”字体的字距,你可以定义

\expandafter\def\expandafter\nocorrlist\expandafter{\nocorrlist\?}
\newcommand{\?}[2]{%
  \sbox0{\hbox{#1}\hbox{#2}}%
  \sbox2{#1#2}%
  \kern\dimexpr\wd2-\wd0\relax#2}

\textbf{why}\?y,

将添加字距调整和逗号(同时忽略斜体校正)。的通常含义\nocorrlist,.;第一行我们添加\?到列表中,而不需要知道当前的含义。

一种不同的方法(提示在 Wyzard 的评论中)是定义一个新命令:

\makeatletter
\newcommand{\highlight}[1]{%
  \def\hl@text{#1}\futurelet\hl@next\hl@dokern}
\def\hl@dokern{%
  \sbox0{\textbf{\hl@text\/\hl@next}}%
  \sbox2{\textbf{\hl@text\hl@next}}%
  \textbf{\hl@text}%
  \kern\dimexpr\wd2-\wd0\relax
  }
\makeatother

仅当后面的字符\highlight{word}是空格时才可能应用字距调整。

答案2

  1. TeX 不会在两种不同的字体之间调整字距。粗体和普通字体变体来自不同的字体 (cmr10、cmb10)。
  2. LuaTeX 跨{和调整字距},因此{why},会获得其字距调整,但不会(参见第 1 点){\bf why},。PDFTeX(及更早版本)的行为与 Knuth 的 TeX 类似,不会跨组调整字距。

答案3

由于现在我已经想出了一个潜在的解决方案,我将重新引用 Bringhurst 的评论:

摘自 Bringhurst 的《印刷风格元素》第 60 页:

“当使用粗体来强调单词时,通常最好将标点符号留在背景中,也就是说,留在基本文本字体中。值得强调的是单词,而不是标点符号......”

因此,如果你按照这个方法操作,你的问题仍然存在。下面是一个解决方案,使用xspace包。正如 egreg 在评论中指出的那样,每个字符都需要不同的字距,因此下面的解决方案是一种折衷。从下面的比较中可以看出,这样做并没有多大好处,但是如果你把字距调大(让“y”或“w”的大小写看起来好看),逗号就会显得离大多数其他字符太近了。

作为该问题的实际解决方案,我可能会在文档中出现这种情况的少数情况下插入手动字距调整。(更不用说绝大多数人不会注意到它。)

\documentclass[12pt]{article}
\usepackage{xspace}
\makeatletter
\DeclareRobustCommand\xspace{\def\mykern{\kern0pt}\@xspace@firsttrue
  \futurelet\@let@token\@xspace}

\def\@xspace@check@token #1{%
    \ifx#1,%
       \def\mykern{\kern-.04em}% this is a compromise value
    \else
       \def\mykern{\relax}%
    \fi%
  \ifx\@xspace@q@nil#1%
    \expandafter\@xspace@break@loop
  \fi
  \expandafter\ifx\csname @let@token\endcsname#1%
    \let\@xspace@maybespace\expandafter\mykern
    \expandafter\@xspace@break@loop
  \fi
  \@xspace@check@token
}

% Not part of the solution, just a quick way to generate output
\newcommand{\textbfk}[1]{\def\tmparg{#1}\textbf{\tmparg}\xspace, with kern\par\textbf{\tmparg}, without kern\par}

\makeatother
\parindent=0pt
\begin{document}
\textbfk{wha} 
\textbfk{wha} 
\textbfk{whb} 
\textbfk{whc} 
\textbfk{whd} 
\textbfk{whe} 
\textbfk{whf} 
\textbfk{whg} 
\textbfk{whh} 
\textbfk{whi} 
\textbfk{whj} 
\textbfk{whk} 
\textbfk{whl} 
\textbfk{whm} 
\textbfk{whn} 
\textbfk{who} 
\textbfk{whp} 
\textbfk{whq} 
\textbfk{whr} 
\textbfk{whs} 
\textbfk{wht} 
\textbfk{whu} 
\textbfk{whv} 
\textbfk{whw} 
\textbfk{whx} 
\textbfk{why} 
\textbfk{whz} 


\end{document}

在此处输入图片描述

答案4

回答你的第二个问题,以下是芝加哥格式手册 (CMS)关于具有特定形状的文本后面的标点符号的形状(斜体或粗体):

6.2 标点和斜体

所有标点符号都应采用与正文或周围文本相同的字体(罗马字体或斜体),但属于不同字体(通常为斜体)的标题的标点除外。例如,单词,在本句中为斜体,后面跟着一个罗马字体的逗号;严格地说,逗号不属于,因为它是一个用作单词 [...] 的单词,所以它被斜体化。当然,可能很难分辨逗号是否是斜体(更不用说句号了);对于其他标记,斜体会更加明显。[...] 在以下前四个例子中,斜体文本旁边的标点符号属于周围的句子,因此以罗马字体显示。在最后两个例子中,斜体标题的两个标点符号——“Help”后面的感叹号和“Eats”后面的逗号——是斜体(“Leaves”后面的逗号是罗马字体)。

  • 为了消遣,他转向数学原理
  • 他们如何确定温度确实上升
  • 这些信Ab, 和C经常被认为是根本的。
  • 我还没有考虑过马尔萨斯的核心论点散文:人类的不完美。

  • 披头士'帮助!早在音乐视频鼎盛时期之前就发行了。
  • 我爱进食、射击和离开,[...]

6.3 标点符号和粗体或颜色

选择粗体(或延伸而言,用不同颜色打字),不同于斜体(见 6.2),更多是出于审美考虑,而非纯粹的逻辑决定。粗体或颜色后面的标点符号应根据粗体使用方式逐一处理。在第一个例子中,“行距”后面的句号属于粗体词汇表术语,因此设置为粗体;“行距”后面的句号是周围句子的一部分,因此设置为粗体。不是 设置为粗体。在中间两个例子中,粗体术语旁边的标点符号与它们同在,例如第一个例子中的第一个句号。在最后一个例子中,问号属于周围的句子,而不是粗体单词。

  • 行间距。领导
  • 图 6.伪经的扉页第二诗学
  • 出售:三个十年前的 CPU 和五个翻新的显示器。
  • 安装是否会一直停滞,直到我选择我接受

6.4 标点和字体——美学考虑

根据更传统的系统,句号、逗号、冒号和分号应以与紧接在它们之前的单词、字母、字符或符号相同的字体出现,如果它们与主文本或周围文本的字体不同的话。在第三和第四个例子中 6.2,a 和 b 后面的逗号以及马尔萨斯标题后面的冒号将用斜体表示,书名后面的逗号也将用斜体表示(进食、射击和离开),如上例所示。然而,问号或感叹号只有当其属于紧接在前的单词时,才会以相同的字体出现,如标题所示帮助!6.2. 该系统曾是芝加哥的首选,现在仍被一些人认为更美观,如果必须使用,应该只用于印刷出版物。在电子出版物中,字体可能由内容和外观决定(例如,书名可能被标记为这样,与周围的标点符号分开),在6.2应优先考虑。

看起来两者都有效,至少根据 CMS 来说是这样。在这两种情况下(粗体和斜体),我都会选择 CMS 的首选选项。也就是说,将标点符号格式与文本排版分开。

同意这一点,维基百科格式手册(MoS)还建议将文本的形状和后续的标点符号分开。

相关内容