目录名称作为变量

目录名称作为变量

是否可以使用当前 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}

相关内容