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

04 Dez '14, 11:16

cgnieder's gravatar image

cgnieder
22.1k253463

Wenn TeX das Ende einer Zeile sieht, wandelt es das in ein Leerzeichen um, exakt äquivalent, als wenn man ein Leerzeichen eingegeben hätte: Text Text ist genau gleich wie Text Text Genaugenommen wird das Zeichen eingefügt, das der Nummer des Registers `\endlinechar` entspricht (solange der Wert zwischen einschließlich `0` und `255` liegt). In der Voreinstellung ist das `13` und entspricht der Eingabe der Enter-Taste (_carriage return_, `^^M` in TeX-Schreibweise mit Kategorie-Code `5`=Enter-Taste). Folgt dem Ende einer Zeile ein weiteres Ende einer Zeile, wird stattdessen `\par` eingefügt. In Makro-Definitionen gilt das genauso wie im laufenden Text. Die Definition \newcommand*\foo{ foo bar } ist gleich der Definition \newcommand*\foo{ foo bar } wie folgendes Beispiel demonstriert: \documentclass{article} \newcommand*\foo{ foo bar } \begin{document} bla\foo{}bar \end{document} ![Ergebnis 1][1] Da Leerzeichen am Anfang einer Zeile verschluckt werden, nicht aber an anderen Stellen, sollte man Leerzeichen, die durch das Ende von Zeilen verursacht werden, verstecken, damit sie nicht unbeabsichtigt an Stellen auftauchen, an denen man sie nicht möchte: \newcommand*\foo{% foo bar% } Diese Definition ist jetzt gleichwertig zu \newcommand*\foo{foo bar} wie dieses Beispiel demonstriert: \documentclass{article} \newcommand*\foo{% foo bar% } \begin{document} bla\foo{}bar \end{document} ![Ergebnis 2][2] Jetzt sollte man aber auch nicht den Schluss ziehen, dass man einfach immer an das Ende einer Zeile ein `%` setzen sollte. Aufpassen muss man zum Beispiel nach Zuweisungen oder Primitiven, die Zahlen nach sich erwarten, wie `\ifnum` oder `\count\foo=...`. Diese schauen nämlich so lange weiter nach Zahlen, bis sie entweder ein nichtexpandierbares Token finden, das keine Zahl ist, oder bis sie auf ein Leerzeichen finden, das sie dann entfernen. Mit folgender Definition \newcommand*\test[1]{% \ifnum1=#1% 1% \else keine 1% \fi } liefert \test{1} vielleicht unerwarteterweise »keine 1«! Das liegt daran, dass die Definition gleichbedeutend ist mit \newcommand*\test[1]{\ifnum1=#11\else keine 1\fi} und tatsächlich `1` mit `11` verglichen wurde. Richtig Übrigens: nach Anweisung wie im Beispiel `\else` und `\fi` muss man kein Leerzeichen verstecken, da TeX Leerzeichen nach Anwendungen ignoriert. Eine bessere Definition des obigen wäre z.B.: \newcommand*\test[1]{% \ifnum1=#1 % Leerzeichen nach `#1' 1% \else keine 1% \fi } Ähnlich vorsichtig sollte man nach Zuweisungen sein, die Skips (Längen mit (Längen, die dehn- und stauchbare Anteile enthalten können) zuweisen und nach `plus` und `minus` suchen. [1]: http://i.imgur.com/rrdQtQ2.png [2]: http://i.imgur.com/Lhq2ixu.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 4

27 Jan '14, 20:16

cgnieder's gravatar image

cgnieder
22.1k253463

Wenn TeX das Ende einer Zeile sieht, wandelt es das in ein Leerzeichen um, exakt äquivalent, als wenn man ein Leerzeichen eingegeben hätte: Text Text ist genau gleich wie Text Text Genaugenommen wird das Zeichen eingefügt, das der Nummer des Registers `\endlinechar` entspricht (solange der Wert zwischen einschließlich `0` und `255` liegt). In der Voreinstellung ist das `13` und entspricht der Eingabe der Enter-Taste (_carriage return_, `^^M` in TeX-Schreibweise mit Kategorie-Code `5`=Enter-Taste). Folgt dem Ende einer Zeile ein weiteres Ende einer Zeile, wird stattdessen `\par` eingefügt. In Makro-Definitionen gilt das genauso wie im laufenden Text. Die Definition \newcommand*\foo{ foo bar } ist gleich der Definition \newcommand*\foo{ foo bar } wie folgendes Beispiel demonstriert: \documentclass{article} \newcommand*\foo{ foo bar } \begin{document} bla\foo{}bar \end{document} ![Ergebnis 1][1] Da Leerzeichen am Anfang einer Zeile verschluckt werden, nicht aber an anderen Stellen, sollte man Leerzeichen, die durch das Ende von Zeilen verursacht werden, verstecken, damit sie nicht unbeabsichtigt an Stellen auftauchen, an denen man sie nicht möchte: \newcommand*\foo{% foo bar% } Diese Definition ist jetzt gleichwertig zu \newcommand*\foo{foo bar} wie dieses Beispiel demonstriert: \documentclass{article} \newcommand*\foo{% foo bar% } \begin{document} bla\foo{}bar \end{document} ![Ergebnis 2][2] Jetzt sollte man aber auch nicht den Schluss ziehen, dass man einfach immer an das Ende einer Zeile ein `%` setzen sollte. Aufpassen muss man zum Beispiel nach Zuweisungen oder Primitiven, die Zahlen nach sich erwarten, wie `\ifnum` oder `\count\foo=...`. Diese schauen nämlich so lange weiter nach Zahlen, bis sie entweder ein nichtexpandierbaren nichtexpandierbares Token finden, der das keine Zahl ist, oder bis sie auf ein Leerzeichen finden, dass das sie dann entfernen. Mit folgender Definition \newcommand*\test[1]{% \ifnum1=#1% 1% \else keine 1% \fi } liefert \test{1} vielleicht unerwarteterweise »keine 1«! Das liegt daran, dass die Definition gleichbedeutet gleichbedeutend ist mit \newcommand*\test[1]{\ifnum1=#11\else keine 1\fi} und tatsächlich `1` mit `11` verglichen wurde. Richtig wäre z.B.: \newcommand*\test[1]{% \ifnum1=#1 % Leerzeichen nach `#1' 1% \else keine 1% \fi } Ähnlich vorsichtig sollte man nach Zuweisungen sein, die Skips (Längen mit dehn- und stauchbare Anteile enthalten können) zuweisen und nach `plus` und `minus` suchen. [1]: http://i.imgur.com/rrdQtQ2.png [2]: http://i.imgur.com/Lhq2ixu.png
Klicke auf Einblenden/Ausblenden von Überarbeitungen 3

27 Dez '13, 19:52

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 2
Beispiele mit Bildern hinzugefügt

22 Jun '13, 17:38

cgnieder's gravatar image

cgnieder
22.1k253463

Klicke auf Einblenden/Ausblenden von Überarbeitungen 1

10 Jun '13, 12:21

cgnieder's gravatar image

cgnieder
22.1k253463