Есть ли эквивалент \graphicspath для списков?

Есть ли эквивалент \graphicspath для списков?

Как мне сделать так, \lstinputlistingчтобы он искал файлы в указанном каталоге? Я думаю о решении в духе решения дляэтот вопрос.

Я хотел бы иметь такое решение

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

где file.extнаходится в /some/path/in/the/system. Я пытался найти такое решение, но безуспешно. Я обнаружил, что внутри определения \lstinputlistingsавторы используют \lst@inputpath. Однако наивная модификация этого макроса не дала никаких результатов.

решение1

Пакет listingsпредоставляет ключ, который называется inputpathдля указания пути, где \lstinputlistingследует искать исходные файлы. Обратите внимание, что это inputpathдокументировано только в listingsруководстве разработчика,нетв руководстве пользователя; если вы не скомпилировали руководство разработчика, найдите «inputpath» влистинги.dtxприведет вас к определению ключа inputpath. Чтобы использовать последний, просто напишите

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

где-то в вашем документе (не обязательно в преамбуле, но после загрузки listings, конечно). Если вы действительно настаиваете на использовании макроса, похожего на \graphicspath, вы можете определить \lstinputpathмакрос самостоятельно, например так

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

В приведенном ниже коде предполагается, что файл sample.cнаходится в подкаталоге testвашего рабочего каталога.

введите описание изображения здесь

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

решение2

Альтернативой является использование \input@pathвнутреннего макроса LaTeX.

Смотрите такжеhttps://tex.stackexchange.com/a/24827/250119,Можно ли задать глобальный путь по умолчанию для \input{...}, например, \graphicspath{...}?.

например

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

Преимущество: Он работает, поддерживает несколько путей и не страдает от недостатка, упомянутого вкомментарий выше

Здесь следует отметить один важный недостаток: входной путь всегда добавляется, даже если предоставленный аргумент содержит косые черты (и даже если он начинается с одной, т. е. если это абсолютный путь).

Недостаток:

  • Насколько я вижу\input@path это внутренний макрос LaTeX, и егооригинальныйцель даже не в том, чтобы позволить пользователям расширять возможные местоположения для \input...? (подробности позже)
  • Это работает только потому, чтоlistings документация по пакетупросто случаетсявнутренне использовать \inputдля внутренней обработки файла. Иначе это не сработает.

листинги исходный код документация

(кстати, использование \activeдля представления константы 13 for \endlinecharявляется противоположностью самодокументированному коду.)

Связанный контент