使用‘~’和 Unicode 不间断空格之间有区别吗?

使用‘~’和 Unicode 不间断空格之间有区别吗?

(Lua)LaTeX 对待这两个字符是否相同,还是有一些区别?我习惯使用 Shift-Space 快捷键编写 Unicode NBSP,对我来说,使用它比波浪号更容易。我应该改变不间断空格字符 (U+00a0) 的行为,或者它是多余的?

答案1

在 PDFLaTeX 和latex现代发行版上的命令中,它们是相同的。两者都计算为\nobreakspace。在 LuaLaTeX 和 XeLaTeX 中,它们默认不同,但您可以更改这一点。

inputenc包将不间断空格字符(在每个包含它的编码中)解析为\nobreakspace。例如,在 Latin-1 编码中,定义是

\DeclareInputText{160}{\nobreakspace}

对于默认的 UTF-8,它是

\DeclareUnicodeCharacter{00A0}{\nobreakspace}

LaTeX 内核还创建了~一个活动字符,定义为

\def~{\nobreakspace{}}

在 LuaLaTeX 或 XeLaTeX 中,~仍然计算为\nobreakspace,在 LaTeX 内核中定义为

\DeclareRobustCommand{\nobreakspace}{%
   \leavevmode\nobreak\ }

但是,字符 U+00A0 被按字面解释。(尽管它仍然从 PDF 中搜索并复制空格字符。)您可以清楚地看到与测试文件的区别

\documentclass{article}

\begin{document}
foo~bar{^^a0}baz
\end{document}

拉丁现代样本

具体来说,U+00A0 是字体设置的固定宽度,并\nobreakspace使用与行其余部分相同的字间距 — 因此您可能需要等宽字体的固定宽度不间断空格。不间断空格字符、^^a0\symbol{"A0}\char"A0提供相同的输出。

但是,您可以重新定义 U+00A0 来计算\nobreakspace

\documentclass{article}
\usepackage{fontspec}
\usepackage{newunicodechar}

\newunicodechar{^^a0}{\nobreakspace}

\begin{document}
foo~bar{^^a0}baz
\end{document}

拉丁现代样本

答案2

在 LuaLaTeX 中它们有所不同。请看这个例子,“here” 前面的空格是 U+00A0。

在第一段中,活动 U+00A0 变为正常 U+00A0(当然,对于此设置,人们不想使用它\newunicodechar,但测试需要它)。在第二段中,活动 U+00A0 是\nobreakspace

\documentclass{article}
\usepackage{newunicodechar}

\def\testchar{ }% U+00A0
\newunicodechar{ }{\test}% U+00A0

\begin{document}

\let\test\testchar

Some text with nonbreaking space up to here; now spaces are normal and we go to the next line

\let\test\nobreakspace

Some text with nonbreaking space up to here; now spaces are normal and we go to the next line

\end{document}

在此处输入图片描述

如你所见,在第一段中,单词之间的间距并不统一,并且指定为 U+00A0 的间距较大。

如果你

\newunicodechar{ }{\nobreakspace}% U+00A0

在您的序言中,您实际上是将 U+00A0 更改为\nobreakspace(本质上与 相同~)。

相关内容