LaTeX 抱怨非法参数数量

LaTeX 抱怨非法参数数量

灵感来自昨天的一个问题,我想尝试一下 LaTeX3 解决方案,它将展示如何将十进制数字转换为用户选择的任何其他进制。

昨天我写了一个不错的简单版本,效果很好。但今天,我决定将步骤的构建与输出和格式化这些步骤的过程分开。我还认为探索创建以下效果的可能性会很有趣:数组中的数组使用sequencestoken lists

但现在,我遇到了一个错误。

\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{xparse}
\pagestyle{empty}
\ExplSyntaxOn
%% setting and getting the base
\int_new:N \g__new_base_int
\NewDocumentCommand{\setbase}{ m }{
    \int_gset:Nn \g__new_base_int { #1 }
}
\NewDocumentCommand{\getbase}{}{
    \int_use:N \g__new_base_int
}
%% setting and getting the number to be converted
\int_new:N \g__number_to_convert_int
\NewDocumentCommand{\setnumber}{ m }{
    \int_gset:Nn \g__number_to_convert_int {#1}
}
\NewDocumentCommand{\getnumber}{ }{
    \int_use:N \g__number_to_convert_int
}

%%---internal function to build each step in the conversion process
%%---and the parameters to be used for this function
\int_new:N \l__quotient_int
\int_new:N \l__tmp_new_quotient_int
\int_new:N \l__remainder_int
\seq_new:N \g__steps_of_conversion
\cs_new:Nn \__build_steps_of_conversion: {
    \int_set_eq:NN \l__quotient_int  \g__number_to_convert_int
    \int_do_while:nn { \l__quotient_int >= \g__new_base_int }
        {
            \int_set:Nn \l__remainder_int {  \int_mod:nn { \l__quotient_int } { \g__new_base_int } }
            \int_set:Nn \l__tmp_new_quotient_int { \int_div_truncate:nn { \l__quotient_int } {\g__new_base_int }}
            \exp_args:NNx \seq_gput_right:Nn \g__steps_of_conversion 
                {  
                    {\int_use:N \g__new_base_int  }
                    {\int_use:N \l__quotient_int  }
                    {\int_use:N \l__remainder_int }
                    {\int_use:N \l__tmp_new_quotient_int}
                }
            \int_set_eq:NN \l__quotient_int \l__tmp_new_quotient_int
        }
}
%%---internal function to construct the display of the conversion process
\bool_new:N \l__first_item_on_line_bool
\cs_new:Nn \__show_steps_of_conversion: {
    \__build_steps_of_conversion:
    \seq_map_inline:Nn \g__steps_of_conversion 
        {
            \bool_set_true:N \l__first_item_on_line_bool
            \tl_map_inline:nn { ##1 } {
                \bool_if:NF \l__first_item_on_line_bool { & }
                ###1 
                \bool_set_false:N \l__first_item_on_line_bool
            }
            \\
        }
}
%%---user interface to displaying the conversion
\NewDocumentCommand{\showstepsofconversion}{ o }{
    \[
        \begin{array}{crc|r}
            \text{Base} & & \text{R} & \text{Q} \\\hline
            \__show_steps_of_conversion: 
        \end{array}
    \]
}
%% accessing and using LaTeX3's internal base conversion
\NewDocumentCommand{\converttobase}{m}{
    \int_to_base:nn {#1} \g__new_base_int
}
%%
\ExplSyntaxOff
\setlength{\parindent}{0pt}
\setbase{21}
\setnumber{2680010}
\begin{document}

The base is \getbase.  \getnumber{} becomes $\converttobase{\getnumber}_{\getbase}$.

\showstepsofconversion

\end{document}

问题似乎是###1。奇怪的是,输出结果正是我想要的。建议的更正为##1显然不正确,当我将代码重写为 时,##1我得到了错误的值。

答案1

您希望在宏定义中#引用4。 #1(这是原始的 TeX 解析,而不是 LaTeX3 功能)

            ####1 

不是

            ###1 

相关内容