我需要设置一些已通过脚本写入文件的 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
\everyeof
e-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}