使用 \includestandalone 来制作使用 \includegraphics 的 TikZ 图形

使用 \includestandalone 来制作使用 \includegraphics 的 TikZ 图形

我有一个主文档,它导入了独立文档中包含的 TikZ 图形。TikZ 图形\includegraphics在其中一个节点内使用,在同一文件夹中添加 PNG 图形。它可以自行正确编译,但如果我没有对其进行预编译,然后尝试编译主文档,则不会包含 PNG 图像,并且节点显示为空。

以下是MWE的文件结构:

|- main.tex
|- images
   |- standalone-image.tex
   |- image.png

主文本

% !TeX document-id = {e9c1e577-28e1-405c-8571-6a9245078427}
% !TeX TXS-program:compile = txs:///pdflatex/[-shell-escape]
\documentclass{article}

\usepackage[mode=buildnew,subpreambles=true]{standalone}

\begin{document}

\begin{figure}
    \includestandalone[width=\linewidth]{images/standalone-image}
\end{figure}

\end{document}

独立图像.tex

\documentclass[tikz,beamer,preview]{standalone}

\begin{document}
\begin{standaloneframe}[fragile]
\begin{tikzpicture}

    \node (n) {\includegraphics{image}};

\end{tikzpicture}
\end{standaloneframe}
\end{document}

有没有什么办法可以让它在两种情况下都能正确编译?我已经尝试过导入包和\ifstandalone宏,但没有成功。请注意,该-shell-escape标志是使用 TeXstudio 的“魔术注释”包含的,因此这也不是问题所在。

答案1

你可以让 tex 查看images文件夹以自动查找图像,方法是使用 \graphicspath{{images}}

\documentclass{article}

\usepackage[mode=buildnew,subpreambles=true]{standalone}
\usepackage{tikz}

\graphicspath{{images}}

\begin{document}

\begin{figure}
    \includestandalone[width=\linewidth]{images/standalone-image}
\end{figure}

\end{document}

答案2

为了在编译 main.tex 文件时成功编译你的 Tikz 图片,你需要输入

\node (n) {\includegraphics{images/image}};

代替

\node (n) {\includegraphics{image}};

这是相对于您的 main.tex 文件的图像的正确路径。

使用 Makefile 是一个很好的解决方案,可以确保独立文档得到很好的编译。

这是一个适合您的 Makefile 示例(我没有执行它)。

 INPUT_DIR      := .
 INPUT          := $(INPUT_DIR)main.tex
 FIGURE_DIR     := $(INPUT_DIR)images/
 TARGET_DIR     := .
 TARGET         := $(TARGET_DIR)main.pdf

 all: figure $(TARGET)

 $(TARGET): $(INPUT_DIR)*.tex $(FIGURE_DIR)
    rubber -m pdftex --into $(TARGET_DIR) $(INPUT)

 figure:
    for file in $$(ls $(FIGURE_DIR)*.tex | cut -d \. -f 1); do \
        make -s $$file.pdf; \
    done;

%.pdf: %.tex
    rubber -m pdftex --inplace $<

.SILENT: figure $(TARGET)

(在特殊情况下,因为 rubber 选项 --inplace 改变了您的位置,所以您不需要改变您的图像路径)。

相关内容