我想完全基于my@final
命令行中的切换()来使用 来编译一个更大的文件makefile
。
我的.tex
文件如下所示:
\documentclass{scrbook}
\begin{filecontents}[overwrite]{01.tex}
Hello, world
\end{filecontents}
\begin{filecontents}[overwrite]{02.tex}
foo, bar
\end{filecontents}
\RequirePackage{etoolbox}
\providetoggle{my@final}
\providecommand*{\InfoTeX}{Compiler}
\iftoggle{my@final}{}{
\includeonly{
% 01,
02
}
}
\begin{document}
Start
\InfoTeX
\include{01}
\include{02}
End
\end{document}
因为我还需要biber
等等来获取我想要的正确文件latexmk
和它的选项-usepretex
,所以我不必担心手动调用biber
等等。
生成文件:
PROJECT=mydocument
LATEX =lualatex
COMPILER_INFO=$(shell $(LATEX) -v | head -n1 | cut -d ' ' -f3-)
LATEX_FINAL=\RequirePackage{etoolbox}\providetoggle{my@final}\toggletrue{my@final}
LATEX_OPTS =\newcommand*\InfoTeX{$(COMPILER_INFO)}
LATEXMK = latexmk -$(LATEX) -usepretex="$(LATEX_OPTS)"
all:
# pdf: mydocument.pdf
time latexmk -gg -$(LATEX) -usepretex="$(LATEX_OPTS)" $(PROJECT).tex
final:
# pdf: texput.pdf
time latexmk -gg -$(LATEX) -usepretex="$(LATEX_OPTS)$(LATEX_FINAL)" $(PROJECT).tex
mydocument.pdf
当我调用 时,我得到了正确的 pdf ( ) make
。但这取决于includeonly
和 激活了哪些章节。使用make final
我想获取整个文档,而不管includeonly
-command 是什么。但现在,使用\RequirePackage...
输出文件更改为texput.pdf
并且进程中止:
Latexmk: fls file doesn't appear to have been made.
我怎样才能mydocument.pdf
通过呼叫获得完整的信息make final
?
答案1
给 latexmk 一个 -jobname 参数:
time latexmk -jobname=$(PROJECT) -gg -$(LATEX) -usepretex="$(LATEX_OPTS)$(LATEX_FINAL)" $(PROJECT).tex
答案2
在尝试了布尔值之后,我发现了,\newif
事实证明它是有效的。但回答这个问题的功劳仍然归于約翰·柯林斯。
为了完整性并作为替代方法,我发布了不同的解决方案:
mydocument.tex
:
\begin{filecontents}[overwrite]{01.tex}
Hello, world
\end{filecontents}
\begin{filecontents}[overwrite]{02.tex}
foo, bar
\end{filecontents}
\documentclass{scrbook}
\providecommand*{\InfoTeX}{Compiler}
\ifPartsOnly
\includeonly{
% 01,
02
}
\else
\fi
\begin{document}
Start
\InfoTeX
\include{01}
\include{02}
End
\end{document}
makefile
:
PROJECT=mydocument
LATEX =lualatex
COMPILER_INFO=$(shell $(LATEX) -v | head -n1 | cut -d ' ' -f3-)
LATEX_FINAL=\newif\ifPartsOnly\PartsOnlyfalse
LATEX_OPTS =\newif\ifPartsOnly\PartsOnlytrue\newcommand*\InfoTeX{$(COMPILER_INFO)}
LATEXMK = latexmk -$(LATEX) -usepretex="$(LATEX_OPTS)"
all:
# pdf: mydocument.pdf
time latexmk -gg -$(LATEX) -usepretex="$(LATEX_OPTS)" $(PROJECT).tex
final:
# pdf: mydocument.pdf
time latexmk -gg -$(LATEX) -usepretex="$(LATEX_OPTS)$(LATEX_FINAL)" $(PROJECT).tex
两个命令(make
和make final
)都编译文档mydocument.tex
并返回mydocument.pdf
。