使用 pdftex 编译 LaTeX 文档时,其名称通常为newfile.pdf
。是否可以根据即将编译的 LaTeX 源中的内容更改文档的名称?更准确地说,是否可以在 LaTeX 中插入命令,以便当我在\change{name}
文本正文中键入类似 的内容并进行编译时,编译后的文档会自动具有名称name
?
如果我用 LyX 编译该文档,会有什么帮助吗?
答案1
您至少可以通过两种方式使用 Arara 来实现这一点。
方法 1
这可能是最直接的,而且是跨平台的。它只使用默认的 Arara 配置 - 无需添加任何额外的脚本或规则。
great-name.pdf
无论文件本身的名称是什么,都会产生以下代码.tex
:
% arara: pdflatex: { options: "--jobname great-name" }
\documentclass{article}
\usepackage{kantlipsum}
\begin{document}
\kant[1]
\end{document}
要编译它,你可以写
arara <filename>
其中<filename>.tex
是文件的名称.tex
。然后 Arara 运行pdflatex --jobname great-name <filename>.tex
并生成great-name.pdf
。
使用此方法时要记住的一件事是,辅助文件也将使用指定的名称。因此,您将拥有great-name.aux
-great-name.log
不是 <filename>.aux
或<filename>.log
。当然,这可能是一个优势,但也可能是一个劣势,因此值得注意。
方法 2
这不太简单,而且根据您的要求,可能更好也可能不好。具体细节取决于操作系统。下面的方法适用于默认 shell 为sh
或bash
或类似的系统。它也可能适用于其他相当符合 POSIX 标准的 shell。例如,我认为它在 Windows 上不起作用。
这是我刚刚编写的附加规则,我认为它应该根据要求重命名 PDF。请注意,我不熟悉 YAML,所以我的 Arara 脚本编写能力非常初级。
买者自负...
!config
# renamepdf rule for arara
identifier: renamepdf
name: rename PDF
command: <arara> mv -n @{force} @{options} "@{getBasename(file)}.pdf" "@{output}.pdf"
arguments:
- identifier: output
flag: <arara> @{parameters.output}
default: <arara> @{getBasename(file).concat("copy")}
- identifier: force
flag: <arara> @{isTrue(parameters.force,"-f")}
- identifier: options
flag: <arara> @{parameters.options}
# vim: set nospell:
这将为 Arara 创建一条新规则,您应将其放入您的个人规则目录中。我的是~/.arara/rules/
。文件应命名renamepdf.yaml
为 例如我的是~/.arara/rules/renamepdf.yaml
。
那么你可以说,例如:
% arara: pdflatex
% arara: renamepdf: { output: great-name, force: true, options: "-b" }
\documentclass{article}
\usepackage{kantlipsum}
\begin{document}
\kant[1]
\end{document}
这将首先运行pdflatex
,然后将生成的 PDF 重命名为great-name.pdf
。如果该名称的文件已经存在,它将覆盖它,因为force
是true
。但是,它将首先进行备份,因为 选项-b
也会传递给mv
命令。(我只是用作-b
示例 - 这个想法是options
允许规则未明确涵盖的任何选项直接传递给命令。)
如果您查看默认规则目录,您会发现 Arara 在 Windows 上执行一项操作,而在其他系统上执行另一项操作的示例。因此,如果您想将上述内容改编为适用于 Windows 的内容,我建议您查看那里以寻求帮助。显然,手册是另一个信息来源。
答案2
控制输出文件名的正常方法是将输入保存为合适的名称,但是 web2c tex 实现确实有一个--jobname
选项
pdflatex --jobname=zzz newfile.tex
将产生zzz.pdf
我不认为您可以在文件中设置它,因为一旦 tex 启动日志,作业名称就会被冻结。