我正在编写一个将信息保存到外部文件的包。我想根据源文件命名该文件;例如 foo.tex -> foo.bar 但我找不到任何包含“foo”的变量。我很确定一定有一个,因为目录保存到 foo.toc。
有什么指点吗?
答案1
你想要的是宏\jobname
。这不完全是文件名;引用TeX 常见问题解答:
TeX 仅在原始 中保留其认为是作业的名称
\jobname
;这是首先交给 TeX 的文件的名称,删除了其目录名称和任何扩展名(例如.tex
)。如果没有传递文件(即您正在以交互方式使用 TeX),则\jobname
具有值(在这种情况下texput
为文件赋予的名称)。.log
因此,如果您正在处理foo.tex
,\jobname
将是foo
(当然,这可能就是您想要的)。
答案2
您正在寻找\jobname
。
编辑:为了给我的答案增加一些价值——第 288-289 页LaTeX2e 来源包含 的定义\@starttoc
,该命令从外部文件读取/写入 ToC 数据。此定义揭示了您问题的答案。
答案3
\usepackage{currfile}
Filename: \currfilename
答案4
\jobname
在 LuaTeX 中, lua 端的等效内容是tex.jobname
。在 LaTeX3 中,我们有
\documentclass{article}
\begin{document}
\jobname\\
\ExplSyntaxOn
\g_file_curr_dir_str/
\g_file_curr_name_str.
\g_file_curr_ext_str
\ExplSyntaxOff
\end{document}
一些用例可能会受益于ltfilehook
LaTeX 内置的最新包,其中有一个\CurrentFile
,\CurrentFilePath
...可在钩子指令中找到。