我是 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
两个提示:
您需要一个可扩展的版本
\usevar
。这可以通过以下方式实现\DeclareExpandableDocumentCommand
说明符
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}