Überarbeitungsverlauf[Zurück]
Klicke auf Einblenden/Ausblenden von Überarbeitungen 12

24 Mai '14, 18:28

cgnieder's gravatar image

cgnieder
22.1k253463

Ich habe inzwischen ein bisschen recherchiert, und möchte versuchen, hier zusammenzufassen, was ich herausgefunden habe/schon wusste. ## Grundsätzliche Unterschiede zwischen `\par` und `\endgraf` ## Die folgenden zwei Punkte erwähnt [Frank Mittelbach in seiner Antwort][1] auf [When is it better to use \par than \endgraf?][2] auf TeX.sx: - `\par` (das Makro) ist in LaTeX das Äquivalent zu einer leeren Zeile in einem Dokument! Welche Bedeutung auch immer LaTeX in einem bestimmten Kontext einer leeren Zeile gibt, ist auch das, was `\par` in diesem Kontext liefert. Beispielsweise werden in einer Tabelle leere Zeilen ignoriert und so enthält auch die Definition von `\@array` die Zeile `\let\par\@empty`. Auch in Listen wird es umdefiniert. - Im Gegensatz dazu ist `\endgraf`/`\@@par` das **Primitiv**, das den horizontalen Modus beendet und das Material in Zeilen bricht. (Oder nichts macht oder einen Fehler produziert oder ...) Oder kurz und knapp ([Quelle][3]): > abstractly speaking `\par` implements an > abstract user/document level interface > and `\endgraf` a specific technical > operation. (*[...] `\\par` implementiert ein abstraktes Dokumenten-Level-Interface, `\\endgraf` eine bestimmte technische Operation.*) [Laut Frank Mittelbach][4] ist `\endgraf` allerdings lediglich ein Überbleibsel von plain TeX und sollte in LaTeX nicht verwendet werden: > actually `\endgraf` is a historic > leftover from plain TeX and you should > not use it at all in LaTeX code, you > should use `\@@par` to indicate that > it is the primitive you are after. ## Mögliche Konsequenzen aus Anwendersicht ## Obiges bedeutet im weiteren Schluss für mich, dass ein Anwender/eine Anwenderin (sprich: Dokumentenautor/in) eigentlich `\endgraf`/`\@@par` **im Idealfall** nie verwenden sollen müsste und wenn er/sie soch in die Verlegenheit kommt, dann liegt das entweder an einer ungünstigen Definition eines Befehls in einem Paket und sollte dort korrigiert werden, oder der Anwender/die Anwenderin macht irgendetwas (im Sinne von LaTeX *best-practice*) falsch. *Das beantwortet für mich die Frage, ob ich als Anwender im Sinne von Dokumentenautor `\\@@par`/`\\endgraf` kennen muss, mit Nein.* (sag niemals nie ;) ). Dafür spricht aus meiner persönlichen Sicht auch schon, dass ich mehr als 10 Jahre gut damit ausgekommen bin, `\endgraf` gar nicht zu kennen. Allerdings scheinen die Meinungen hier auseinander zu gehen. @Ulrike argumentiert in ihrer Antwort, dass `\endgraf` für einen Anwender da ist, wenn er/sie **das Primitiv** braucht. Ich bin davon nicht völlig überzeugt, kann die Argumentation aber nachvollziehen. Meinem Bauchgefühl nach (und [Frank bestätigt mir das][5]), sollte man dabei aber vorsichtig sein: > no: `\@@par` is not intended for user > level while `\endgraf` was (by Don) and > although it is not explicitly > documented in LaTeX for this purpose > one can argue that `\endgraf` is a user > level command in LaTeX. Personally I > think it is a but dangerous as you > need to really understand the above > difference (and partly how LaTeX does > \par redefs) to make good use of > `\endgraf`. (*Nein, `\\@@par` ist nicht für das Anwenderlevel gedacht [klar zu erkennen an den @ (Clemens)]), `\\endgraf` war es (von Don) schon, und obwohl es in LaTeX nicht explizit dokumentiert ist, kann man argumentieren, es sei ein Anwenderbefehl. Persönlich denke ich, es ist einer, aber ein gefährlicher, weil man den Unterschied [zu LaTeXs `\\par` (Clemens)] wirklich verstanden haben muss (und zum Teil auch, wie LaTeX `\\par`-Redefinitionen macht), um guten Gebrauch davon zu machen.*) ---------- Weil LaTeX die Definition von `\par` (dem Makro) immer wieder je nach Kontext anpasst, ist es also grundsätzlich wesentlich in der Regel vermutlich sicherer, `\par` (das Makro) zu verwenden, etwa in einem `\item` in Listen, statt mit `\endgraf` auf jeden Fall (nur) das Primitiv zu bekommen. ---------- Wenn jemand *genau das Primitiv* einsetzen möchte, möchte oder muss, dann sollte er `\@@par` verwenden (oder auf Dokument-Level notgedrungen eben auch `\endgraf`). (Hier bin ich noch auf der Suche nach Fällen, wo ich tatsächlich (ausschließlich) das Primitiv haben möchte. Meinem Gefühl nach sind die eher rar gesät, Beispiele würden mich aber interessieren.) [1]: http://tex.stackexchange.com/a/97052/5049 [2]: http://tex.stackexchange.com/q/96865/5049 [3]: http://tex.stackexchange.com/questions/96865/when-is-it-better-to-use-par-than-endgraf#comment208623_97052 [4]: http://tex.stackexchange.com/questions/96865/when-is-it-better-to-use-par-than-endgraf#comment208626_96868 [5]: http://tex.stackexchange.com/questions/96865/when-is-it-better-to-use-par-than-endgraf#comment415976_97052 [6]: http://texwelt.de/wissen/upfiles/endgraf.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 11

24 Mai '14, 17:43

cgnieder's gravatar image

cgnieder
22.1k253463

Ich habe inzwischen ein bisschen recherchiert, und möchte versuchen, hier zusammenzufassen, was ich herausgefunden habe/schon wusste. ## Grundsätzliche Unterschiede zwischen `\par` und `\endgraf` ## Die folgenden zwei Punkte erwähnt [Frank Mittelbach in seiner Antwort][1] auf [When is it better to use \par than \endgraf?][2] auf TeX.sx: - `\par` (das Makro) ist in LaTeX das Äquivalent zu einer leeren Zeile in einem Dokument! Welche Bedeutung auch immer LaTeX in einem bestimmten Kontext einer leeren Zeile gibt, ist auch das, was `\par` in diesem Kontext liefert. Beispielsweise werden in einer Tabelle leere Zeilen ignoriert und so enthält auch die Definition von `\@array` die Zeile `\let\par\@empty`. Auch in Listen wird es umdefiniert. - Im Gegensatz dazu ist `\endgraf`/`\@@par` das **Primitiv**, das den horizontalen Modus beendet und das Material in Zeilen bricht. (Oder nichts macht oder einen Fehler produziert oder ...) Oder kurz und knapp ([Quelle][3]): > abstractly speaking `\par` implements an > abstract user/document level interface > and `\endgraf` a specific technical > operation. (*[...] `\\par` implementiert ein abstraktes Dokumenten-Level-Interface, `\\endgraf` eine bestimmte technische Operation.*) [Laut Frank Mittelbach][4] ist `\endgraf` allerdings lediglich ein Überbleibsel von plain TeX und sollte in LaTeX nicht verwendet werden: > actually `\endgraf` is a historic > leftover from plain TeX and you should > not use it at all in LaTeX code, you > should use `\@@par` to indicate that > it is the primitive you are after. ## Mögliche Konsequenzen aus Anwendersicht ## Obiges bedeutet im weiteren Schluss für mich, dass ein Anwender/eine Anwenderin (sprich: Dokumentenautor/in) eigentlich `\endgraf`/`\@@par` **im Idealfall** nie verwenden sollen müsste und wenn er/sie soch in die Verlegenheit kommt, dann liegt das entweder an einer ungünstigen Definition eines Befehls in einem Paket und sollte dort korrigiert werden, oder der Anwender/die Anwenderin macht irgendetwas (im Sinne von LaTeX *best-practice*) falsch. *Das beantwortet für mich die Frage, ob ich als Anwender im Sinne von Dokumentenautor `\\@@par`/`\\endgraf` kennen muss, mit Nein.* Nein.* Dafür spricht aus meiner persönlichen Sicht auch schon, dass ich mehr als 10 Jahre gut damit ausgekommen bin, `\endgraf` gar nicht zu kennen. Allerdings scheinen die Meinungen hier auseinander zu gehen. @Ulrike argumentiert in ihrer Antwort, dass `\endgraf` für einen Anwender da ist, wenn er/sie **das Primitiv** braucht. Ich bin davon nicht völlig überzeugt, kann die Argumentation aber nachvollziehen. Meinem Bauchgefühl nach (und [Frank bestätigt mir das][5]), sollta sollte man dabei aber vorsichtig sein: > no: `\@@par` is not intended for user > level while `\endgraf` was (by Don) and > although it is not explicitly > documented in LaTeX for this purpose > one can argue that `\endgraf` is a user > level command in LaTeX. Personally I > think it is a but dangerous as you > need to really understand the above > difference (and partly how LaTeX does > \par redefs) to make good use of > `\endgraf`. (*Nein, `\\@@par` ist nicht für das Anwenderlevel gedacht [klar zu erkennen an den @ (Clemens)]), `\\endgraf` war es (von Don) schon, und obwohl es in LaTeX nicht explizit dokumentiert ist, kann man argumentieren, es sei ein Anwenderbefehl. Persönlich denke ich, es ist einer, aber ein gefährlicher, weil man den Unterschied [zu LaTeXs `\\par` (Clemens)] wirklich verstanden haben muss (und zum Teil auch, wie LaTeX `\\par`-Redefinitionen macht), um guten Gebrauch davon zu machen.*) ---------- Weil LaTeX die Definition von `\par` (dem Makro) immer wieder anpasst, ist es also grundsätzlich wesentlich sicherer, `\par` (das Makro) zu verwenden, etwa in einem `\item` in Listen, statt mit `\endgraf` auf jeden Fall das Primitiv zu bekommen. Das bedeutet für mich auch, dass, sollte man in die Verlegenheit kommen, ein `\par` (das Makro) in ein kurzes Argument schmuggeln zu müssen (weil das Argument kurz ist und `\par` (das Token) daher nicht erlaubt), es *in der Regel* zu bevorzugen wäre, etwas wie das in der Frage erwähnte `\fakepar` zu verwenden, also ein Makro, das zu `\par` (dem Makro) expandiert. \documentclass{article} \newcommand*\fakepar{\par} \begin{document} \begin{itemize} \item \verb+\fakepar+ (vermutlich versteckt in einem anderen Makro, \ldots) \fakepar foo bar baz \fakepar foo bar baz \item \verb+\endgraf+ (vermutlich versteckt in einem anderen Makro, \ldots) \endgraf foo bar baz \endgraf foo bar baz \end{itemize} \end{document} ![alt text][6] ---------- Wenn jemand *genau das Primitiv* einsetzen möchte, dann sollte er `\@@par` verwenden (oder auf Dokument-Level notgedrungen `\endgraf`). (Hier bin ich noch auf der Suche nach Fällen, wo ich tatsächlich (ausschließlich) das Primitiv haben möchte. Meinem Gefühl nach sind die eher rar gesät, Beispiele würden mich aber interessieren.) [1]: http://tex.stackexchange.com/a/97052/5049 [2]: http://tex.stackexchange.com/q/96865/5049 [3]: http://tex.stackexchange.com/questions/96865/when-is-it-better-to-use-par-than-endgraf#comment208623_97052 [4]: http://tex.stackexchange.com/questions/96865/when-is-it-better-to-use-par-than-endgraf#comment208626_96868 [5]: http://tex.stackexchange.com/questions/96865/when-is-it-better-to-use-par-than-endgraf#comment415976_97052 [6]: http://texwelt.de/wissen/upfiles/endgraf.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 10

24 Mai '14, 14:31

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 9

23 Mai '14, 19:40

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 8

23 Mai '14, 18:45

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 7

23 Mai '14, 16:47

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 6

23 Mai '14, 16:31

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 5

23 Mai '14, 15:06

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

23 Mai '14, 14:51

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

23 Mai '14, 14:46

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2

23 Mai '14, 14:35

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

23 Mai '14, 14:21

cgnieder's gravatar image

cgnieder
22.1k253463