¿Existe un equivalente a \graphicspath para listados?

¿Existe un equivalente a \graphicspath para listados?

¿Cómo puedo hacer \lstinputlistingpara buscar archivos en un directorio determinado? Estoy pensando en una solución similar a la solución aesta pregunta.

Me gustaria tener una solucion como

\lstinputpath{/some/path/in/the/system}
\lstinputlisting{file.ext}

donde file.extreside en /some/path/in/the/system. Intenté buscar esa solución sin suerte. Descubrí que dentro de la definición de \lstinputlistingslos autores se utiliza un archivo \lst@inputpath. Sin embargo, una modificación ingenua de esta macro no produce ningún resultado.

Respuesta1

El listingspaquete proporciona una clave llamada inputpathpara especificar una ruta donde \lstinputlistingse deben buscar los archivos fuente. Tenga en cuenta que inputpathsolo está documentado en la listingsguía del desarrollador,noen el manual de usuario; Si no ha compilado la guía del desarrollador, busque "inputpath" enlistados.dtxle llevará a la definición de la inputpathclave. Para utilizar este último, simplemente escriba

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

en algún lugar de su documento (no necesariamente en su preámbulo, pero sí después de cargarlo listings, por supuesto). Si realmente insistes en usar una macro similar a \graphicspath, puedes definir una \lstinputpathmacro tú mismo, así

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

El siguiente código supone que el archivo sample.creside en un subdirectorio llamado testde su directorio de trabajo.

ingrese la descripción de la imagen aquí

\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}

Respuesta2

La alternativa incluye el uso de \input@pathuna macro interna de LaTeX.

Ver tambiénhttps://tex.stackexchange.com/a/24827/250119,¿Se puede establecer una ruta predeterminada globalmente para \input{...} similar a \graphicspath{...}?.

p.ej

\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}

Ventaja: Funciona, admite múltiples rutas y no sufre la desventaja mencionada enel comentario de arriba

Un inconveniente importante que se debe tener en cuenta aquí es que la ruta de entrada siempre se antepone incluso si el argumento proporcionado contiene barras (e incluso si comienza con una, es decir, si es una ruta absoluta).

Desventaja:

  • Por lo que puedo ver \input@pathes una macro interna de LaTeX, y suoriginal¿El propósito ni siquiera es permitir a los usuarios ampliar las posibles ubicaciones para \input...? (detalles más adelante)
  • Esto sólo funciona porque listingsla documentación del paquetesimplemente le pasa auso interno \inputpara procesar el archivo internamente. De lo contrario no funcionaría.

listados de documentación del código fuente

(por cierto, usar \activepara representar la constante 13 for \endlinechares lo opuesto al código autodocumentado).

información relacionada