使用 \def 而不在 pgfplot 中包含方括号?

使用 \def 而不在 pgfplot 中包含方括号?

我想定义一种在我的图片中使用的线条样式。

但仍然希望保留灵活性,以便在实际图片中根据需要调整这些,如下面的第三张图片(注释掉)。但似乎无法让它工作。我认为这与 s 中有\def一个逗号分隔的列表有关,但第二张图片又没有问题。有什么想法吗?

\documentclass{article}
\usepackage{pgfplots}

\def\LineStyleWithSqBrackets{[green, thick]}
\def\LineStyleWithoutSqBrackets{green, thick}

\begin{document}

\begin{tikzpicture}[scale=0.3]
    \draw [green, thick] (0,0) circle (7);
\end{tikzpicture}

\begin{tikzpicture}[scale=0.3]
    \draw \LineStyleWithSqBrackets   (0,0) circle (7);
\end{tikzpicture}

%\begin{tikzpicture}[scale=0.3]
%   \draw [\LineStyleWithoutSqBrackets]   (0,0) circle (7);
%\end{tikzpicture}
\end{document}

答案1

您应该利用以下可能性来定义“真实”样式\tikzstyle{<name>}=[<keys>]

\documentclass{article}
\usepackage{tikz}

\tikzstyle{linestyle}=[green,thick]

\begin{document}
\begin{tikzpicture}[scale=0.3]
   \draw [linestyle]   (0,0) circle (7);
\end{tikzpicture}
\end{document}

答案2

杰克的回答绝对是正确的。你的方法有问题,因为包含选项的宏在(对你来说)错误的时间被扩展。当宏中有方括号时,TeX 会扩展宏一次以查看它是什么,看到方括号,并意识到这是 draw 命令的选项。所以它按预期工作。但在第二个版本中,当你明确地放入方括号时,TeX 不必扩展宏来找到它们。然后它传递宏未扩张计算选项的机制。这将选项划分为扩大它们,因此宏被视为单身的选项“绿色、厚实”,而不是两个选项。从这一点开始,混乱随之而来!

TikZ 自己的附加选项和定义样式的方法是根据处理的工作原理而设计的,因此 Jake 的解决方案是系统,而不是试图绕过它。

相关内容