我想使用external
tikzlibrary 外部化我的图片。问题是里面有创建的图片\newcommand
,我必须自动设置外部化的文件名。
目前我已经让它工作了:
\documentclass[10pt]{beamer}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=TikZfigures-]
\newcommand{\Test}[1]{
\tikzsetnextfilename{#1}
\begin{tikzpicture}
\path (0,0) node (n) {#1};
\end{tikzpicture}
}
\begin{document}
\Test{Works}
\Test{Works}
\Test{Does not work}
\end{document}
当尝试创建文件“TikZfigures-Does not work.tex”时,外部化无法正确执行并崩溃。我该如何避免这个问题?
我在这个问题中发现了类似的问题:TIKZ 使用文件名和路径变量进行外部化
答案1
在被问到这个类似的问题并得到很好的回答后,我自己找到了答案玛丽金:
我修改后的代码如下所示:
\documentclass[10pt]{beamer}
\usepackage{xstring}
\usepackage{tikz}
\usetikzlibrary{external}
\tikzexternalize[prefix=TikZfigures-]
\newcommand{\Test}[1]{
\def\fn{#1}
\StrSubstitute{\fn}{ }{_}[\fn]
\tikzsetnextfilename{\fn}
\begin{tikzpicture}
\path (0,0) node (n) {#1};
\end{tikzpicture}
}
\begin{document}
\Test{Works}
\Test{Works}
\Test{Does still work}
\end{document}
使用xstring
将空格替换为下划线使文件名可以被使用externalize
。如果您有任何其他不能出现在文件名中的符号,也只需替换它们即可。
如果你尝试,问题仍然存在
\begin{document}
\Test{the same}
\Test{the\textunderscore same}
\end{document}
因为它会产生相同的文件名。每个命令单独使用时都可以工作,但一起使用时则不行。