在 TikZ 图片中使用 LaTeX3 变量

在 TikZ 图片中使用 LaTeX3 变量

我是 LaTeX3 的新手,不明白为什么下面的方法不起作用

\documentclass{article}

\usepackage{xparse}
\usepackage{tikz}

\ExplSyntaxOn

\tl_new:N { \g_tobi_color_tl }
\tl_set:Nn { \g_tobi_color_tl } { red }

\tl_new:N { \g_tobi_radius_tl }
\tl_set:Nn { \g_tobi_radius_tl } { 1em }

\NewDocumentCommand { \usevar } { m }
 {
  \tl_use:c { g_tobi_#1_tl }
 }

\ExplSyntaxOff

\begin{document}
Color: \usevar{color}

Radius: \usevar{radius}

\tikz \fill [\usevar{color}] circle [radius=\usevar{radius}] ;
\end{document}

这是 L3 和 TikZ 之间的冲突吗? 可以解决这个问题吗?

“经典” 的方式很好用:

\documentclass{article}

\usepackage{tikz}
\usepackage{etoolbox}

\makeatletter

\def\var@color{red}
\def\var@radius{1em}

\newcommand{\usevar}[1]{%
 \csuse{var@#1}%
}

\begin{document}
Color: \usevar{color}

Radius: \usevar{radius}

\tikz \fill [\usevar{color}] circle [radius=\usevar{radius}] ;
\end{document}

答案1

两个提示:

  1. 您需要一个可扩展的版本\usevar。这可以通过以下方式实现\DeclareExpandableDocumentCommand

  2. 说明符N需要无括号的标记。

这里是例子:

\documentclass{article}

\usepackage{xparse}
\usepackage{tikz}

\ExplSyntaxOn

\tl_new:N  \g_tobi_color_tl 
\tl_set:Nn  \g_tobi_color_tl  { red }

\tl_new:N \g_tobi_radius_tl 
\tl_set:Nn \g_tobi_radius_tl  { 1em }

\DeclareExpandableDocumentCommand { \usevar } { m }
 {
  \tl_use:c { g_tobi_#1_tl }
 }

\ExplSyntaxOff

\begin{document}
Color: \usevar{color}

Radius: \usevar{radius}

\tikz \fill [\usevar{color}] circle [radius=\usevar{radius}] ;
\end{document}

相关内容