LaTeX使用minted包时跨文件引入代码的相对路径适配问题
解决方案
针对minted包不遵循import包路径规则的问题,有3种常用稳定方案可选:
方案1:使用currfile包自动识别当前文件路径(最推荐)
无需手动配置前缀,完全适配模块化导入场景:
- 在
document.tex导言区加载currfile包:
\usepackage{currfile}
- 在
base.tex开头定义当前模块的路径变量:
% 自动获取base.tex所在的目录路径,自带末尾路径分隔符 \newcommand*{\moddir}{\currfiledir}
- 在base.tex中引用代码文件时直接拼接路径即可:
\inputminted{java}{\moddir listings/test.java}
后续不管你从哪个父级TeX文件导入base.tex,\currfiledir都会自动返回base.tex本身所在的真实路径,不需要修改任何引用代码。
方案2:手动定义全局模块路径前缀
适合模块数量少、不想额外引入包的场景:
- 在
document.tex导言区为每个模块提前定义路径:
\newcommand{\moduleApath}{module/a/}
- 在base.tex中引用代码时使用全局前缀:
\inputminted{java}{\moduleApath listings/test.java}
方案3:配置TeX搜索路径
仅适合本地自用场景,不需要修改任何TeX代码:
编译时在命令行添加搜索路径参数即可,示例:
TEXINPUTS=./module/a/:$TEXINPUTS xelatex -shell-escape document.tex
配置后TeX会自动到module/a目录下搜索资源,base.tex中直接写listings/test.java就能正常识别。
注意:所有使用minted包的场景都需要添加-shell-escape编译参数才能正常工作
内容的提问来源于stack exchange,提问作者Paddy
相关产品推荐
相关产品推荐

