latexmk 中的 RequirePackage 和 usepretex 将输出文件更改为 texput.tex

latexmk 中的 RequirePackage 和 usepretex 将输出文件更改为 texput.tex

我想完全基于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

两个命令(makemake final)都编译文档mydocument.tex并返回mydocument.pdf

相关内容