可能的速度提升

可能的速度提升

我目前正在写论文,并使用了我使用 tikz 制作的几张图形。目前我的工作流程/文档如下所示:

在 Latex 项目文件夹中,我有一个单独的文件夹,其中存储了所有包含图纸的 .tex 文件。

例如:

  • 业务模型概述.tex
  • 分布结果.tex
  • ...

然后我仅使用 \include 选项就将这些文件包含在主 latex_file 中。

上面提到的 tikz 文件是使用 Tikz_EDT 或 QTikz 封装创建的。

我现在开始重新安排我的工作流程,因为我换用 Kile 作为编辑器,而不是像以前一样使用 Overleaf。我听说了到目前为止我还没有使用过的 standalone_package。

简单问题:使用独立包是否可以让我的生活/工作流程更轻松?我当前的工作流程是否还好,或者您是否看到了一些需要改进的方面,因为我现在可以在重新开始之前进行调整。[到目前为止,我发现的一个缺点可能是每次我重新编译时都必须重新编译每张图片。但不确定这是否真的那么糟糕。]

非常感谢您的建议。

答案1

因此,正如评论中所承诺的那样,这是我目前使用 Ti 处理图像密集型文档的设置Z 及类似物(下文使用 TiZ,circuitikz包括 SVG、用 Python 创建的图表以及可能的其他图像):

standalone我为所有TeX 作品(如 Ti 的作品)维护一个共享的序言Z 和circuitikz图像)来同步字体大小和其他与设计相关的内容。此外,每个 Ti 都有一个共享的序言Z 图片和东西的共享图片circuitikz

对于我的最新作品,共享序言仅包括

\documentclass[tikz]{standalone}

专为所有普通钛金属打造的Z 图片实际上是空的,而所有circuitikz图片的包含

\usepackage[european,straightvoltages]{circuitikz}

\begin{document}对于每幅图像,我现在可以创建一个仅包含和\end{document}以及两者之间的内容的文件(也可以在此处添加该文件的附加前言材料)。circuitikz图像代码保存为img/<filename>.circuit普通的 TiZ 图片为img/<filename>.tikz

下一步要设置的是主文档的 Makefile 和所有图像的另一个 Makefile。

我的最新项目的主要 Makefile 如下所示:

# User defined variables {{{
##########################################
# engine to be used
TEX    = pdflatex
# flags for that engine
FLAGS  = -halt-on-error -8bit
# relative path to included TeX-files
TEXF   = ./tex
# relative path to included TeX-files containing only preamble stuff
PREF   = ./preamble
# relative path to img folder containing tikz and circuit files
IMGF     = ./img
##########################################
# }}}
# Automatically defined variables {{{
##########################################
FILE   = $(wildcard ./*.tex)
SFILES = $(wildcard $(TEXF)/*.tex)
PREAMB = $(wildcard $(PREF)/*.tex)
PREAMB += $(wildcard $(PREF)/*.sty)
PREAMB += $(wildcard ./*.sty)
NAME   = $(FILE:%.tex=%)
OUT    = $(NAME).pdf
FMT    = $(NAME).fmt
##########################################
# }}}
# default target {{{
## the name 'quick' maybe misleading! 'all' might be faster if $(FILE) hasn't
## changed. 'quick' is for quickly running TeX assuming that you know what
## you're doing
quick: $(FMT) img
    $(TEX) $(FLAGS) -fmt="$(NAME)" $(FILE)
    #$(TEX) $(FLAGS) $(FILE);
# }}}
all: img $(OUT) #bib
$(OUT): $(FILE) $(SFILES) $(PREAMB)# {{{
    $(TEX) $(FLAGS) $(FILE);
    $(TEX) $(FLAGS) $(NAME).tex > /dev/null;
    $(TEX) $(FLAGS) $(NAME).tex > /dev/null;
# }}}
$(FMT): $(FILE) $(PREAMB)# {{{
    $(TEX) -ini -enc -jobname="$(NAME)" "&$(TEX)" mylatexformat.ltx """$(FILE)"""
# }}}
img: # {{{
    cd $(IMGF); make -j4
# }}}
.PHONY: clean cleantex cleansubfoldertex quick all img clean_img
clean: cleantex cleansubfoldertex clean_img
cleantex: # {{{
    -rm $(shell find $(NAME)\.* | grep -Ev '\.tex$$' | grep -Ev '\.sty$$' | grep -Ev '\.bib$$')
# }}}
cleansubfoldertex: # {{{
    -cd $(TEXF); rm $(shell cd $(TEXF); find * | grep -v tex);
# }}}
clean_img: # {{{
    -cd $(IMGF); make clean
# }}}

此 Makefile 具有默认目标 quick,如果./preamble/主文件中的某些内容发生变化,它将构建自定义格式,使用选项调用图像的 Makefile,-j4这意味着 Makefile 可以并行运行 4 个进程并构建 PDF。它假设只有一个文件扩展名为,.tex即项目的主文件。

其他目标包括:

  • all:运行 TeX 三次(如有必要,构建图像)
  • clean:调用cleantexcleansubfoldertex并且clean_img
  • cleantex:删除所有与主文件同名的文件,但文件扩展名为 的文件除外.tex.sty并且.bib
  • cleansubfoldertex: 删除全部文件中,除了名称或文件扩展名中./tex/包含的文件之外tex
  • clean_img:使用以下命令调用 img Makefileclean

第二个 Makefile 应放在./img/子文件夹中。它定义了构建不同图像文件类型的规则。

# User defined variables {{{
##########################################
# engine to use for everything that needs TeX
TEX     = pdflatex
# flags for the TeX engine
TFLAG   = -halt-on-error
# Python call
PY          = python
# flags for python
PFLAG   = 
# inkscape call (used for conversion of svg to pdf)
INK         = inkscape
# flags for inkscape
IFLAG   = --without-gui
# output option for inkscape
IOOPT   = --export-pdf=
# relative path to included TeX-files containing preamble stuff
# circuit related preamble
CPREAMB = circuit_preamble.tex
# tikz related preamble
TPREAMB = tikz_preamble.tex
# shared preamble
MPREAMB = ct_preamble.tex
# a configuration file for python
PYCONF  = custom_rcParams.py
# file extensions of different files
# for the tikz pictures
TIKZ    = tikz
# for circuitikz pictures
CIRC      = circuit
# for plots created by python
PYPL        = plot.py
# for svg files
SVG         = svg
##########################################
# }}}
# Automatically defined variables {{{
##########################################
CFILES   = $(wildcard ./*.$(CIRC))
PFILES   = $(wildcard ./*.$(PYPL))
SFILES   = $(wildcard ./*.$(SVG))
TFILES   = $(wildcard ./*.$(TIKZ))
COUT     = $(CFILES:%.$(CIRC)=%.$(CIRC).pdf)
POUT     = $(PFILES:%.$(PYPL)=%.$(PYPL).pdf)
SOUT     = $(SFILES:%.$(SVG)=%.$(SVG).pdf)
TOUT     = $(TFILES:%.$(TIKZ)=%.$(TIKZ).pdf)
##########################################
# }}}

all: circuit pypl svg tikz
circuit: $(COUT)
pypl: $(POUT)
svg: $(SOUT)
tikz: $(TOUT)

%.$(CIRC).pdf: %.$(CIRC) $(CPREAMB) $(MPREAMB)
    $(TEX) $(TFLAG) -jobname="$<" "\input{$(MPREAMB)}\input{$(CPREAMB)}\input{$<}"
    -rm $<.aux
    -rm $<.log

%.$(TIKZ).pdf: %.$(TIKZ) $(TPREAMB) $(MPREAMB)
    $(TEX) $(TFLAG) -jobname="$<" "\input{$(MPREAMB)}\input{$(TPREAMB)}\input{$<}"
    -rm $<.aux
    -rm $<.log

%.$(PYPL).pdf: %.$(PYPL) $(PYCONF)
    $(PY) $(PFLAG) $<

%.$(SVG).pdf: %.$(SVG)
    $(INK) $(IFLAG) $< $(IOOPT)"$<.pdf"

.PHONY: all circuit pypl svg tikz clean clean_tikz clean_circuit clean_pypl clean_svg

clean: clean_tikz clean_circuit clean_pypl clean_svg

clean_circuit:
    -rm $(COUT)
clean_tikz:
    -rm $(TOUT)
clean_pypl:
    -rm $(POUT)
clean_svg:
    -rm $(SOUT)

它创建的所有 PDF 都有命名方案<filename>.<type>.pdf,因此每个 Ti源文件被命名为 的 Z 图片<filename>.tikz将创建一个名为 的 PDF <filename>.tikz.pdf。这样,clean目标就知道哪些 PDF 可以被删除,并且您可以区分文件并\includegraphics根据文件名使用不同的选项。

剩下一件重要的事情是设置graphicx将这些图像文件识别为 PDF。这是通过

\usepackage[]{graphicx}
\DeclareGraphicsRule{.circuit.pdf}{pdf}{*}{}
\DeclareGraphicsRule{.tikz.pdf}{pdf}{*}{}
\DeclareGraphicsRule{.plot.py.pdf}{pdf}{*}{}
\DeclareGraphicsRule{.svg.pdf}{pdf}{*}{}

现在你可以包括你的 Ti带有 Z 的图片\includegraphics{img/<filename>.tikz.pdf}

make在主文件目录中运行应该会构建完成 PDF 所需的一切。

总体方法保持了清晰的结构,并对不同类型的内容使用了不同的名称。

可能的速度提升

上述方法构建速度非常快,因为它尽可能地并行化(如果您的机器有很多核心,您可以将选项更改-j4为更多进程)。通过为 Ti 构建格式可以进一步提高速度Z 和circuitikz文件。

要添加的内容

我使用这个的项目是一份考试的处方集,所以我不需要任何参考书目或索引。如果您需要这些,应该将它们添加到主 Makefile 中(而且应该不太难)。

相关内容