![目录名称作为变量](https://linux22.com/image/239618/%E7%9B%AE%E5%BD%95%E5%90%8D%E7%A7%B0%E4%BD%9C%E4%B8%BA%E5%8F%98%E9%87%8F.png)
是否可以使用当前 tex 文件所在的目录作为变量?
例如,假设我在目录中
/path/to/foo/
并在那里编译文档
bar.tex
(绝对路径是/path/to/foo/bar.tex
)。
是否可以使用/path/to/foo
或 甚至foo
作为 TeX/LaTeX 中的变量,就像可以使用bar
变量一样\jobname
? 是否有一个 (类似数组的) TeX 内部宏,其中填充了要编译的输入文件路径的段?
答案1
TeX 没有当前目录树的概念,因为它被设计成可以在没有当前目录树的操作系统上运行。如果你在 Unix 系统上,你可以pdflatex
从命令行运行
pdflatex "\def\mypath{$(pwd)}\input{file}"
其中file.tex
是您的主文档,从而利用 shell 命令替换。$(pwd)
语法为bash
,其他 shell 可能需要`pwd`
。
答案2
有currfile
包,它为您提供当前输入文件的文件名和相对路径。自 2012/05/06 起,如果使用参数编译文档,也可以获取绝对路径-recorder
。请注意,此参数已被使用latexmk
,因此如果您使用它,则无需额外努力。
最简单的方法是使用currfile
以下abspath
选项加载:
% Compile with: (pdf|xe|lua|)latex -recorder filename
% Needs two runs with MiKTeX, one with TeX Live
\documentclass{article}
\usepackage[abspath]{currfile}[2012/05/06]
\begin{document}
% These macros will show the data of the current
% input file, i.e. inside an \input file they will
% show different values
Absolute directory: \currfileabsdir
Absolute path: \currfileabspath
\end{document}
如果您也需要其他所有提供的宏(文件基名、扩展名等),请参阅手册。
如果您不需要完整的功能currfile
(它将为每个输入文件更新几个宏),那么您可以直接使用子包currfile-abspath
:
% Compile with: (pdf|xe|lua|)latex -recorder filename
% Needs two runs with MiKTeX, one with TeX Live
\documentclass{article}
\usepackage{currfile-abspath}
\getmainfile % get real main file (can be different than jobname in some cases)
\getabspath{\themainfile} % or use \jobname.tex instead (not as safe)
\let\mainabsdir\theabsdir % save result away (macro will be overwritten by the next \getabspath
\let\mainabspath\theabspath % save result away (macro will be overwritten by the next \getabspath
\begin{document}
Absolute directory: \mainabsdir
Absolute path: \mainabspath
\end{document}