如标题,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~1
或Theorem~2
以防止这种情况发生。
一般来说,你应该让 TeX 自己决定换行,不要在代码中乱放太多~
。使用它的缺点是你最终会得到一个无法中断的框,这会使换行变得困难。例如,在被接受的答案的“I~am~cool”示例中,框可能会延伸到右边距,这很不美观,并会导致水平框过满警告。