在 TeXstudio 中创建新的编译器

在 TeXstudio 中创建新的编译器

根据这个问题,我希望 TeXstudio 中有一个编译器,当我使用它时,我的 PDF 文件名必须是''year''.myfilename.pdf(例如2019.myfilename)。就像<\number\year.myfilename.pdf>在 LaTeX 中一样。我该怎么做?

我的最小文件:

%myfilename.tex
\documentclass{article}
\begin{document}
\number\year.myfilename.pdf
\end{document}

关于@user187802 的解决方案的第二次编辑:

以下是我的步骤:

1.

在此处输入图片描述

当我运行Run Script文件时4444.tex,出现此错误:

在此处输入图片描述

2.

在此处输入图片描述

当我myRUN在文件上运行命令时4444.tex,出现此错误:

错误:无法启动命令:myRUN

错误:无法启动命令:“4444”

我的批处理文件被复制到这个路径:

C:/texlive/2018/bin/win32/myrun.bat

答案1

注意:这在很大程度上取决于您的目标是什么。

如果编译很简单: 首先复制编译器命令。如果编译命令使用别名,则必须取消引用它。如果它使用链接,则必须对每个元素执行此操作。然后用命令行给出的日期替换作业名称。在此示例中,我使用 pdflatex 作为编译器:

Linux:   sh -c "pdflatex -synctex=1 -interaction=nonstopmode -jobname=$(date +'%%F').% %.tex"
Windows: cmd /C "pdflatex.exe -synctex=1 -interaction=nonstopmode -jobname=%%date%%.% %.tex"

请注意,您可能必须调整 pdflatex 可执行文件的路径。

编辑:显然 Windows 无法从实例化 shell 中读取变量。:-(

以下是普遍变异使用 write18 命令(对于 Linux 使用sh -c而不是cmd /C

windows portable: cmd /C ""[txs-app-dir]"/../../texlive/2019/bin/win32/pdflatex.exe -shell-escape \immediate\write18{"[txs-app-dir]"/../../texlive/2019/bin/win32/pdflatex.exe\space -jobname=\the\year-"%"\space "%.tex"}"
windows installed: cmd /C "pdflatex.exe -shell-escape \immediate\write18{pdflatex.exe\space -jobname=\the\year-"%"\space "%.tex"}"

如果编译很复杂: 您可以从命令行调用 TeXStudio,其中日期或作业名称设置为变量。可以直接执行此操作,也可以通过辅助脚本或命令行从其内部调用 TeXStudio。然后可以像这样调用它:

Linux:   sh -c "export jobname=$(date +'%%F').%; /path/to/texstudio %.tex"

然后编译将通过以下方式完成:

txs:///compile/[-jobname=$jobname]

请注意,虽然您可以像这样导出变量,但您不能直接将其链接起来,因为 TeXStudio 会删除该变量。此外,虽然您可以使用以下方式将日期保存到文件中: sh -c "echo '"$(date +'%%F').%"' > timestamp.txt"我尚未找到在 TeXStudios 内部调用中将其读入变量的方法。虽然您可以通过在第一行覆盖作业名称并在第二行为其设置魔术注释来做很多事情,但这并不完整,我的直觉告诉我这确实相当愚蠢。

如果目的只是重命名 PDF 之后再执行。只需构建一个(链式)命令,如下所示:

Linux:    txs:///compile | sh -c "mv %.pdf $(date +'%%F').%.pdf"
Windows:  txs:///compile | cmd /C "move %.pdf %%date%%.%.pdf"

请注意,我们必须转到命令行才能获取日期。%%F 将为您提供 yyyy-mm-dd。您可以将其替换为 %%Y 或(4 位数字/2 位数字年份)%%m(2 位数字月份)和 %%d(日期)的任意组合,并以破折号、下划线或点分隔。因此,年份将是 %%Y。遗憾的是,对于 Windows,日期格式高度依赖于您的区域设置。如果您安装了 Python 或 powershell,您可能希望使用它们来获取时间戳。

如果目标是滥用 jobname 作为变量 (仅出于完整性考虑。与此无关。)

滥用作业名来传输变量可能很诱人。假设您想要编译一些有或没有解决方案的练习,也许针对四个不同的组或其他内容。为此,只需创建指向主文件的链接,然后打开并编译链接就足够了。尽管我说过滥用职权这非常方便并且可以轻松地被视为一个功能。

把它们加起来: 像第一个解决方案那样使用自定义 cmd 或 sh 调用重建编译器设置可能是最好的主意。

之后,下一个最佳想法可能是从命令行使用预定义变量调用 TeX-Studio。尝试从 TexStudio 内部调用它会很困难,所以不要这么做。

虽然用户187802 的方法应该可以在这里使用,但它可能更适合解决更大的问题,和/或如果您有固定安装。(这里的第一种和第三种方法也适用于便携式设置。)

最后[txs-app-dir] 和 [txs-settings-dir]在使用便携式装置时可能会有帮助。

答案2

创建一个名为的脚本myRUN

#!/bin/bash
YEAR=`date +%Y`
pdflatex -jobname=$YEAR.$1 $1

并在 TeXstudio 中将其定义为用户定义命令(在我的示例中为 user6):

在此处输入图片描述

然后,您将获得源文件的zzz7.tex输出2019.zzz7.pdf。对于 Windows,您必须编写类似的批处理脚本。

相关内容