14

I am, as an experiment, trying to simulate a certain typgraphic style which uses only the pilcrow sign to separate paragraphs -- no line breaking. What I'm after should look like this: enter image description here

This example was produced with the following code:

\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}

As you can see, I manually inserted \para everywhere necessary, and commented the newlines before it (to avoid having the pilcrow at the beginning of a line). Therefore, I also couldn't really use the \blindtext command, but had to manually insert its text.

Question: Is there a way to safely override the standard paragraph behaviour in the main text block to achieve this look, so that I

  1. Can use empty lines, as usual, for paragraphs (easy copy-pasting);
  2. also get this overridden behaviour for text that was produced by a macro (like, if I were using \blindtext); and
  3. don't mess up everything else, including (most) macros from other packages -- since that happens when I simply redefine \par globally.

I know too little about plain TeX to think of a low level solution -- maybe there isn't even one, but if so, I'd probably prefer it. However, as I am required to use XeTeX's font features for this project anyway, maybe there is a programmed LuaTeX solution (since, afaik, changing from XeTeX to LuaTeX isn't that complicated)?

To elaborate what I mean with "without messing up everything else": I would like to use other commands in the main text without problems, ideally without escaping. For example, try testing this:

\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}
2
  • Maybe helpfull: If you load the blindtext-package and add a \makeatletter\renewcommand{\blindtext@parend}[1]{{~}{\P}\ }\makeatother then \blindtext looks as you wanted. (But only \blindtext - so this is not an answer on your question.)
    – knut
    Commented Apr 11, 2015 at 10:31
  • You can always limit the scope with {\def\par{..}..} or \begingroup\def\par{..}..\endgroup.
    – Manuel
    Commented Apr 11, 2015 at 10:33

3 Answers 3

14

Here's a nopars environment:

\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}

Since \par is redefined, you can use \lipsum or \blindtext.

enter image description here

Be careful, because TeX loads a paragraph into memory, so this will absorb all the contents of the environment. You may want to add here and there something like

{\endgraf\noindent}

in order to avoid the problem.

8
  • Thanks, that was really quick! But could you elaborate on the last comment? I still get a problem if I, for example, insert a \todonote somewhere in between: ABD: EveryShipout initializing macros ! Undefined control sequence. Does that have to do with "absorbing everything"? Also, a lettrine at the beginning seems to get strangely shifted. Commented Apr 11, 2015 at 10:48
  • So, to summarize: is it possible to define this without affecting every other macro inside? Is there maybe a way to escape the environment nicely, when using other macros? Commented Apr 11, 2015 at 10:55
  • @phg Not sure about what you mean.
    – egreg
    Commented Apr 11, 2015 at 10:56
  • I'll update the example code. Commented Apr 11, 2015 at 10:56
  • @egreg May be grabbing the environment with \NewEnviron and \tl_replace_all:Nnn \BODY { \par } { .. } is more secure?
    – Manuel
    Commented Apr 11, 2015 at 10:57
5

For completeness, here's what I actually ended up with, using an argument to set an initial before the redefinition:

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

This allows me to use a lettrine at the beginning, which is somehow a required use case:

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

Having \lettrine inside the environment would lead to strange shifting of the L.

1

This is an update on egreg's answer and - beware - I did not test the code (I only somewhat proved it correct, to quote the author of TeX)

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

This should cope at least with anything that introduces a nested environment ...

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .