从下面的 MWE 可以看出,我们定义:
\setlength{\parindent}{3em}
\setlength{\parskip}{3em}
其中,将在新段落开始之前parindent
设置一个水平空间,并在转到另一个段落时设置一个垂直空间。3em
parskip
3em
可以注意到,在两个“段落”之间插入一个空白行时,结果是相同的(参见测试1)或插入\endgraf
(参见测试2)或插入\par
(见测试3) 它们之间。
至于测试4,其中\\
插入了文本的两个部分之间(测试4a和测试4b),这并不被解释为“新段落”,因为人们可以注意到第二行(测试4b) 既没有收到parindent
也没有收到parskip
。
test4a blablabla
test4b blablabla
我的问题是:制作测试5a和测试5b输出内容如下:
test5a blablabla
test5b blablabla
即:在转到下一行时调用\parindent
(第二行也有 的水平缩进3em
),但不调用\parskip
(这样就没有额外的垂直分隔)。3em
平均能量损失
\documentclass[a2paper, fontsize=24pt]{scrreprt}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
\setlength{\parindent}{3em}
\setlength{\parskip}{3em}
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
test1a blablabla
test1b blablabla
\endgraf
test2 blablabla\endgraf
test2b blablabla
\endgraf
test3a blablabla\par
test3b blablabla
\endgraf
test4a blablabla\\
test4b blablabla
\end{document}
优雅的?
现在,优雅的在这个 OP 中?
我印象中,我读到过,想要制作 WYSIWYG 文档,而其中的格式/排版已经在代码中直观可见,这是一个“初学者的错误”,不是吗?或者至少“太快”这样做。无论如何,对于我的特定目的,我认为诸如
test5a blablabla /command
test5b blablabla
是理想的,也就是说:发出命令应该像放在/something
行尾一样简单。/something
要附加的文本不需要放在代码“主体”中可见的任何其他环境中。当然,可以/command
在代码的“头部”中定义。“最小”或“最易读”的定义将获胜。
为什么?
答案1
您可以使用以下定义\fakepar
:
\documentclass{article}
\setlength{\parindent}{3em}
\setlength{\parskip}{3em}
\newcommand{\fakepar}{\mbox{}\\\hspace*{\parindent}}
\begin{document}
% Test 1
Lorem ipsum 1a \ldots
Lorem ipsum 1b \ldots
% Test 2
Lorem ipsum 2a \ldots \par
Lorem ipsum 2b \ldots
% Test 3
Lorem ipsum 3a \ldots \endgraf
Lorem ipsum 3b \ldots
% Test 4
Lorem ipsum 4a \ldots \\
Lorem ipsum 4b \ldots
% Test 5
Lorem ipsum 5a \ldots \fakepar
Lorem ipsum 5b \ldots
\end{document}
\fakepar
确保某物设置为 - \mbox{}
- 在插入换行符之前 - \\
- 并强制常规段落缩进 - \hspace*{\parindent}
。
答案2
\parindent
当非零时,我看不出有任何理由将设置为非零\parskip
(实际上,除了在商业信函中,我看不出有任何理由将设置为\parskip
)。
如果您选择设置非零的 parskip,我看不出有任何理由存在不与前一个段落分离的“特殊段落”。
但顾客永远是对的,所以这里有一个可能的解决方案,我让你去找出可能出错的地方。
\documentclass[a4paper]{scrreprt}
\newcommand{\parnoskip}{%
\par\begingroup\edef\x{\endgroup
\everypar={\the\everypar\noexpand\setlength{\parskip}{\the\parskip}}%
}\x
\parskip=0pt
}
%
\setlength{\parindent}{3em}
\setlength{\parskip}{3em}
%
\newcommand{\bla}{some text some text some text some text some text}
\newcommand{\blablabla}{\bla\bla\bla}
\begin{document}
test1a \blablabla
test1b \blablabla
test2 \blablabla\par
test2b \blablabla
test3a \blablabla\parnoskip
test3b \blablabla\parnoskip
test3c \blablabla
\parnoskip
test3d \blablabla
test4a \blablabla
\end{document}
如您所见,\parnoskip
它可以位于段落的最后一个单词旁边,也可以位于段落之间,并且后面可以跟一个空行。
不要\endgraf
在您的文档中使用,除非在某些命令定义中,但绝不要在正文中使用。
答案3
如果有多条线放在一起,那么\command
在每条线的末尾放置就有点不切实际了。因此,在我看来,更优雅的方式是定义环境:
\def\verse{\begingroup \obeylines \parskip=0pt \relax}
\def\endverse{\par\endgroup}
\verse
first line
second line
next line
last line
\endverse
\bye