平均能量损失

平均能量损失

从下面的 MWE 可以看出,我们定义:

\setlength{\parindent}{3em}
\setlength{\parskip}{3em}

其中,将在新段落开始之前parindent设置一个水平空间,并在转到另一个段落时设置一个垂直空间。3emparskip3em

可以注意到,在两个“段落”之间插入一个空白行时,结果是相同的(参见测试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在代码的“头部”中定义。“最小”或“最易读”的定义将获胜。

为什么?

看看我为什么要用这个 PDF 来举例查看此处或者在这里下载。在第 3 页,其中说二:有我不需要的缩进。

答案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

相关内容