![通过更改版本和作业名称进行两次编译](https://linux22.com/image/402562/%E9%80%9A%E8%BF%87%E6%9B%B4%E6%94%B9%E7%89%88%E6%9C%AC%E5%92%8C%E4%BD%9C%E4%B8%9A%E5%90%8D%E7%A7%B0%E8%BF%9B%E8%A1%8C%E4%B8%A4%E6%AC%A1%E7%BC%96%E8%AF%91.png)
我一直在上课,我定义了一些命令来分离teacher
和student
填充。结构与此处描述的相同邮政。MWE 位于末尾。
目前,我必须编译一次,更改输出的名称,更改file.tex
为设置第二个版本,重新编译并重命名第二个输出。
我想通过将pdflatex
编译命令更改texstudio
为编译两次并自动更改version
和相应的输出来让我的生活变得更好。
我读过在命令行中可以做到这一点Texstudio
,我也读过在 bash 文件中也可以做到这一点邮政。说实话,我不会编写/使用/理解 bash,所以我更喜欢第一种方式。
我如何才能实现:
foo.tex
使用该选项编译我的第一个\setversion{student}
并将其重命名为foo_student.tex
- 第二次编译(在同一次运行中)我的
foo.tex
选项\setversion{teacher}
并将其重命名为foo_teacher.tex
到目前为止,我所做的是使用以下命令编译两次并创建两个具有不同名称但内容没有差异的 pdf:
pdflatex -synctex=1 -interaction=nonstopmode -jobname=%_student main.tex | pdflatex -synctex=1 -interaction=nonstopmode -jobname=%_teacher main.tex
以下是 MWEmain.tex
\documentclass[11pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{etoolbox}
\newbool{studentversion}
\setbool{studentversion}{false}
\newcommand\setversion[1]{%
\def\tempa{#1}%
\def\tempb{student}%
\ifx\tempa\tempb
\setbool{studentversion}{true}%
\else
\def\tempb{teacher}%
\ifx\tempa\tempb
\setbool{studentversion}{false}%
\else
\errmessage{Unknown value for studentversion: #1}%
\fi
\fi
}
\newcommand{\ProfDifference}[2]%
{%
\ifbool{studentversion}%
{%%True (student version)
#1
}%
{%%False (teacher version)
#2
}
}
\setversion{teacher} %%Modify this line to change the version
\begin{document}
The following text depends of the version :
\ProfDifference{It's the student version.}{It's the teacher version.}
\end{document}
答案1
您可以执行以下操作:
将宏main.tex
更改\setversion
为:
\newcommand*\checkversion
{%
\begingroup
\def\tempa{student}%
\expandafter
\endgroup
\ifx\tempa\myversion
\setbool{studentversion}{true}%
\else
\begingroup
\def\tempa{teacher}%
\expandafter
\endgroup
\ifx\tempa\myversion
\setbool{studentversion}{false}%
\else
\errmessage{Unknown value for studentversion: \myversion}%
\fi
\fi
}
\checkversion
pdflatex
并将调用改为
pdflatex -synctex=1 -interaction=nonstopmode -jobname=%_student "\def\myversion{student}\input{main.tex}" | pdflatex -synctex=1 -interaction=nonstopmode -jobname=%_teacher "\def\myversion{teacher}\input{main.tex}"
这样就可以了。(我不使用 TeXstudio,所以我不会测试这个,但我认为没有理由这不起作用)