TikZ 中的简单宏失败

TikZ 中的简单宏失败

简单的宏有时与 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}

在此处输入图片描述

相关内容