如何让\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
不是在用户手册中;如果你还没有编译开发人员指南,请在列表.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 与\endlinechar
自文档代码相反。)