我想在外部 PDF 文件中创建 TikZ 图片,然后可以通过 将其包含在我的主文档中\includegraphics
。但是,编译包含 TikZ 图片的文档会产生整整一页,这意味着有很多空白。
我想要做的事情可以使用预览包来完成,如下所述使用 TikZ 的独立图表?,在 SO 上。但是预览包和 XeTex 存在一些问题(请参阅tikz、预览包和 xelatex 中的透明度)。
由于创建独立图片似乎是一件很自然的事情,我希望有一个不同的、也许更优雅的解决方案。
答案1
您可以使用standalone
类。在 v0.x 中,它是preview
内部使用的,但对于 v1.x,它还有一个替代crop
选项,其工作原理类似于preview
选项/包,但避免了与 XeTeX 相关的问题。
现在 (v1.0) 还有一个tikz
类选项,可以将任何 (外部)tikzpicture
变成单个紧密页面。这可以避免尾随隐式段落的问题。此外,它还会自动加载包tikz
。
% tikzpic.tex
\documentclass[crop,tikz]{standalone}% 'crop' is the default for v1.0, before it was 'preview'
%\usetikzlibrary{...}% tikz package already loaded by 'tikz' option
\begin{document}
\begin{tikzpicture}
\draw (0,0) -- (10,10); % ...
\end{tikzpicture}
\end{document}
然后像平常一样用pdflatex
或xelatex
等进行编译。
要将其包含tikzpicture
到主文档中,请加载standalone
包裹在那里使用选项mode=buildnew
。然后使用\includestandalone[<options>]{<filename>}
而不是\includegraphics
。这将自动将所有包含的独立文件编译为图形,如果源文件比现有图形文件新,则构建这些图形。需要-shell-escape
启用此功能以允许主 LaTeX 运行调用其他 LaTeX 编译器。standalone
有关更多详细信息,请参阅手册。
% main.tex
% compile with `pdflatex -shell-escape main` or `xelatex -shell-escape main`
\documentclass{article}
\usepackage[mode=buildnew]{standalone}% requires -shell-escape
\usepackage{tikz}
%\usetikzlibrary{...}
\begin{document}
Lorem ipsum ...
\includestandalone[width=.8\textwidth]{tikzpic}
Lorem ipsum ...
\end{document}
答案2
我最终external library
按照 diabonas 的建议使用了 。
以下是 XeTeX 的一个例子:
\documentclass{article}
\usepackage{fontspec}
\setmainfont[Mapping=tex-text]{Linux Libertine O}
\usepackage{tikz}
\definecolor{blue}{cmyk}{1,1,0,0.07}
\usetikzlibrary{external}
\tikzexternalize
\tikzset{external/system call={xelatex \tikzexternalcheckshellescape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
\tikzset{external/force remake=true}
\begin{document}
\tikzstyle{place}=[circle,draw=blue,fill=blue!20,line width=2pt]
\begin{tikzpicture}
\node at (0,0) [place] {Ti\textit{k}Z};
\end{tikzpicture}
\end{document}
必须使用 进行编译-shellescape
。
一个小小的不便是,适当裁剪的文件被命名为<filename>-figure0
。
答案3
pdfcrop
也许将标准文章类别和/或裁剪设施结合起来adjustbox
会是一个解决办法。
article
因此,例如,您使用类将图片制作成单独的文件。然后,您使用包clipbox
中的adjustbox
图片剪辑\includegraphics
到您真正想要的部分...