Wird ein mittels \input eingefügtes Wort zentriert, dann sieht man eine leichte Verschiebung nach links gegenüber dem gleichen direkt in das Dokument geschriebenen Wort. Diese rührt daher, dass neben dem Wort noch ein zusätzliches Leerzeichen mit zentriert wird. Das wird sichtbar, wenn man das Wort direkt ins Dokument schreibt und ein geschütztes Leerzeichen (~) anhängt.

Der Effekt entsteht genau dann, wenn weder am Ende der \input Datei noch im Dokument direkt nach dem \input ein Kommentarzeichen (%) steht. Das Problem selbst lässt sich also einfach beseitigen.

Mich würde aber eine Erklärung dieses Effektes interessieren.

Open in writeLaTeX
\begin{filecontents*}{test1.tex}
Test
\end{filecontents*}
\begin{filecontents*}{test2.tex}
Test%
\end{filecontents*}

\documentclass{scrartcl}
\begin{document}
\Huge
\begin{center}
  Test

  Test~% Vergleich mit geschütztem Leerzeichen

  \input{test1}

  \input{test1}%

  \input{test2}

  Test

\end{center}
\end{document}

alt text

gefragt 28 Jul '14, 14:15

esdd's gravatar image

esdd
17.7k254256
Akzeptiert-Rate: 62%

1

Das ist gleiche Leerzeichen, das du immer am Ende von Zeilen bekommst. Deine input-Datei enthält ja eine oder mehrere Zeilen.

(28 Jul '14, 14:24) Ulrike Fischer

Das normale Leerzeichen am Zeilenende stört hier aber nicht, bei einem \input aber schon, ist daher wohl nicht ganz gleich zu sehen, daher finde ich die Frage auch interessant. Mit flushright statt center auch erkennbar, mit flushleft nicht.

(28 Jul '14, 14:40) stefan ♦♦

Im Prinzip schon. Man muss nur berücksichtigen, dass hier nicht nur Leerzeichen zu finden sind, die TeX aus dem Eingabestrom automatisch entfernt. Siehe dazu das Beispiel aus meiner Antwort …

(28 Jul '14, 14:46) gast3

Dadurch, dass \input bei LaTeX nicht mehr das Primitiv von TeX ist, hast Du zum einen ein Leerzeichen am Ende der eingelesenen Datei, dann eine schließende Argumentklammer und dann wieder ein Leerzeichen durch das Zeilenende nach \input{…}. Das führt dazu, dass das zweite Leerzeichen signifikant wird. Vergleichbar ist es mit:

Open in writeLaTeX
\documentclass{article}
\newcommand*{\setze}[1]{#1}
\begin{document}
\centering
Test

\setze{Test}

\setze{Test }

\setze{Test }%

\setze{Test}%
\end{document}

Dabei entspricht \setze{Test} dem Fall, dass Du am Ende der eingeladenen Datei ein Prozent hast, \setze{Test } dem Fall, dass Du das nicht hast und das Prozent nach \setze{…} ggf. dem Prozent nach \input{…}.

Noch interessanter wird das, wenn man es im horizontalen Modus verwendet. Für den Fall sollte man den Artikel über \@bsphack und \@esphack lesen, der in der aktuellen DTK zu finden ist.

Verwendet man \input in der TeX-Syntax in LaTeX, dann entfällt das Problem ebenfalls:

Open in writeLaTeX
\begin{filecontents*}{test1.tex}
Test
\end{filecontents*}
\documentclass{scrartcl}
\begin{document}
\centering
  Test

  \input test1.tex

  Test
\end{document}

Wirklich empfehlen würde ich das aber nicht. Genauso würde ich nicht empfehlen, das TeX-Primitiv zu verwenden:

Open in writeLaTeX
\begin{filecontents*}{test1.tex}
Test
\end{filecontents*}
\documentclass{scrartcl}
\begin{document}
\centering
  Test

  \csname @@input\endcsname test1.tex

  Test
\end{document}

Obwohl natürlich auch dabei das Problem nicht auftritt. In beiden Fällen vernichtet TeX das semantische Leerzeichen aus dem Zeilenende quasi als Ende des Dateinamens.

Ein entscheidender Unterschied zwischen dem TeX-Primitiv \input und dem LaTeX-Befehl \input ist also die Verarbeitung des Arguments und daraus resultierend die Behandlung von Leerzeichen danach.

Permanenter link

beantwortet 28 Jul '14, 14:42

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 28 Jul '14, 16:11

@esdd Eigentlich sollte der Code so sein, wie er war, denn ein \setze{Test }% zeigt eigentlich nichts Besseres als \setze{Test}%. Aber für Dich habe ich auch das jetzt auch noch eingefügt. Damit sind dann alle Fälle erschlagen.

(28 Jul '14, 16:13) gast3

Danke :-)

(28 Jul '14, 16:21) esdd
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×23
×15
×12

gestellte Frage: 28 Jul '14, 14:15

Frage wurde gesehen: 9,891 Mal

zuletzt geändert: 28 Jul '14, 16:21