Discussion:
\input innerhalb einer \input-Datei – welcher Pfad?
(zu alt für eine Antwort)
Markus Gail
2024-04-14 16:48:14 UTC
Permalink
Hallo!

Ich binde mit \input eine Datei ein, die u. a. Pfade zu Bildern und weiteren
\input-Dateien enthalten soll.

Das Input wird somit verschachtelt. Es ist mir bisher nicht gelungen,
auszutüfteln, welche Pfadangaben innerhalb der eingebundenen Input-Datei
gilt.

Welcher Pfad wird in der eingebundenen Datei angesprochen?

Gruß
M.
Ulrich D i e z
2024-04-15 00:28:34 UTC
Permalink
Post by Markus Gail
Hallo!
Ich binde mit \input eine Datei ein, die u. a. Pfade zu Bildern und weiteren
\input-Dateien enthalten soll.
Das Input wird somit verschachtelt. Es ist mir bisher nicht gelungen,
auszutüfteln, welche Pfadangaben innerhalb der eingebundenen Input-Datei
gilt.
Welcher Pfad wird in der eingebundenen Datei angesprochen?
Gruß
M.
Im TeXbook, "Chapter 20: Definitions (also called Macros)", findet sich:

| \input<file name>. The expansion is null; but TeX prepares to read
| from the specified file before looking at any more tokens from its
| current source.

Im TeXbook, "Chapter 24: Summary of Vertical Mode", findet sich:

| The syntax for <file name> is not standard in TeX, because different
| operating systems have different conventions. You should ask your
| local system wizards for details on just how they have decided to
| implement file names. However, the following principles should hold
| universally: A <file name> should consist of <optional spaces>
| followed by explicit character tokens (after expansion). A sequence of
| six or fewer ordinary letters and/or digits followed by a space should
| be a file name that works in essentially the same way on all
| installations of TeX. Uppercase letters are not considered equivalent
| to their lowercase counterparts in file names; for example, if you
| refer to fonts cmr10 and CMR10, TeX will not notice any similarity
| between them, although it might input the same font metric file for
| both fonts.

Die TeX-Distributionen MiKTeX und TeX Live sind Web2C-Implementierungen
(<https://tug.org/texinfohtml/web2c.html>), während bei
Web2C-Implementierungen wiederum der Umgang mit Dateipfaden und -namen
bzw der Umgang mit <file name> in der Kpathsea library
(<https://tug.org/texinfohtml/kpathsea.html>) implementiert sind.
In der Kpathsea library ist auch geregelt, wie TeX vorgeht, wenn ein
Dateiname ohne Extension angegeben wird.

Grundsätzlich ist zu sagen, dass man relative und absolute Dateipfade
unterscheidet. Absolute Dateipfade sind eindeutig. Bei relativen
Dateipfaden ist der Bezugspunkt das sogenannte "aktive Verzeichnis" bzw.
"active directory". Primitives wie \input wechseln meines Wissens das
aktive Verzeichnis nicht. Bezugspunkt für relative Pfade ist also meines
Wissens, egal, wie tief man \input-Befehle verschachtelt, immer
dasjenige Verzeichnis, das zu dem Zeitpunkt aktiv war, als der
TeX-Job/LaTeX-Lauf gestartet wurde.

Wenn man nur einen Dateinamen angibt, ohne relative oder absoluten Pfad,
muss man die Suchreihenfolge beachten, in der Verzeichnisse des
Dateisystems daraufhin abgeklappert werden, ob eine Datei mit dem
Dateinamen dort gefunden werden kann. Meines Wissens wird in diesem Fall
zunächst im aktiven Verzeichnis nach der Datei gesucht. Kann sie dort
nicht gefunden werden, wird die sogenannte "filename database"
abgeklappert, bei der es sich um eine Art Cache handelt, in dem die zu
Dateinamen gehörenden Dateipfade verzeichnet sind. Dieser Cache wird,
wenn man die filename database neu erzeugt, gebildet anhand der als
TEXMF root directories bezeichneten Verzeichnispfade, in denen sich
Unterverzeichnisse und Dateien befinden, die man als zur installierten
TeX-Distribution gehörig betrachtet, wobei diese Verzeichnisstrukturen
den Konventionen für sogenannte TeX Directory Structures
(<https://tug.ctan.org/tds/tds.html>) genügen.



Mit freundlichem Gruß

Ulrich
Heiner Richter
2024-04-15 13:31:32 UTC
Permalink
Wie ich (nutze MikTeX) das jetzt verstanden habe, dürfte
\graphicspath{{../Graphiken/}} auch in einer per \input geladenen Quelle
stehen und dann die Bilder im Ordner Graphiken finden, der auf der Ebene
des Arbeitsordners liegt.
Ulrich D i e z
2024-04-15 15:10:58 UTC
Permalink
Post by Heiner Richter
Wie ich (nutze MikTeX) das jetzt verstanden habe, dürfte
\graphicspath{{../Graphiken/}} auch in einer per \input geladenen Quelle
stehen
Meines Wissens ja.
Post by Heiner Richter
und dann die Bilder im Ordner Graphiken finden, der auf der Ebene
des Arbeitsordners liegt.
Kommt drauf an, was mit "Ebene des Arbeitsordners" gemeint ist.

"." ist das momentan aktive Verzeichnis.

".." ist das dem momentan aktiven Verzeichnis übergeordnete Verzeichnis.

"../Graphiken/" ist somit ein Verzeichnis "Graphiken", das im selben
Verzeichnis liegt wie das momentan aktive Verzeichnis. Bzw.: Das
Verzeichnis "Graphiken" und das momentan aktive Verzeichnis liegen beide
im selben übergeordneten Verzeichnis. Dabei ist der Fall, dass das
besagte Verzeichnis "Graphiken" das momentan aktive Verzeichnis ist,
nicht ausgeschlossen.

"./Graphiken/" wäre ein Unterverzeichnis "Graphiken" des momentan
aktiven Verzeichnisses,


Mit freundlichem Gruß

Ulrich
Ulrich D i e z
2024-04-15 15:58:45 UTC
Permalink
Post by Ulrich D i e z
Post by Heiner Richter
Wie ich (nutze MikTeX) das jetzt verstanden habe, dürfte
\graphicspath{{../Graphiken/}} auch in einer per \input geladenen Quelle
stehen
Meines Wissens ja.
Post by Heiner Richter
und dann die Bilder im Ordner Graphiken finden, der auf der Ebene
des Arbeitsordners liegt.
Kommt drauf an, was mit "Ebene des Arbeitsordners" gemeint ist.
"." ist das momentan aktive Verzeichnis.
".." ist das dem momentan aktiven Verzeichnis übergeordnete Verzeichnis.
"../Graphiken/" ist somit ein Verzeichnis "Graphiken", das im selben
Verzeichnis liegt wie das momentan aktive Verzeichnis. Bzw.: Das
Verzeichnis "Graphiken" und das momentan aktive Verzeichnis liegen beide
im selben übergeordneten Verzeichnis. Dabei ist der Fall, dass das
besagte Verzeichnis "Graphiken" das momentan aktive Verzeichnis ist,
nicht ausgeschlossen.
"./Graphiken/" wäre ein Unterverzeichnis "Graphiken" des momentan
aktiven Verzeichnisses,
Insbesondere bei relativen Dateipfaden muss man darauf achten, dass vor
dem LaTeX-Lauf das richtige Verzeichnis zum aktiven Verzeichnis gemacht
wird.

Wenn man latex an der Kommandozeile/am Shell-Prompt aufruft, wechselt
man dazu normalerweise mittels des Befehls cd oder chdir in
dasjenige Verzeichnis, das man zum gerade aktiven Verzeichnis machen möchte.

In grfguide.pdf steht zum Thema \graphicspath:

| \graphicspath{⟨dir-list⟩}
|
| This optional declaration may be used to specify a list of directories
| in which to search for graphics files. The format is the same as for
| the LaTeX 2ε primitive \***@path. A list of directories, each in a
| {} group (even if there is only one in the list). For example:
| \graphicspath{{eps/}{tiff/}}
| would cause the system to look in the subdirectories eps and tiff of
| the current directory. (All modern TeX systems use / as the directory
| separator, even on Windows.)
| The default setting of this path is \***@path that is: graphics
| files will be found wherever TeX files are found.

Im Moment weiß ich unter anderem nicht,
- was speziell ein LaTeX 2ε primitive sein soll.
- ob man bei Pfadangaben für \graphicspath den Backslash am Pfadende
weglassen kann.
- wie die Makros der Pakete graphics/graphicx beim Parsen/Vorverarbeiten
ihrer Argumente entscheiden, ob es ein absoluter oder ein relativer
Verzeichnispfad sein soll, bzw. ob immer davon ausgegangen wird, dass
es sich um relative Verzeichnispfade handelt.
Laut dem, was da steht, werden "eps/" und "tiff/" als Angaben von
Unterverzeichnissen des momentan aktiven Verzeichnisses
interpretiert, also als relative Verzeichnispfade, bei denen man das
"./" am Anfang der Pfadangabe weglassen kann.
Ich _vermute_, man muss die Verzeichnispfade, egal ob relativ oder
absolut, so angeben, wie man sie bei einem cd-Befehl bzw chdir-Befehl
mit hinschreiben würde wenn man vom gerade aktiven Verzeichnis in das
betreffende Verzeichnis wechseln und so dieses zum aktiven Verzeichnis
machen wollte.

Man muss außerdem auch unterscheiden, wie TeX auf Ebene von Primitives
wie \input (bzw. in LaTeX umbenannt nach \@@input, um den Namen \input
für ein Makro frei zu haben, das intern unter anderem das (umbenannte)
Primitive aufruft) und `\openin` und `\openout` <file name> behandelt
und wie in LaTeX 2e und zugehörigen Paketen Makros programmiert sind,
die Makro-Argumente, mittels derer Dateinamen und/oder Verzeichnispfade
oder auch nur Teile derselben angegeben werden sollen, vorverarbeitet
werden, um daraus entsprechende <file name> für die Primitives zu basteln.

Und man muss heutzutage sicherstellen, dass das Programm TeX bzw. der
Account, den man zum Aufruf von TeX/LaTeX nutzt, die Berechtigung zum
Zugriff auf die angedachten Dateien hat.

Mit freundlichem Gruß

Ulrich
Ulrich D i e z
2024-04-15 17:02:54 UTC
Permalink
Und dann muss man unter anderem auch noch wissen, was das verwendete
Betriebssystem ohne Zutun von TeX/LaTeX selbst aus Pfadangaben macht.

Unter MS-DOS konnte man zum Beispiel mit dem `\include`-Befehl
hervorragend Dateien kaputtmachen, die Teile des Dokuments enthalten
sollten:

Der Befehl \include{dokteil.tex} sollte unter anderem eine Hilfsdatei
"dokteil.tex.aux" anlegen und dann die Datei "dokteil.tex" einlesen.
Nur, dass MS-DOS mehrere Punkte in Dateinamen nicht mage und schlicht
und einfach den Dateinamen "dokteil.tex.aux" zu "dokteil.tex" verkürzt,
was dazu führt, dass die Datei "dokteil.tex" beim Anlegen der Hilfsdatei
überschrieben wird.

Meistens merkte man das aber recht schnell, bevor man viel in die Datei
hinein geschrieben hatte. ;-)

Und es ist schwierig, eine Datei per \input zu laden, deren Name keine
Extension/kein Suffix hat, weil TeX bei Dateinamen ohne Extension/Suffix
automatisch die Extension/das Suffix ".tex" anhängt.

Das hat aber den Vorteil, dass z.B. in \include-Befehlen die
Extenstion/das Suffix des Dateinamens weggelassen werden kann und, wenn
die Sache an \@@input durchgereicht ist, trotzdem die entsprechende auf
das Suffix .tex endende Datei gelesen, aber als Hilfsdatei eine auf das
Suffix ".aux" endende Hilfsdatei erzeugt wird:
\include{dokteil} liest die Datei dokteil.tex ein und erzeugt vorher
die Datei dokteil.aux .

Unter TeX der Befehl
\input test
macht das selbe wie der Befehl
\input test.tex

Unter LaTeX ist das TeX-Primitive \input umbenannt in \@@input, aber
das LaTeX-Makro \input{...}, das ja an \@@input durchreicht, hängt auch
das Suffix ".tex" an, wenn der Dateiname ohne Suffix angegeben ist:

Unter LaTeX der Befehl
\input{test}
macht das selbe wie der Befehl
\input{test.tex}

Subtil wird es, wenn man eine Datei anlegt, deren Name auf einen Punkt
endet und dann zB etwas versucht wie
(mit TeX) \input test. bzw, (mit LaTeX) \input{test.}

Aber die Subtilität besteht eher darin, dass - zumindest früher - z.B.
der Windows-Dateimanager/Windows-Explorer bei solchen Dateien den Punkt
am Dateinamensende nicht immer mit angezeigt hat, der Befehl "dir" an
der Kommandozeile hingegen schon. ;-) Ob vom
Windows-Dateimanager/Windows-Explorer der Punkt am Dateinamensende mit
angezeigt wurde, und ob es überhaupt möglich war/ist, eine Datei mit so
einem Namen zu erzeugen, hing/hängt vom Dateisystem ab.

Es gibt auch die Situation, dass manche Dateinamen zwar vom Dateisystem
her erlaubt sind, aber die Routinen der Shell des verwendeten
Betriebssystems für das Parsen von Dateipfaden und Dateinamen nicht
unbedingt in erwarteter Weise damit zurechtkommen.
Zum Beispiel sind "*", "$" und "?" bei vielen Shells sogenannte
Wildcards, aber in iso9660-Dateisystemen, wie sie z.B. für Daten-CDs und
Daten-DVDs verwendet werden, sind diese Zeichen laut iso9660-Standard in
Dateinamen nicht verboten. ;-)

Mit freundlichem Gruß

Ulrich
Heiner Richter
2024-04-15 18:57:33 UTC
Permalink
Post by Ulrich D i e z
Post by Ulrich D i e z
Post by Heiner Richter
Wie ich (nutze MikTeX) das jetzt verstanden habe, dürfte
\graphicspath{{../Graphiken/}} auch in einer per \input geladenen Quelle
stehen
Meines Wissens ja.
Post by Heiner Richter
und dann die Bilder im Ordner Graphiken finden, der auf der Ebene
des Arbeitsordners liegt.
Kommt drauf an, ...
Mit freundlichem Gruß
Ulrich
Oh je, aber ich denke, dass ich es halbwegs verstanden habe. Danke vielmals
Heiner
Holger Schieferdecker
2024-04-15 06:49:49 UTC
Permalink
Post by Markus Gail
Hallo!
Ich binde mit \input eine Datei ein, die u. a. Pfade zu Bildern und weiteren
\input-Dateien enthalten soll.
Das Input wird somit verschachtelt. Es ist mir bisher nicht gelungen,
auszutüfteln, welche Pfadangaben innerhalb der eingebundenen Input-Datei
gilt.
Als Vorausbemerkung, in meinen Projekten sind die .tex-Dateien immer im
Hauptverzeichnis, daher kann ich zu Pfaden von Input-Dateien nichts sagen.

Allerdings packe ich Bilder in verschiedene Unterverzeichnisse. In der
Hauptdatei nutze ich dann \graphicspath, um die Speicherorte der Bilder
bekannt zu geben. Dabei muß man nur darauf achten, daß keine Bilder mit
gleichem Namen in verschiedenen Verzeichnissen liegen.

Holger
Axel Berger
2024-04-15 08:50:03 UTC
Permalink
Dabei muß man nur darauf achten, daß keine Bilder mit
gleichem Namen in verschiedenen Verzeichnissen liegen.
Meines Wissens nicht einmal das, weil eine feste Suchreihenfolge
eingehalten wird. Man kann also immer in einem niedriger priorisierten
Verzeichnis eine Fallbackversion vorhalten. Dasselbe gilt für gleiche
Namen mit verschiedener Endung (verschiedenem Format), wenn man nur den
Namen ohne Endung angibt.

Nachteil der mich schon oft gebissen hat: Der sonst in Dateinamen immer
zulässige Punkt macht großen Ärger dabei.
--
/¯\ No | Dipl.-Ing. F. Axel Berger Tel: +49/ 221/ 7771 8067
\ / HTML | Roald-Amundsen-Straße 2a Fax: +49/ 221/ 7771 8069
 X in | D-50829 Köln-Ossendorf http://berger-odenthal.de
/ \ Mail | -- No unannounced, large, binary attachments, please! --
Holger Schieferdecker
2024-04-16 07:22:57 UTC
Permalink
Post by Axel Berger
Dabei muß man nur darauf achten, daß keine Bilder mit
gleichem Namen in verschiedenen Verzeichnissen liegen.
Meines Wissens nicht einmal das, weil eine feste Suchreihenfolge
eingehalten wird. Man kann also immer in einem niedriger priorisierten
Verzeichnis eine Fallbackversion vorhalten. Dasselbe gilt für gleiche
Namen mit verschiedener Endung (verschiedenem Format), wenn man nur den
Namen ohne Endung angibt.
Mit der Reihenfolge hast Du natürlich recht, es ist schon
deterministisch, welche Datei genommen wird. Wenn man das nicht bedenkt,
kann man sich natürlich wundern, warum eine andere als gedacht im
Dokument auftaucht.
Post by Axel Berger
Nachteil der mich schon oft gebissen hat: Der sonst in Dateinamen immer
zulässige Punkt macht großen Ärger dabei.
Da ich bei LaTeX recht konservativ mit Dateinamen bin, ist mir das noch
nicht aufgefallen. In solchen Fällen nehme ich meistens ein '-' statt
einem Punkt.

Holger

Marckus
2024-04-15 18:45:23 UTC
Permalink
Post by Holger Schieferdecker
Post by Markus Gail
Hallo!
Ich binde mit \input eine Datei ein, die u. a. Pfade zu Bildern und weiteren
\input-Dateien enthalten soll.
Das Input wird somit verschachtelt. Es ist mir bisher nicht gelungen,
auszutüfteln, welche Pfadangaben innerhalb der eingebundenen Input-Datei
gilt.
Als Vorausbemerkung, in meinen Projekten sind die .tex-Dateien immer im
Hauptverzeichnis, daher kann ich zu Pfaden von Input-Dateien nichts sagen.
Allerdings packe ich Bilder in verschiedene Unterverzeichnisse. In der
Hauptdatei nutze ich dann \graphicspath, um die Speicherorte der Bilder
bekannt zu geben. Dabei muß man nur darauf achten, daß keine Bilder mit
gleichem Namen in verschiedenen Verzeichnissen liegen.
Holger
Moin!

Man/frau könnte aber auch \graphicspath vor dem ersten Aufruf einer
Datei aus einem (neuen) Unterverzeichnis neu setzen, d.h. die Dateinamen
könnten sogar gleich sein.

Gruß
Marckus
Lesen Sie weiter auf narkive:
Loading...