Gibt es ein Äquivalent zu \graphicspath für Auflistungen?

Gibt es ein Äquivalent zu \graphicspath für Auflistungen?

Wie kann ich die \lstinputlistingSuche 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.extsich 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 \lstinputlistingsAutoren ein verwendet wird \lst@inputpath. Eine naive Änderung dieses Makros führt jedoch zu keinen Ergebnissen.

Antwort1

Das listingsPaket stellt einen Schlüssel bereit, inputpathder einen Pfad angibt, in dem \lstinputlistingnach Quelldateien gesucht werden soll. Beachten Sie, dass dies inputpathnur im listingsEntwicklerhandbuch dokumentiert ist.nichtim Benutzerhandbuch; wenn Sie das Entwicklerhandbuch nicht kompiliert haben, suchen Sie nach "inputpath" ininserate.dtxführt Sie zur Definition des inputpathSchlüssels. Um letzteren zu verwenden, schreiben Sie einfach

\lstset{inputpath=<path-in-question>}

irgendwo in Ihrem Dokument (nicht unbedingt in der Präambel, aber listingsnatürlich nach dem Laden von ). Wenn Sie unbedingt ein Makro ähnlich wie verwenden möchten , können Sie selbst ein Makro \graphicspathdefinieren , etwa so:\lstinputpath

\newcommand*\lstinputpath[1]{\lstset{inputpath=#1}}

Der folgende Code geht davon aus, dass sich die Datei sample.cin einem Unterverzeichnis namens testIhres Arbeitsverzeichnisses befindet.

Bildbeschreibung hier eingeben

\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@pathinterner 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@pathist 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 listingsdie Paketdokumentationpassiert einfachintern verwenden \input, um die Datei intern zu verarbeiten. Sonst würde es nicht funktionieren.

Auflistungen Quellcode Dokumentation

(Übrigens ist die Verwendung \activezur Darstellung der Konstanten 13 \endlinechardas Gegenteil von selbstdokumentiertem Code.)

verwandte Informationen