空格和“波浪”符号(波浪号/“~”)之间的区别?

空格和“波浪”符号(波浪号/“~”)之间的区别?

如标题,a和 有什么区别 ~

编译后我没有看到任何区别。

梅威瑟:

\documentclass[a4paper]{article}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}

\title{Your Paper}

\author{You}

\date{\today}

\begin{document}
\maketitle

I am cool.

I~am~cool.

\end{document}

答案1

不同之处可以在行尾看到。空格是可拆分的,而空格~是不可拆分的。

\documentclass[a4paper]{article}

\usepackage[english]{babel}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{graphicx}
\usepackage[colorinlistoftodos]{todonotes}

\title{Your Paper}

\author{You}

\date{\today}

\begin{document}
\maketitle

\hspace*{0.9\textwidth}I am cool.

\hspace*{0.9\textwidth}I~am~cool.

\end{document}

在此处输入图片描述

I am和三个单词cool在第二行连接在一起。

答案2

~是一个活跃角色,这意味着它与宏等相同\mbox。其功能由其定义描述,即

\nobreakspace{}

因此打字~就相当于打字\nobreakspace{}

做什么\nobreakspace?如下:

\leavevmode\nobreak\ 

\leavevmode(最后一个反斜杠后面有一个空格)。因此,如果我们已经处于一个段落中( ),则开始一个段落,否则不执行任何操作;然后\nobreak发出,它不允许在点(\nobreak)处进行任何换行,然后插入正常的单词间空格。

因此,当输入

no~break

两个单词之间会有空格,但是 之后不会换行no


为什么是{}后面那个\nobreakspace?如果你no~break在标题中有一个,那么在.aux文件中就会出现扩展版本

no\nobreakspace  {}break

引入括号是为了处理~需要在后面加空格的罕见情况;如果没有括号,no~ break则会写成

no\nobreakspace   break

读取文件时.aux,空格会被忽略。使用括号

no\nobreakspace  {} break

将被写入,并且额外的空间不会被忽略。


如果在输出中输入内容,会发生什么情况no~ break?会添加两个空格,但无法在空格处换行,因为只有在空格前面没有可丢弃项时,空格才是可行的换行点;因为\nobreakspace变成

\leavevmode\penalty 10000 \ 

和惩罚像空格一样是可丢弃的,并且其后的空格都不能用作换行符。

在相反的情况下,no ~break会输出两个空格,但是现在第一个空格处可能存在一个断点(并且如果发生这种情况,则两个断点都会与惩罚一起消失)。

答案3

~这是latex.ltx

\catcode `\~=13
\def~{\nobreakspace{}}

while\nobreakspace定义为

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

所以,活动字符~相当于一个不能断行的空格。

答案4

其他答案涵盖了什么~是和做什么。最常见的原因是为什么当我想要表达“图 1”或“定理 2”之类的内容时,我会使用它,因为数字前有一个空格(以及不幸的换行符)可能会导致数字出现在下一行的第一个位置。这看起来有点像我想开始枚举,但这不是我的本意。因此,我会在代码中写入Figure~1Theorem~2以防止这种情况发生。

一般来说,你应该让 TeX 自己决定换行,不要在代码中乱放太多~。使用它的缺点是你最终会得到一个无法中断的框,这会使换行变得困难。例如,在被接受的答案的“I~am~cool”示例中,框可能会延伸到右边距,这很不美观,并会导致水平框过满警告。

相关内容