![Gibt es ein Äquivalent zu \graphicspath für Auflistungen?](https://rvso.com/image/286965/Gibt%20es%20ein%20%C3%84quivalent%20zu%20%5Cgraphicspath%20f%C3%BCr%20Auflistungen%3F.png)
Wie kann ich die \lstinputlisting
Suche nach Dateien in einem bestimmten Verzeichnis einrichten? Ich denke an eine Lösung ähnlich der Lösung fürdiese Frage.
Ich hätte gerne eine Lösung wie
\lstinputpath{/some/path/in/the/system}
\lstinputlisting{file.ext}
wobei file.ext
sich in befindet /some/path/in/the/system
. Ich habe erfolglos versucht, nach einer solchen Lösung zu suchen. Ich habe festgestellt, dass innerhalb der Definition der \lstinputlistings
Autoren ein verwendet wird \lst@inputpath
. Eine naive Änderung dieses Makros führt jedoch zu keinen Ergebnissen.
Antwort1
Das listings
Paket stellt einen Schlüssel bereit, inputpath
der einen Pfad angibt, in dem \lstinputlisting
nach Quelldateien gesucht werden soll. Beachten Sie, dass dies inputpath
nur im listings
Entwicklerhandbuch dokumentiert ist.nichtim Benutzerhandbuch; wenn Sie das Entwicklerhandbuch nicht kompiliert haben, suchen Sie nach "inputpath" ininserate.dtxführt Sie zur Definition des inputpath
Schlüssels. Um letzteren zu verwenden, schreiben Sie einfach
\lstset{inputpath=<path-in-question>}
irgendwo in Ihrem Dokument (nicht unbedingt in der Präambel, aber listings
natürlich nach dem Laden von ). Wenn Sie unbedingt ein Makro ähnlich wie verwenden möchten , können Sie selbst ein Makro \graphicspath
definieren , etwa so:\lstinputpath
\newcommand*\lstinputpath[1]{\lstset{inputpath=#1}}
Der folgende Code geht davon aus, dass sich die Datei sample.c
in einem Unterverzeichnis namens test
Ihres Arbeitsverzeichnisses befindet.
\documentclass{article}
\usepackage{listings}
\newcommand*\lstinputpath[1]{\lstset{inputpath=#1}}
\lstinputpath{test}
\begin{document}
\lstinputlisting[
language = C,
basicstyle = \ttfamily,
frame = single,
caption = {Hello world in C},
]{sample.c}
\end{document}
Antwort2
Eine Alternative besteht in der Verwendung \input@path
interner LaTeX-Makros.
Siehe auchhttps://tex.stackexchange.com/a/24827/250119,Kann für \input{...} ein Standardpfad global festgelegt werden, ähnlich wie für \graphicspath{...}?.
z.B
\documentclass{article}
\usepackage{listings}
\makeatletter
\def\input@path{{SubFolder/}}
\makeatother
\begin{document}
\lstinputlisting[
language = C,
basicstyle = \ttfamily,
frame = single,
caption = {Hello world in C},
]{SubTest.tex}
\end{document}
Vorteil: Es funktioniert, unterstützt mehrere Pfade und leidet nicht unter dem inder Kommentar oben
Ein wichtiger Nachteil, der hier beachtet werden sollte, besteht darin, dass der Eingabepfad immer vorangestellt wird, auch wenn das angegebene Argument Schrägstriche enthält (und selbst wenn es mit einem beginnt, d. h. wenn es sich um einen absoluten Pfad handelt).
Nachteil:
- Soweit ich sehen kann,
\input@path
ist es ein internes Makro von LaTeX, und seineOriginalDer Zweck besteht nicht einmal darin, Benutzern die Erweiterung der möglichen Standorte für\input
... zu ermöglichen? (Details später) - Dies funktioniert nur, weil
listings
die Paketdokumentationpassiert einfachintern verwenden\input
, um die Datei intern zu verarbeiten. Sonst würde es nicht funktionieren.
(Übrigens ist die Verwendung \active
zur Darstellung der Konstanten 13 \endlinechar
das Gegenteil von selbstdokumentiertem Code.)