TeX/LuaTeX:\par 和 \\\indent 的排版输出会有所不同吗?为什么它们要添加单独的胶水?

TeX/LuaTeX:\par 和 \\\indent 的排版输出会有所不同吗?为什么它们要添加单独的胶水?

从视觉上看,结束一个段落并开始另一个段落只需插入换行符和(潜在)缩进即可。有两种方法可以实现这一点:(\par或空行)和\\\indent。在我下面的测试中,它们在视觉上产生了完全相同的结果。是否存在两者会产生稍有不同的结果的情况(例如字距、连字符/换行符、字体扩展等)?如果使用的话, 是否tex.linebreak会对所有文本在内部仅调用一次?(据我所知,在由(或空行)分隔的每个文本块上调用)鉴于 tex 的换行算法试图优化跨换行符的一些指标,并且使用意味着所有换行符(甚至跨视觉上不同的段落)都被一起考虑进行优化,当换行符数量增加很多时,这会导致速度变慢吗?\\\indenttex.linebreak\par\\\indent

\par以下是控制台输出、代码以及\\\indent并排比较的输出屏幕截图:

安慰:

\\\indent adds:
......\penalty 10000
......\glue 0.0 plus 1.0fil
......\penalty -10000

\par adds:
......\penalty 10000
......\glue(\parfillskip) 0.0 plus 1.0fil

为什么\\添加一些未命名的胶水\glue 0.0 plus 1.0fil\glue(\parfillskip) 0.0 plus 1.0fil添加的胶水\par?是否有单独的命名胶水或控制添加的胶水的方法\\,或者它是否始终等于添加的胶水\parfillskip(就像在本例中一样0.0 plus 1.0fil)?如果默认情况下相同,那么为什么有一个钩子可以控制一个,而不是另一个?

代码:

>>> lualatex par_or_linebreak.tex
\documentclass{article}
\usepackage[english]{babel}
\usepackage{blindtext}
\usepackage[paper=a2paper,lmargin=2in,tmargin=2in,rmargin=0.5in,bmargin=0.5in]{geometry}
\usepackage[absolute]{textpos}
\setlength{\TPHorizModule}{1in}
\setlength{\TPVertModule}{1in}
\textblockorigin{0in}{0in}

\begin{document}
\showoutput
\sloppy
\thispagestyle{empty}

\newcommand{\sampletext}{This an equation $x=a+b^2$  without any intrinsic meaning unless one sees some. \textbf{And this is some bold text to add some variety to this piece of text.} And am typing here,  difference diffierence $b=c^3$. \blindtext[1]}

\newcommand{\sampletextmore}{\blindtext[2]}

\newsavebox{\vboxwithpar}
\setbox\vboxwithpar = \vbox{{\hsize=2in\relax\noindent\sampletext\par\sampletext\par\sampletext\par\sampletextmore\par}}

\newsavebox{\vboxwithlinebreak}
\setbox\vboxwithlinebreak = \vbox{{\hsize=2in\relax\noindent\sampletext\\\indent\sampletext\\\indent\sampletext\\\indent\sampletextmore\par}}

\begin{textblock*}{2in}(1in,0.25in)
\copy\vboxwithpar
\end{textblock*}

\begin{textblock*}{2in}(3.5in,0.25in)
\copy\vboxwithlinebreak
\end{textblock*}

\end{document}

输出:

输出截图

答案1

在此处输入图片描述

\par结束段落但\\ 没有因此使用\\\noindent几乎从来都不正确的标记,尽管可以意外地给出相同的视觉输出。

何时使用 \par,何时使用 \\、\newline 或空行

很容易看到不同垂直空间的示例,也许不太明显的是有不同的换行。我在这里使用了较高的值,以便更简单地构建示例,但即使在标准类设置中\finalhyphendemerits使用更适中的值,您也可以看到相同的效果。\finalhyhendemerits

\documentclass{article}

\finalhyphendemerits=100000

\begin{document}

\def\txt{%
Random words in example paragraph text,
showing different behaviours for different markup.
Random words in example paragraph text,
showing different behaviours for different markup.
Random words in example paragraph text,
showing different behaviours for different markup.
Random words in example paragraph text,
showing different behaviours for different markup.
Random words in example paragraph text,
showing different behaviours for different markup.
Random words in example paragraph text,
showing different behaviours for different markup.
Random words in example paragraph text,
showing different behaviours  forzzzz different markup.\zz
Random words in example paragraph text,
showing different behaviours for different markup.
Random words in example paragraph text,
showing different behaviours for different markup.
Random words in example paragraph text,
showing different behaviours for different.
}

\noindent
\begin{minipage}[t]{6cm}
\def\zz{\par}
\txt 
\end{minipage}\quad
\begin{minipage}[t]{6cm}
\def\zz{\\\indent}
\txt 
\end{minipage}

\end{document}

对于标题中的问题,在不同的胶水上,没有理由期望胶水是相同的。是导致添加\partex 原始胶水的 tex 原始,是在其标准 latex 定义中最终使用的宏\parfillskip\\

\def\@gnewline #1{%
  \ifvmode
    \@nolnerr
  \else
    \unskip \reserved@e {\reserved@f#1}\nobreak \hfil \break
  \fi}

因此添加\hfil胶水。

相关内容