我想向“工作名称“部分。我的最终目标是将当前日期(例如,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_Name
(Original Name
来自我原来的帖子)#
。而且成功了!以下用户命令会自动将原始文件名用于输入 TeX 文档和输出 PDF 文档:
sh -c "mydate=$(/bin/date +'%%Y_%%m_%%d') ; pdflatex --jobname=#_$mydate #.tex "
因此,上面的代码允许我:
- 編輯文件
filename.tex
; - 生成一个文件名为 的 PDF 文档
filename_YYYY_MM_DD.pdf
; - 自动填写当前年、月、日;
- 调用 Tex 文档的“不带扩展名的文件名”(使用符号
#
),以便我的输入(filename.tex
)和我的输出文件(filename_YYYY_MM_DD.pdf
)都会针对所有 TeX 文档自动更新。
感谢所有花时间思考并回答我的问题的人。最终,我现在有了一个文档,它可以自动在 PDF 文件名中生成当前日期(例如 YYYY_MM_DD),而无需编辑 TeX 文件名! 只需修改编译最终 PDF 文档的用户命令即可。