\tikzsetnextfilename 使用文件名作为变量进行外部化

\tikzsetnextfilename 使用文件名作为变量进行外部化

我想使用externaltikzlibrary 外部化我的图片。问题是里面有创建的图片\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}

因为它会产生相同的文件名。每个命令单独使用时都可以工作,但一起使用时则不行。

相关内容