对于问题的描述直接卸载的代码块里面
\documentclass[fontset=ubuntu]{book}
\begin{document}
\hfill middle \hfill tail \hfill\par % 第一行的代码比第二行的代码末尾缩进一部分 1
\hfill middle \hfill tail \par % 2
\hfill middle \hfill tail \hfill \mbox{}\par % 3
\mbox{} \hfill middle \hfill \mbox{}\par % 两边加上mbox居中 4
\hfill middle \hfill \par % 第四行代码和第五行代码显示结果一样 5
\mbox{} \hfill middle \hfill \par % 6
\hfill middle \hfill \mbox{} \par % 右边加上mbox居中 7
\noindent{} \hfill middle \hfill \mbox{}\\ % 去掉首行缩进还是居中 8
\hfill middle \hfill tail \\ % 当不是段落首行的时候左边的hfill没有用了 9
middle
% 有效行数在右边
% 第一行和第二行 末尾缩进有点不同 hfill起到的作用不是那么的大 第三行右边加上一个零宽度盒子,就有了填充的效果
% 第8行 去掉段落首行缩进还是居中,和第7行类似
% 当不是段落首行的时候hfill作用没了 对比第1行和第9行
% 所以我想问问每个段落首行开始是有个什么东西(是一个零宽度盒子吗) 还有末尾 为啥让hfill没有正常的作用,只是缩进了一点
\end{document}
用lua-visual-debug
查看盒子的输出如下
第一行:
宽度为\parindent
的空盒子+\hfill
粘连+middle<空格>+\hfill
+tail<空格>+\parfillskip
第二行:
宽度为\parindent
的空盒子+\hfill
+middle<空格>+\hfill
+tail+\parfillskip
第三行:
宽度为\parindent
的空盒子+\hfill
+middle<空格>+\hfill
+tail<空格>+\hfill
+空盒子+\parfillskip
第四行:
宽度为\parindent
的空盒子+空盒子+空格+\hfill
粘连+middle<空格>+\hfill
+空盒子+\parfillskip
第五行:
宽度为\parindent
的空盒子+\hfill
+middle<空格>+\parfillskip
第六行
宽度为\parindent
的空盒子+空盒子+空格+\hfill
粘连+middle<空格>+\parfillskip
第七行:
宽度为\parindent
的空盒子+\hfill
+middle<空格>+\hfill
+空格+空盒子+\parfillskip
第八行:
空格+\hfill
+middle<空格>+\hfill
+空盒子+\hfil
第九行:
middle<空格>+\hfill
+tail+\hfil
第十行:
middle+\parfillskip
补充一些细节
\hfil {}123
严格等于\hfil{}123
;\parindent
的空盒子,如果有\noindent
,则什么也不插入(而不是零宽的空盒子);\parfillskip
的粘连相当于\hfil
,它在有更高级的\hfill
存在时会被覆盖;\par
前用户难免会输入空格,如something<Return>\par
或者paragraph<Return><Return>paragrah
,段落末行的最后一个粘连会被吃掉,所以\hfill\par
的\hfill
无效,要想起作用,可以再加一个粘连如\hfill\
或\hfill\hfill
,或者空盒子;\\
的意义相当于\unskip\nobreak\hfil\break
,\unskip
会去掉当前列的最后一个粘连,所以第九行末尾没有空格;\nobreak
、\break
是一些调整此参数的命令。所以TeX无法区分\\
后的粘连是在正常文档流之中还是紧随一个强制断行,干脆就吃掉断行后的所有间距。
谢谢你,看了你的回答,我还是有一点疑问,(昨天忘记写上来了)
\hfill
前面有空格也是会产生作用吗,第六点说\\
会清除下一行开始的间距,我也没有办法验证,还有我是用xelatex, ubuntu20.04, texstudio
的,能不能教一下lua-visual-debug
的操作,下一次我好自己找错误@u48359
\hfill
前面空格有作用;操作就是\usepackage{lua-visual-debug}
,用lualatex编译@u49020 谢谢写写