Existe um equivalente a \graphicspath para listagens?

Existe um equivalente a \graphicspath para listagens?

Como posso fazer a \lstinputlistingbusca por arquivos em um determinado diretório? Estou pensando em uma solução nos moldes da solução paraessa questão.

Eu gostaria de ter uma solução como

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

onde file.extreside em /some/path/in/the/system. Tentei procurar essa solução sem sorte. Descobri que dentro da definição dos \lstinputlistingsautores usa-se um arquivo \lst@inputpath. No entanto, uma modificação ingénua desta macro não produz quaisquer resultados.

Responder1

O listingspacote fornece uma chave chamada inputpathpara especificar um caminho onde \lstinputlistingdeve-se procurar os arquivos fonte. Observe que isso inputpathestá documentado apenas no listingsguia do desenvolvedor,nãono manual do usuário; se você não compilou o guia do desenvolvedor, procure por "inputpath" emlistagens.dtxo levará à definição da inputpathchave. Para usar o último, basta escrever

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

em algum lugar do seu documento (não necessariamente no seu preâmbulo, mas depois de carregar listings, é claro). Se você realmente insiste em usar uma macro semelhante a \graphicspath, você mesmo pode definir uma \lstinputpathmacro, assim

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

O código abaixo pressupõe que o arquivo sample.creside em um subdiretório chamado testde seu diretório de trabalho.

insira a descrição da imagem aqui

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

Responder2

A alternativa inclui o uso de \input@pathmacro interna LaTeX.

Veja tambémhttps://tex.stackexchange.com/a/24827/250119,Um caminho padrão pode ser definido globalmente para \input{...} semelhante a \graphicspath{...}?.

por exemplo

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

Vantagem: Funciona, suporta múltiplos caminhos e não sofre da desvantagem mencionada emo comentário acima

Uma desvantagem importante que deve ser observada aqui é que o caminho de entrada é sempre anexado mesmo se o argumento fornecido contiver barras (e mesmo se começar com uma, ou seja, se for um caminho absoluto).

Desvantagem:

  • Pelo que posso ver \input@pathé uma macro interna do LaTeX, e seuoriginalo objetivo não é nem mesmo permitir que os usuários estendam os locais possíveis para \input...? (detalhes mais tarde)
  • Isso só funciona porque listingsa documentação do pacotesimplesmente aconteceuse internamente \inputpara processar o arquivo internamente. Caso contrário, não funcionaria.

listagens documentação do código-fonte

(a propósito, usar \activepara representar a constante 13 for \endlinecharé o oposto do código autodocumentado.)

informação relacionada