我想传递用户定义的键。但是当用户未指定值时,将使用默认值。我需要一些关于在命令中做什么的解释\setdimensions
。到底是怎么.initial
回事?
\documentclass{article}
\ExplSyntaxOn
% Define dimension variables
\dim_new:N \l_mymodule_width_dim
\dim_new:N \l_mymodule_height_dim
\dim_new:N \l_mymodule_margin_dim
% Define a new key-value family
\keys_define:nn { mymodule }
{
width .dim_set:N = \l_mymodule_width_dim,
width .initial:n = 34pt,
width .default:n = 34pt,
height .dim_set:N = \l_mymodule_height_dim,
height .initial:n = 34pt,
height .default:n = 34pt,
margin .dim_set:N = \l_mymodule_margin_dim,
margin .initial:n = 34pt,
margin .default:n = 34pt,
}
% Command to use the keys
\NewDocumentCommand{\setdimensions}{o}
{
% Use the dimensions in your document or perform other actions
\fbox
{
Width: \dim_use:N \l_mymodule_width_dim \\
Height: \dim_use:N \l_mymodule_height_dim \\
Margin: \dim_use:N \l_mymodule_margin_dim
}
}
\ExplSyntaxOff
\begin{document}
% Example usage
\setdimensions{
width = 8cm,
height = 4cm,
margin = 1.5cm,
}
\end{document}
答案1
如果您希望使参数成为可选的,那么您只需说\setdimensions
使用这些initial
值,您就可以这样做,只要您使用\setdimensions[<list of key-values>]
方括号而不是花括号即可。
例如,
\documentclass{article}
\ExplSyntaxOn
% Define a new key-value family
\keys_define:nn { mymodule }
{
width .dim_set:N = \l_mymodule_width_dim,
width .initial:n = 34pt,
width .default:n = 10pt,
height .dim_set:N = \l_mymodule_height_dim,
height .initial:n = 34pt,
height .default:n = 10pt,
margin .dim_set:N = \l_mymodule_margin_dim,
margin .initial:n = 34pt,
margin .default:n = 10pt,
}
% Command to use the keys
\NewDocumentCommand{\setdimensions} { O{} }
{
% Use the dimensions in your document or perform other actions
\fbox
{
\keys_set:nn { mymodule } { #1 }
\begin{tabular}{ll}
Width: & \dim_use:N \l_mymodule_width_dim \\
Height: & \dim_use:N \l_mymodule_height_dim \\
Margin: & \dim_use:N \l_mymodule_margin_dim
\end{tabular}
}
}
\ExplSyntaxOff
\begin{document}
% Example usage
With custom values:
\setdimensions[%
width = 8cm,
height = 4cm,
margin = 1.5cm,
]
With initial values:
\setdimensions
With default values:
\setdimensions[width,height,margin]
\end{document}
生产
我不确定这是否是使用您想要的不同值的示例......
答案2
您的问题不太清楚,无法回答,但我会尝试......
代码产生
框中的文本没有空格,因为它是设置的\ExplSyntaxOn
,它只显示由键设置的三个寄存器的值initial
,因为这些值是在定义键时设置的,此后您永远不会设置任何键。
[...]
该命令被定义为具有一个它从未使用的可选参数,因此该参数将在以下标记内使用
{
width = 8cm,
height = 4cm,
margin = 1.5cm,
}
根本无法被命令看到,只是排版为文本,如上图所示。
我猜你是想
其中命令被定义为接受一个参数,该参数用于设置键值。键设置包含在本地组中,因此在命令之后不会更改。
\documentclass{article}
\ExplSyntaxOn
% Define dimension variables
\dim_new:N \l_mymodule_width_dim
\dim_new:N \l_mymodule_height_dim
\dim_new:N \l_mymodule_margin_dim
% Define a new key-value family
\keys_define:nn { mymodule }
{
width .dim_set:N = \l_mymodule_width_dim,
width .initial:n = 34pt,
width .default:n = 34pt,
height .dim_set:N = \l_mymodule_height_dim,
height .initial:n = 34pt,
height .default:n = 34pt,
margin .dim_set:N = \l_mymodule_margin_dim,
margin .initial:n = 34pt,
margin .default:n = 34pt,
}
% Command to use the keys
\NewDocumentCommand{\setdimensions}{m}
{
\group_begin:
\keys_set:nn{mymodule}{#1}
% Use the dimensions in your document or perform other actions
\fbox
{\begin{tabular}{l}
Width: \dim_use:N \l_mymodule_width_dim \\
Height: \dim_use:N \l_mymodule_height_dim \\
Margin: \dim_use:N \l_mymodule_margin_dim
\end{tabular}
}
\group_end:
}
\ExplSyntaxOff
\begin{document}
% Example usage
\setdimensions{
width = 8cm,
height = 4cm,
margin = 1.5cm,
}
\end{document}
答案3
这个答案只是为了澄清一些细节,而不是提供一些可以运行的代码。
由于密钥定义和密钥设置是分开的,因此l3keys
您必须运行单独的程序\keys_set:nn
来设置第一个/初始值。由于这很麻烦,并且将密钥声明与其初始化分开,因此.initial:n
添加了处理程序。
该处理程序所做的就是将一个键设置为一个值(因此本质上<key> .initial:n = { <value> }
内部\keys_define:nn { <module> }
与您\keys_set:nn { <module> } { <key> = { <value> } }
在该点放置一个相同,它不会向键代码添加任何其他内容。因此,该键的任何后续设置(嵌套组之外)都将覆盖该.initial:n
值,并且如果没有通过不同方式手动记录它,就不可能将其恢复。