安全地覆盖默认段落中断以使其变得不寻常

安全地覆盖默认段落中断以使其变得不寻常

作为一个实验,我试图模拟一种特定的印刷风格,这种风格只使用段落符号来分隔段落——没有换行。我想要的效果应该是这样的:在此处输入图片描述

该示例由以下代码生成:

\documentclass[a4paper,12pt]{memoir}
\usepackage{polyglossia}
\usepackage{fontspec}
\usepackage{csquotes}

\setmainlanguage{german}

\newcommand{\para}{{~}{\P}\ }

\begin{document}
Dies hier ist ein Blindtext zum Testen von Textausgaben. Wer diesen Text
liest, ist selbst schuld. Der Text gibt lediglich den Grauwert der Schrift an. Ist das wirklich so?
Ist es gleichgültig, ob ich schreibe: \enquote{Dies ist ein Blindtext} oder \enquote{Huardest
  gefburn}?  Kjift~-- mitnichten! (Ein Blindtext bietet mir wichtige Informationen).%
\para
An ihm messe ich die Lesbarkeit einer Schrift, ihre Anmutung, wie harmonisch die Figuren zueinander
stehen \& prüfe, wie breit oder schmal sie läuft. Ein Blindtext sollte möglichst viele verschiedene
Buchstaben enthalten \& in der Originalsprache gesetzt sein.  Er muss keinen Sinn ergeben, sollte
aber lesbar sein. Fremdsprachige Texte wie \enquote{Lorem ipsum} dienen nicht dem eigentlichen
Zweck, da sie eine falsche Anmutung vermitteln.%
\para 
An ihm messe ich die Lesbarkeit einer Schrift, ihre Anmutung, wie harmonisch die Figuren zueinander
stehen \& prüfe, wie breit oder schmal sie läuft. Ein Blindtext sollte möglichst viele verschiedene
Buchstaben enthalten \& in der Originalsprache gesetzt sein. Er muss keinen Sinn ergeben, sollte
aber lesbar sein. Fremdsprachige Texte wie \enquote{Lorem ipsum} dienen nicht dem eigentlichen
Zweck, da sie eine falsche Anmutung vermitteln.
\end{document}

如您所见,我手动插入了\para所有必要的内容,并注释了前面的换行符(以避免在行首出现段落标记)。因此,我也无法真正使用该\blindtext命令,而必须手动插入其文本。

问题:有没有办法安全地覆盖主文本块中的标准段落行为以实现这种外观,以便我

  1. 可以像往常一样使用空行作为段落(轻松复制粘贴);
  2. 还会得到由宏生成的文本的这种覆盖行为(例如,如果我使用\blindtext);并且
  3. 不要弄乱其他所有东西,包括来自其他包的(大多数)宏——因为当我只是\par全局重新定义时就会发生这种情况。

我对纯 TeX 了解太少,无法想出一个低级解决方案——也许根本就没有,但如果有的话,我可能会更喜欢它。但是,由于无论如何我都需要为这个项目使用 XeTeX 的字体功能,也许有一个编程的 LuaTeX 解决方案(因为据我所知,从 XeTeX 更改为 LuaTeX 并不复杂)?

详细说明一下“不弄乱其他所有内容”的意思:我希望在正文中使用其他命令而不会出现问题,最好是无需转义。例如,尝试测试一下:

\usepackage{todonotes, lettrine}
...
\lettrine{D}{ies hier} ist ein Blindtext zum Testen von Textausgaben. Wer diesen Text
liest, ist selbst schuld. Der Text gibt lediglich den Grauwert der Schrift an. Ist das wirklich so?
Ist es gleichgültig, ob ich schreibe: \enquote{Dies ist ein Blindtext} oder \enquote{Huardest
  gefburn}?  Kjift~-- mitnichten! (Ein Blindtext bietet mir wichtige Informationen).\todonote{Bla bla bla}

答案1

这是一个nopars环境:

\documentclass[a4paper,12pt]{memoir}
\usepackage{polyglossia}
\usepackage{fontspec}
\usepackage{csquotes}

\setmainlanguage{german}

\newenvironment{nopars}
  {\par\def\par{\unskip\nobreak\quad\P\nobreak\enspace}}
  {\endgraf}

\begin{document}
\begin{nopars}
Dies hier ist ein Blindtext zum Testen von Textausgaben. Wer diesen Text liest, ist selbst 
schuld. Der Text gibt lediglich den Grauwert der Schrift an. Ist das wirklich so? Ist es 
gleichgültig, ob ich schreibe: \enquote{Dies ist ein Blindtext} oder \enquote{Huardest
  gefburn}?  Kjift~-- mitnichten! (Ein Blindtext bietet mir wichtige Informationen).

An ihm messe ich die Lesbarkeit einer Schrift, ihre Anmutung, wie harmonisch die Figuren 
zueinander stehen \& prüfe, wie breit oder schmal sie läuft. Ein Blindtext sollte 
möglichst viele verschiedene Buchstaben enthalten \& in der Originalsprache gesetzt sein.  
Er muss keinen Sinn ergeben, sollte aber lesbar sein. Fremdsprachige Texte wie 
\enquote{Lorem ipsum} dienen nicht dem eigentlichen Zweck, da sie eine falsche Anmutung 
vermitteln.

An ihm messe ich die Lesbarkeit einer Schrift, ihre Anmutung, wie harmonisch die Figuren 
zueinander stehen \& prüfe, wie breit oder schmal sie läuft. Ein Blindtext sollte 
möglichst viele verschiedene Buchstaben enthalten \& in der Originalsprache gesetzt sein. 
Er muss keinen Sinn ergeben, sollte aber lesbar sein. Fremdsprachige Texte wie 
\enquote{Lorem ipsum} dienen nicht dem eigentlichen Zweck, da sie eine falsche Anmutung 
vermitteln.
\end{nopars}
\end{document}

由于\par被重新定义,因此您可以使用\lipsum\blindtext

在此处输入图片描述

要小心,因为 TeX 会将一个段落加载到内存中,所以这会吸收全部环境的内容。你可能想在这里或那里添加一些内容,例如

{\endgraf\noindent}

以避免出现该问题。

答案2

为了完整起见,下面是我实际得到的结果,使用参数在重新定义之前设置初始值:

\newenvironment{textblock}[1]
  {#1\def\par{\unskip\nobreak\quad{\color{red}\P}\nobreak\enspace}}
  {\endgraf}

这使我能够在开始时使用 lettrine,这在某种程度上是一个必需的用例:

\begin{textblock}{\lettrine{L}{ettrine}}
  \Blindtext[2]
\end{textblock}

\lettrine环境内部会导致奇怪的转变L

答案3

这是对 egreg 的答案的更新,并且 - 注意 - 我没有测试代码(我只是在某种程度上证明了它是正确的,引用 TeX 的作者的话)

\newenvironment{nopars}
  {\par\def\par{\if\@currenvir\@nopars\unskip\nobreak\quad\P\nobreak\enspace\else\endgraf\fi}}
  {\endgraf}

这至少应该可以应对引入嵌套环境的任何问题......

相关内容