有没有一种简洁的方法可以为多个 pgfkey 设置相同的默认值?

有没有一种简洁的方法可以为多个 pgfkey 设置相同的默认值?

我想为多个 PGF 键设置相同的默认值,例如在这种情况下和都a具有b默认值1

\documentclass{article}
\usepackage{pgfkeys}
\pgfkeys{
 a/.code={a:#1},
 a/.default=1,
 b/.code={b:#1},
 b/.default=1
}
% the rest is irrelevant, the question only concerns setting the keys
\begin{document}
 \pgfkeys{a,b}
\end{document}

在我的实际代码中,包含远多于两个的键,因此,编写 、 等非常重复keya/.default=1keyb/.default=1那么,是否可以一次性为大量键设置默认值,并且输入的内容比为每个这样的键进行一次完整分配所需的输入更少?如果键有继承的概念,这样我就可以在“基本键”上设置默认值,然后从中“派生”其他键,那么这对于我的目的来说非常有效,但是从手册中我看不到这一点。也许我错过了。

当然我没有理由来做到这一点;只需写一大堆key/.default=1行就可以了,但我很好奇是否可以做到这一点。

答案1

使用pgffor(@percusse 打败了我,但这仍然有点不同,因为它允许您对a和有不同的定义b):

\documentclass{article}
\usepackage{pgfkeys}
\usepackage{pgffor}
\pgfkeys{
 default to 1/.style={#1/.default=1},
 a/.code={a:#1},
 b/.code={b:#1},
 default to 1/.list={a,b}
}
% the rest is irrelevant, the question only concerns setting the keys
\begin{document}
 \pgfkeys{a,b}
\end{document}

或者,如果您希望能够动态指定默认值:

\documentclass{article}
\usepackage{pgfkeys}
\usepackage{pgffor}
\pgfkeys{
 set default/.style args={of #1 to #2}{
     default to #2/.style={##1/.default=#2},
     default to #2/.list={#1}
 },
 a/.code={a:#1},
 b/.code={b:#1},
 c/.code={c:#1},
 d/.code={d:#1},
 set default = of {a,c} to 1,
 set default = of {b,d} to 2
}
\begin{document}
 \pgfkeys{a,b,c,d}
\end{document}

答案2

是的,它是/.list处理程序。它的参数被传递给一个\foreach数组,每次旋转时,下一个项目都会传递给原始处理程序。

\documentclass{article}
\usepackage{pgfkeys,pgffor}
\pgfkeys{
mykeysetter/.style={
#1/.code={#1:##1},
#1/.default=1
},
mykeysetter/.list={a,b,c}
}

\begin{document}
 \pgfkeys{a=4,b=3,c}
\end{document}

这给出

答:4b:3c:1

答案3

你手头有一个宏处理器,所以如果 tikz 没有直接提供该功能,你可以为其定义一个宏:

\documentclass{article}
\usepackage{pgfkeys}
\def\foo#1{\pgfkeys{#1/.code={#1:##1},#1/.default=1}}

\foo{a}
\foo{b}

% the rest is irrelevant, the question only concerns setting the keys
\begin{document}
 \pgfkeys{a,b}
\end{document}

相关内容