我是 LaTeX 的新手,在习惯它并尝试使用 \blindtext 的不同命令时,我注意到 \noindent 会导致文本需要更多的空格比标准缩进多。搜索 \noindent 的结果并没有超过命令本身告诉我的结果。
这是为什么? \noindent 的作用不只是删除缩进吗?还是有什么我还不知道的机制会导致这种情况?
\documentclass[12pt, a4paper]{article}
\usepackage[left=2cm, right=2cm, top=2.5cm, bottom=3cm]{geometry}
\usepackage{blindtext}
\usepackage{fancyhdr}
\pagestyle{fancy}
\begin{document}
%\noindent
\blindtext[2]
\end{document}
答案1
您永远不需要\noindent
,但是当它改变缩进时,它会改变整个段落的换行符。
第三段显示\noindent
这里没有什么特别之处,你得到相同的换行符,但更长最后一行保留缩进,但删除Lorem
第一行的一个单词
\documentclass[12pt, a4paper]{article}
\usepackage[left=2cm, right=2cm, top=1cm, bottom=1cm]{geometry}
\usepackage{blindtext}
\usepackage{fancyhdr}
\pagestyle{fancy}
\begin{document}
%\noindent
\blindtext[2]
\bigskip
\noindent
\blindtext[2]
\bigskip
\makeatletter
\def\gobbleword#1 {}
\let\blindtext@text@orig\blindtext@text
\def\blindtext@text{%
\ifnum1=\blind@countxx\expandafter\gobbleword\blindtext@text@orig
\else\blindtext@text@orig\fi}
\makeatother
\blindtext[2]
\end{document}
\noindent
如果单独使用(或者\blindtext
已经写好开始一个新段落),则会生成一个空段落,该空段落将被删除,但会导致双倍\parskip
空格:
\documentclass{article}
\begin{document}
\parskip 10pt
1aaa
\noindent
2aaa
3aaa
\end{document}
答案2
据我所知,\noindent
只有当 TeX 处于(内部)垂直模式时才有效:
如果 TeX 处于(内部)垂直模式,同时遇到\noindent
,则 TeX 会切换到水平模式。
水平模式是排版模式,TeX 会自动将段落文本拆分为行。
从垂直模式切换到水平模式意味着插入垂直\parskip
粘合并开始新的水平列表并执行 中存储的内容\everypar
。
\noindent
类似于\leavevmode
。
最重要的区别是:
带有\leavevmode
宽度的水平框\parindent
会放置在新水平列表的开头。因此,\leavevmode
TeX 通过排版创建的段落的第一行将在水平模式下进行后续材料的水平缩进。
如果\noindent
没有这样的框,则不会将其放置在新水平列表的开头,因此,\noindent
TeX 通过排版创建的段落的第一行将在水平模式下进行后续材料的水平缩进。
新\leavevmode
的水平列表在任何情况下都包含宽度为的水平框\parindent
,因此在任何情况下都不为空。
因此,\leavevmode
在任何情况下,都会排版一个水平列表,该列表至少包含宽度为的水平框\parindent
(反过来,该框不包含可见材料),以便在任何情况下,都会插入一条宽度为的行,该行前面是垂直行间粘合,该粘合是根据包含框的文本行的高度和深度\hsize
计算得出的。\baselineskip
\parindent
新\noindent
的水平列表可以为空。在这种情况下,它不会被排版,因此你既不会得到垂直行间粘合,也不会得到宽度为 的行\hsize
。
\documentclass{article}
\begin{document}
\parskip=1cm \parindent=2cm
aaa
\noindent bbb %<-TeX is in vertical mode when encountering \noindent, thus \noindent triggers
% switching to horizontal mode without inserting horizontal \parindent-glue.
ccc \noindent ddd %<-TeX is in horizontal mode when encountering \noindent, thus \noindent has no effect.
eee % The empty line after this comment yields an endlinechar of category 5(end of line)
% while the reading-apparatus is in state N(new line) so that TeX inserts the token
% \par which in turn causes TeX to switch to vertical mode.
\noindent % TeX is in vertical mode, thus \noindent triggers switching to horizontal mode
% and hereby inserting vertical \parskip-glue but no horizontal box of width \parindent.
% The empty line after this comment yields an endlinechar of category 5(end of line)
% while the reading-apparatus is in state N(new line) so that TeX inserts the token
% \par which in turn causes TeX to switch to vertical mode.
fff % When encountering the first f TeX switches from vertical mode to horizontal mode, hereby
% inserting vertical \parskip-glue and horizontal box of width \parindent. Thus between eee
% and fff you get vertical \parskip-glue twice.
$3+4\noindent=7$ %<-TeX is in math mode when encountering \noindent, thus \noindent has no effect.
$$3+4\noindent=7$$ %<-TeX is in math mode when encountering \noindent, thus \noindent has no effect.
\noindent
\fbox{%
\vbox{%
% Settting \hsize has no effect as with \noindent the newly to create horizontal
% list is empty and thus no material is typeset in horizontal mode where \hsize would apply to:
\hsize=\dimexpr.5\textwidth-2\fboxrule-2\fboxsep\relax
\hbox{AAA}\noindent\par\hbox{AAA}
}}%
\fbox{%
\vbox{%
% Settting \hsize has effect as with \leavevmode the \parindent-box is typeset in
% horizontal mode whereby \hsize does apply:
\hsize=\dimexpr.5\textwidth-2\fboxrule-2\fboxsep\relax
\hbox{AAA}\leavevmode\par\hbox{AAA}
}}%
\end{document}