我想創建一個自訂環境,目前面臨以下問題:
- 我想向我的環境傳遞一個選項來縮放 tikzpicture,但第一個範例不起作用並傳回以下錯誤 -> !缺失數字,視為零。
- 第二個似乎有效,但我不明白為什麼第一個不起作用,如果它與第二個類似。
- 此錯誤是由以下程式碼引起的:->
scale = \scalevalue
\documentclass{article}
\usepackage{l3keys2e}
\usepackage{tikz}
\ExplSyntaxOn
\keys_define:nn{test} {
scale .tl_set:N = \l_test_scale_tl,
scale .default:n = 1,
scale .initial:n = 1
}
\ExplSyntaxOff
\NewDocumentEnvironment{myenv}{o}
{
% Options
\ExplSyntaxOn
\IfNoValueF{#1}{\keys_set:nn {test}{#1}}
\ExplSyntaxOff
\ExplSyntaxOn
\newcommand*{\scalevalue}{\the\numexpr\l_test_scale_tl\relax}
\ExplSyntaxOff
\begin{tikzpicture}[scale = \scalevalue, transform shape]
}
{
\end{tikzpicture}
}
\begin{document}
% Example 1: Error
%\begin{myenv}
%\node[draw] (a) at (0,0) {A};
%\end{myenv}
% Example 2: No error
\ExplSyntaxOn
\newcommand*{\scalevalue}{\l_test_scale_tl}
\ExplSyntaxOff
\begin{tikzpicture}[scale = \scalevalue, transform shape]
\node[draw] (a) at (0,0) {A};
\end{tikzpicture}
\end{document}
答案1
問題是你用得\ExplSyntaxOn
太晚了。它必須在讀取時被激活\NewDocumentEnvironment
,因為此時決定如何_
處理eg。所以你需要類似的東西
\ExplSyntaxOn
\NewDocumentEnvironment{myenv}{o}{... no switching of \ExpSyntax ...}
\ExplSyntaxOff
但現在tikzpicture
,特別是 和 之間的空格transform
也在shape
這個語法的範圍內,tikz 會抱怨transformshape
(沒有空格)未知。
你可以做這樣的事情。
\documentclass{article}
\usepackage{l3keys2e}
\usepackage{tikz}
\ExplSyntaxOn
\keys_define:nn{test} {
scale .tl_set:N = \l_test_scale_tl,
scale .default:n = 1,
scale .initial:n = 1
}
\newcommand\preparePic[1]{%
\IfNoValueF{#1}{\keys_set:nn {test}{#1}}%
\newcommand*{\scalevalue}{\the\numexpr\l_test_scale_tl\relax}%
}
\ExplSyntaxOff
\NewDocumentEnvironment{myenv}{o}
{
\preparePic{#1}
\begin{tikzpicture}[scale = \scalevalue, transform shape]
}
{
\end{tikzpicture}
}
\begin{document}
\begin{myenv}
\node[draw] (a) at (0,0) {A};
\end{myenv}
\end{document}