应用存储在文件中的 TikZ 选项

应用存储在文件中的 TikZ 选项

我需要设置一些已通过脚本写入文件的 TikZ 选项。

我想我可以使用一个辅助宏定义\edef和可扩展版本,\input如中所述为什么 \input 不可扩展?,但我的最小文档编译失败

Runaway definition?
->\tikzset { every node/.style={ fill=orange!50,draw=black,thick
! File ended while scanning definition of \auxmacro.
<inserted text>
}
l.12 \@@input inputfile.txt

这是测试文档

\documentclass{article}
\usepackage{tikz}
\usepackage{filecontents}

\begin{filecontents}{inputfile.txt}
fill=orange!50,draw=black,thick
\end{filecontents}

\makeatletter
\edef\auxmacro{\noexpand\tikzset{
    every node/.style={
        \@@input inputfile.txt
    }
}}
\auxmacro
\makeatother

\begin{document}
\begin{tikzpicture}
\node {Testnode};
\end{tikzpicture}
\end{document}

如何应用存储在文件中的 TikZ 选项?

答案1

\everyeofe-tex primitive 是你的朋友:

\documentclass{article}
\usepackage{tikz}
\usepackage{filecontents}

\begin{filecontents}{inputfile.txt}
fill=orange!50,draw=black,thick
\end{filecontents}

\everyeof{\relax}
\makeatletter
\def\auxmacro#1\relax{\tikzset{every node/.style={#1}}}
\expandafter\auxmacro\@@input inputfile.txt 
\makeatother

\begin{document}
\begin{tikzpicture}
\node {Testnode};
\end{tikzpicture}
\end{document}

答案2

在外部文件中包含所有必要的宏可以实现一种非常直接的方法:

\documentclass{article}
\usepackage{tikz}
\usepackage{filecontents}

\begin{filecontents}{inputfile.tex}
    \tikzset{every node/.style={
        fill=orange!10, draw=black, thick
    }}
\end{filecontents}

\input{inputfile}

\begin{document}
\begin{tikzpicture}
  \node {Testnode};
\end{tikzpicture}
\end{document}

答案3

不幸的是,你不能\@@input\edef定义中使用,因为文件结尾会触发错误。catchfile包通过使用一些 e-TeX 功能为您完成此任务(类似于 David 的回答)。它将文件内容存储在宏中,然后可以将其与宏一起/.expand once使用\tikzset

\documentclass{article}
\usepackage{tikz}
\usepackage{catchfile}
\usepackage{filecontents}

\begin{filecontents}{inputfile.txt}
fill=orange!50,draw=black,thick
\end{filecontents}

\makeatletter
\CatchFileDef{\extstyles}{inputfile.txt}{}
\tikzset{
    every node/.style/.expand once=\extstyles
}
\makeatother

\begin{document}
\begin{tikzpicture}
\node {Testnode};
\end{tikzpicture}
\end{document}

相关内容