我有一个主文档,它导入了独立文档中包含的 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 改变了您的位置,所以您不需要改变您的图像路径)。