在尝试回答时LaTeX 音乐我遇到了无法\makebox
在函数内部使用\tl_map_function:NN
调用的问题。以下代码中注释掉了有问题的行。
通过该行我得到这个错误:
! Undefined control sequence.
<argument> \LaTeX3 error:
Erroneous variable \color@endgroup used!
l.43 \function{T}{3---4, ..7-8}
当用例如替换参数#1
中的时,没有错误。在参数中使用和时,我得到相同的错误。\makebox
x
\tl_set:Nn \l_tmpa_tl { #1 }
\tl_use:N \l_tmpa_tl
\makebox
那么在这种情况下我如何使用(或另一个固定宽度的框)?
代码:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\dim_new:N \l_palamas_boxwidth_dim
\dim_set:Nn \l_palamas_boxwidth_dim { 0.5em }
\tl_new:N \g_palamas_line_tl
\tl_set:Nn \g_palamas_line_tl { \rule [ 0.7ex ] { \dim_use:N \l_palamas_boxwidth_dim } { 0.3pt } }
\tl_new:N \g_palamas_space_tl
\tl_set:Nn \g_palamas_space_tl { \hspace { \dim_use:N \l_palamas_boxwidth_dim } }
\cs_new:Npn \palamas_makebox:n #1 {
% DOESN'T WORK:
% \makebox [ \dim_use:N \l_palamas_boxwidth_dim ] [ r ] { #1 }
% DOESN'T WORK:
\tl_set:Nn \l_tmpa_tl { #1 }
\makebox [ \dim_use:N \l_palamas_boxwidth_dim ] [ r ] { \tl_use:N \l_tmpa_tl }
% WORKS:
% #1
}
\cs_new:Npn \palamas_process_list:n #1 {
\tl_set:Nn \l_tmpa_tl { #1 }
\tl_replace_all:Nnn \l_tmpa_tl { - } { \tl_use:N \g_palamas_line_tl }
\tl_replace_all:Nnn \l_tmpa_tl { . } { \tl_use:N \g_palamas_space_tl }
\tl_map_function:NN \l_tmpa_tl \palamas_makebox:n
\\
}
\NewDocumentCommand { \function } { m O{0.1em} m } {
#1
\clist_set:Nn \l_tmpa_clist { #3 }
\kern#2
{
\tiny
\begin{tabular}[b]{@{}l@{}}
\clist_map_function:NN \l_tmpa_clist \palamas_process_list:n
\int_compare:nT { \clist_count:N \l_tmpa_clist < 3 } { \\ }
\end{tabular}
}
}
\ExplSyntaxOff
\begin{document}
\function{T}{3---4, ..7-8} \qquad
\function{D}{4---3, 6-5, ..7-8} \qquad
\function{D}{{11}---,4---3, 6-5--, ..7-8} \qquad
\function{s}{6,5}
\end{document}
答案1
问题是你正在映射一个令牌列表,并且
\tl_use:N \g_palamas_line_tl
是二标记列表中的不同项目\palamas_makebox:n { \tl_use:N }
最终会产生错误。
要么支撑物品
\tl_replace_all:Nnn \l_tmpa_tl { - } { {\tl_use:N \g_palamas_line_tl} }
\tl_replace_all:Nnn \l_tmpa_tl { . } { {\tl_use:N \g_palamas_space_tl} }
或者直接删除\tl_use:N
。顺便说一句,\cs_new_protected:Npn
在有 的两种情况下,您都应该使用\cs_new:Npn
; 并且\dim_use:N
在每个有 的地方都是错误的。