更新:

更新:

我想向“工作名称“部分。我的最终目标是将当前日期(例如,YYYY_MM_DD)添加到 PDF 文件名中。例如,如果我的输入 TeX 文档被命名为“原始名称.tex“,我希望输出 PDF 文件命名为”新名称_YYYY_MM_DD.pdf“其中当前日期被自动填充。

到目前为止,我已经编写了一个编译命令,用于创建一个具有不同名称(无日期)的 PDF 文件:

"pdflatex" -jobname=New_Name -synctex=1 -interaction=nonstopmode %.tex

但是,我未能成功将带有当前日期的宏添加到-作业名称命令。

我目前正在使用Texmaker 5.0.4在 Mac 上,我也使用 PDFLaTeX 来编译我的文档,尽管我也可以接受使用 XeLaTeX 和 LuaLaTeX。

(Stack Exchange 上发布的针对该问题的一些解决方案采用了其他程序,例如 Emacs,或者他们建议的解决方案似乎无法与 Texmaker 一起使用;例如,代码“%m_%d_%Y”不太可能与 Texmaker 的编译器一起使用,因为 Texmaker 使用百分号 (%) 来表示“没有扩展名的文件名”。)

无论如何,我在下面提供了一个示例 TeX 文档(尽管我的问题几乎完全出在编译器的命令上,所以我不确定我的示例代码有多大帮助):

% Input file: Original_Name.tex
% Compiled with the following command (following the four % signs):
    %%%%    "pdflatex" -jobname=New_Name -synctex=1 -interaction=nonstopmode %.tex
% Using: Texmaker 5.0.4 on Mac OS 10.13.6
% Desired output file: New_Name_{Todays_Date}.pdf (e.g., New_Name_2020_06_25.pdf)

\documentclass[12pt, letterpaper]{article}
\usepackage{csquotes}
\MakeOuterQuote{"} % Fix the backwards opening quotation mark

% Creating the underscored date format (i.e., YYYY_MM_DD):
\usepackage{datetime2}
\makeatletter
\newcommand{\yearmonthday}{%
    \@dtm@year\_\@dtm@month\_\@dtm@day
}
\makeatother


\begin{document}
Today's date: 

\verb|\yearmonthday| = \yearmonthday 
\bigskip

I would like to add the \verb|\yearmonthday| macro to the    \\ 
\verb|-jobname| section of my compilation command;           \\
e.g.: "\verb|-jobname=New_Name_\yearmonthday|" or            \\
"\verb|-jobname=New_Name_${yearmonthday}|" or some other way \\
of calling a user defined command. 

How do I specify a macro in the compilation user command?

\end{document}

长话短说:

如何在 Texmaker 编译器命令的 jobname 部分中包含宏?

(或者如果您能想到一个不同的解决方案来自动在 PDF 文件名中包含当前日期(例如,YYYY_MM_DD),那么我同样愿意听取您的建议!)谢谢!

答案1

好的,根据我从另一个论坛上的用户那里得到的出色建议,我有一个解决方案,可以解决 95%(编辑:现在 100%;查看更新!)我在最初的帖子中描述了这个问题。

我在 Texmaker 中添加了以下用户命令(尽管我怀疑编译文档的脚本可能因编辑器而异):

sh -c "mydate=$(/bin/date +'%%Y_%%m_%%d') ; pdflatex --jobname=New_Name_$mydate Original_Name.tex "

此解决方案还允许我使用 PDFLaTeX、XeLaTeX 或 LuaLaTeX 来编译文档。此外,我还获得了使用 BibTeX 的用户命令和双编译器,这通常是正确集成引文和参考文献所必需的。例如:

sh -c "mydate=$(/bin/date +'%%Y_%%m_%%d') ; xelatex -synctex=1 -interaction=nonstopmode --jobname=New_Name_$mydate Original_Name.tex ; bibtex Original_Name.aux ; xelatex -synctex=1 -interaction=nonstopmode --jobname=New_Name_$mydate Original_Name.tex ; xelatex -synctex=1 -interaction=nonstopmode --jobname=New_Name_$mydate Original_Name.tex ; open New_Name_$mydate.pdf "

此外,该sh -c脚本还允许我添加在创建 PDF 后删除 LaTeX 编译文件的代码:

"[...]; rm -f New_Name_$mydate.log ; rm -f New_Name_$mydate.synctex.gz ; rm -f New_Name_$mydate.aux ; rm -f Original_Name.blg "

更新:

我解决了我遇到的次要问题,关于调用 Tex 文档的“没有扩展名的文件名”(之前用‘%’符号表示),该问题在脚本中无法正常工作sh -c

根据Texmaker 文档(强调添加):

% 字符代表不带扩展名的文件名(“主”模式下的主文档),@ 字符将被当前行号替换。 附加参数:# 将被替换为当前文件名,不带扩展名(即使在“主”模式下)和 ! 将被替换为当前目录。

我用符号替换了New_NameOriginal Name来自我原来的帖子)#。而且成功了!以下用户命令会自动将原始文件名用于输入 TeX 文档和输出 PDF 文档:

sh -c "mydate=$(/bin/date +'%%Y_%%m_%%d') ; pdflatex --jobname=#_$mydate #.tex "

因此,上面的代码允许我:

  1. 編輯文件filename.tex
  2. 生成一个文件名为 的 PDF 文档filename_YYYY_MM_DD.pdf
  3. 自动填写当前年、月、日;
  4. 调用 Tex 文档的“不带扩展名的文件名”(使用符号#),以便我的输入(filename.tex)和我的输出文件(filename_YYYY_MM_DD.pdf)都会针对所有 TeX 文档自动更新。

感谢所有花时间思考并回答我的问题的人。最终,我现在有了一个文档,它可以自动在 PDF 文件名中生成当前日期(例如 YYYY_MM_DD),而无需编辑 TeX 文件名! 只需修改编译最终 PDF 文档的用户命令即可。

相关内容