为什么pgfkeys的值不能直接使用

为什么pgfkeys的值不能直接使用

以下代码描述了我关于pgfkeys值的使用的问题,这个问题困扰了我很久。有人能帮我吗?

\documentclass{article}
\usepackage{pgfkeys,xcolor}
\begin{document}
\pgfkeys{%
  /path/.cd,
  color/.code=#1,
}

\pgfkeys{/path/.cd,color=yellow} %typeset "yellow" as desired

\pgfkeysvalueof{/path/color} %get nothing, typeset "yellow" is wanted

\color{\pgfkeys{/path/.cd,color=yellow}} %\color{yellow} is desired,but fail to compile

\end{document}

答案1

您可以使用 设置密钥\pgfkeyssetvalue

\documentclass{article}
\usepackage{pgfkeys,xcolor}
\begin{document}
\pgfkeys{%
  /path/.cd,
  color/.code=#1,
}

\pgfkeyssetvalue{/path/color}{yellow}

\pgfkeysvalueof{/path/color} 

\color{\pgfkeysvalueof{/path/color}}{x} %
\end{document}

附录:我不确定我是否理解了评论中您的问题。\color不使用 pgfkeys。但是,您可以使用.store in

\documentclass{article}
\usepackage{pgfkeys,xcolor}
\begin{document}
\pgfkeys{%
  /path/.cd,
  color/.code=#1,
  mycolor/.store in=\mycolor
}

\pgfkeyssetvalue{/path/color}{yellow}

\pgfkeysvalueof{/path/color} 

\color{\pgfkeysvalueof{/path/color}}{x}

\pgfkeys{path/mycolor=red}
\color{\mycolor}{hello}

\end{document}

当然,在手头的例子中,没有太多的好处,但是在你使用 Ti 的其他情况下使用 pgfkeys 的 Z 命令像这儿有。

答案2

这有点复杂:

代码键 ( ) 使用给定的值作为参数 ( ) 执行和/path/some key/.code=之间的代码。通常它没有值,因此不会给出任何内容(参见 7 和 8)。值键可以用 设置。它将用 给出(参见 9)或用 给出(参见 3)。但只会设置值,覆盖旧值,并且不会给出任何内容(参见 6)。=,#1\pgfkeysvalueof{/path/some key}another key/.initial=initial value\pgfkeysvalueof{/path/another key}\pgfkeys{/path/another key}\pgfkeys{/path/another key=another value}

代码键可以有一个默认值 ( path/some key/.default=),如果没有指定值,则将使用该默认值(参见 2)。如果使用给定的值调用该键,则不会更改此默认值。

可以将\pgfkeyssetvalue{/path/some key}{value}值分配给代码键(参见 10)。之后,\pgfkeysvalueof{/path/some key}将传递此值(参见 11)。但\pgfkeys{/path/some key=something}仍将使用给定值作为参数执行代码。尽管如此,这不会更改设置的值\pgfkeyssetvalue(参见 13)。

代码键的更常见示例是color d(参见 14)下面的代码。

以下是一些示例代码:

\documentclass[a4paper]{article}
\usepackage{pgfkeys}
\usepackage{xcolor}

\pgfkeys{%
  /path/.cd,
  color a/.code=#1,
  color b/.code=#1,
  color b/.default=red,
  color c/.initial=blue,
  color d/.code={\color{#1}},
}

\parindent0pt\parskip1ex
\begin{document}
\begin{enumerate}
\item \verb|\pgfkeys{/path/color a}|: \pgfkeys{/path/color a}\\
      (executes given code with empty parameter)
\item \verb|\pgfkeys{/path/color b}|: \pgfkeys{/path/color b}\\
      (executes given code with default value as parameter)
\item \verb|\pgfkeys{/path/color c}|: \pgfkeys{/path/color c}\\
      (gives out initial value)
\item \verb|\pgfkeys{/path/color a=yellow}|: \pgfkeys{/path/color a=yellow}\\
      (executes given code with ``yellow'' as parameter)
\item \verb|\pgfkeys{/path/color b=green}|: \pgfkeys{/path/color b=green}\\
      (executes given code with ``green'' as parameter)
\item \verb|\pgfkeys{/path/color c=cyan}|: \pgfkeys{/path/color c=cyan}\\
      (just sets a new value)
\item \verb|\pgfkeysvalueof{/path/color a}|: \pgfkeysvalueof{/path/color a}\\
      (key has no value)
\item \verb|\pgfkeysvalueof{/path/color b}|: \pgfkeysvalueof{/path/color b}\\
      (key has no value)
\item \verb|\pgfkeysvalueof{/path/color c}|: \pgfkeysvalueof{/path/color c}\\
      (gives out the last value stored)
\item \verb|\pgfkeyssetvalue{/path/color a}{blue}|: \pgfkeyssetvalue{/path/color a}{blue}\\
      (sets a value)
\item \verb|\pgfkeysvalueof{/path/color a}|: \pgfkeysvalueof{/path/color a}\\
      (now key has a value)
\item \verb|\pgfkeys{/path/color a=yellow}|: \pgfkeys{/path/color a=yellow}\\
      (still executes given code with ``yellow'' as parameter)
\item \verb|\pgfkeysvalueof{/path/color a}|: \pgfkeysvalueof{/path/color a}\\
      (but the value has not changed)
\item \verb|\pgfkeys{/path/color d=magenta}|: \pgfkeys{/path/color d=magenta}\\
      (executes given code, which switches to the given color)
\end{enumerate}
\end{document}

其结果如下:

在此处输入图片描述

相关内容