简单的宏有时与 TikZ 不兼容吗?
我正在制作一大堆图表,我想从序言中控制它们的格式。
但这个看似微不足道的努力在代码中却失败了。
发生了什么?为什么第一张TikZ
图片可以,而第二张图片却不行?
\documentclass{article}
\usepackage{tikz}
% THIS IS THE MACRO THAT FAILS
\newcommand{\BlueLine}{line width = 2.8pt, blue, opacity=0.35}
\begin{document}
% THIS COMPILES
\begin{tikzpicture}
\draw[line width = 2.8pt, blue, opacity=0.35] (0.3,-3)--(7,3);
\end{tikzpicture}
% THIS DOES NOT COMPILE
\begin{tikzpicture}
\draw[\BlueLine] (0.3,-3)--(7,3);
\end{tikzpicture}
\end{document}
答案1
为此,tikz 定义样式。因此
\newcommand{\BlueLine}{line width = 2.8pt, blue, opacity=0.35}
你应该定义风格:
\tikzset{
BlueLine/.style={line width = 2.8pt, blue, opacity=0.35}
}
然后使用如下方式:
\documentclass[tikz, margin=3mm]{standalone}
\tikzset{
BlueLine/.style={line width = 2.8pt, blue, opacity=0.35}
}
\begin{document}
\begin{tikzpicture}
\draw[BlueLine] (0.3,-3)--(7,3);
\end{tikzpicture}
\end{document}
答案2
\BlueLine
在使用时宏不会被展开\draw
。
强制执行此操作的一种方法是\expandafter\Draw\expandafter[\BlueLine] ...;
另一个是定义样式(正如 Zarko 的回答中所做的那样)
\documentclass{article}
\usepackage{tikz}
% THIS IS THE MACRO THAT FAILS
\newcommand{\BlueLine}{line width = 2.8pt, blue, opacity=0.35}
\begin{document}
% THIS COMPILES
\begin{tikzpicture}
\draw[line width = 2.8pt, blue, opacity=0.35] (0.3,-3)--(7,3);
\end{tikzpicture}
\begin{tikzpicture}
\expandafter\draw\expandafter[\BlueLine] (0.3,-3)--(7,3);
\end{tikzpicture}
\end{document}