已更新,请参阅编辑历史以了解完整性
我正在尝试键盘命令包但它没有按预期工作。似乎与表格存在一些不兼容问题,但我已经阅读并重读了文档,但还是搞不清楚到底是什么问题。
我构建了一个我正在做的事情的最小示例。它正在使用longtable
,因为它们似乎比常规的要好一点,而且这是我现在需要它与之一起工作的:
\documentclass{article}
\usepackage{longtable}
\usepackage{keycommand}
\newkeycommand\mycommand[first=one,second=2][1]{%
#1 \\
First: \commandkey{first} & second: \commandkey{second}%
}
\begin{document}
\begin{longtable}{ll}
\mycommand{hello} \\
\mycommand[first=1,second=two]{world!}
\end{longtable}
\end{document}
问题在于,它不输出参数值,而是输出参数名称:
EXPECTED OUTPUT ACTUAL OUTPUT
*************** *************
hello hello
First: one second: 2 first: first second: second
world! world!
First: 1 second: two first: first second: second
为什么会这样?我该怎么办?
答案1
这似乎是 中的一个严重错误keycommands
。调用时执行的提供值的赋值\commandkey
是本地的;\\
定义中的 结束了进行这些赋值的组,并且keycommands
忘记了值应该是什么,因此它会打印键名。
您可以使用不同的(可靠的)方法来获得相同的结果。
\documentclass{article}
\usepackage{longtable}
\usepackage{xparse}
\ExplSyntaxOn
% Set up the keys
\keys_define:nn { lycken-mycommand }
{
first .tl_gset:N = \g_lycken_first_tl,
second .tl_gset:N = \g_lycken_second_tl,
}
\NewDocumentCommand{\mycommand}{ O{} m }
{
\keys_set:nn { lycken-mycommand }
{
% provide the default values
first = first,
second = 2,
#1 % evaluate the keys in the optional argument
}
#2 \\
First:~\g_lycken_first_tl & second:~\g_lycken_second_tl
}
\ExplSyntaxOff
\begin{document}
\begin{longtable}{ll}
\mycommand{hello} \\
\mycommand[first=1,second=two]{world!}
\end{longtable}
\end{document}
答案2
这是微不足道的,并且无需任何全局分配(就此而言的任何分配)即可实现expkv-cs
(下面使用它的Hash
变体,因为它的语法更接近keycommand
,即使示例只需要两个键,并且使用变体进行设置会更快Split
)。
免责声明:我是expkv
\documentclass{article}
\usepackage{longtable}
\usepackage{expkv-cs}
% grabbing the argument as an optional argument
\newcommand\mycommand[1][]{\mycommandKV{#1}}
% parsing the keys "first" and "second"
\ekvcHashAndForward\mycommandKV\mycommandOUT{first=one,second=2}
% output
% #1 contains the parsed keys accessible via \ekvcValue
% #2 the mandatory argument
\newcommand\mycommandOUT[2]
{%
#2 \\
First: \ekvcValue{first}{#1} & second: \ekvcValue{second}{#1}%
}
\begin{document}
\begin{longtable}{ll}
\mycommand{hello} \\
\mycommand[first=1,second=two]{world!}
\end{longtable}
\end{document}