L3 乘法表 1

L3 乘法表 1

在我的l3冒险中,我看了这篇文章如何格式化生成的乘法表我很确定可以使用l3实现来实现。在做研究时,我发现@egreg 的帖子加法和乘法表并查看了有关定义新整数值并增加该值的代码。

是否可以在其中创建类似的命令l3

这是我目前的代码:

\documentclass[letterpaper]{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\shcmultiplicationtable}{m}
 {% #1 is max value of multiplication table
  \shc_make_multi_table:n { #1 }
 }

%\NewDocumentCommand{\shcmultiply}{ m m }       % does the multiplication that is desired           
% {
%  \fp_eval:n{ #1 * #2 }
% }

\int_new:N \l_shc_first_number_int
\int_new:N \l_shc_second_number_int

\cs_new_protected:Npn \shc_make_multi_table:n #1 
 {
    \int_set:Nn \l_shc_first_number_int { 0 }
    \int_set:Nn \l_shc_second_number_int { #1 }

    \int_step_inline:nn {#1}
    {
    \int_incr:N \l_shc_first_number_int
    \fp_eval:n{ \l_shc_first_number_int * #1 }
    }

 }
\ExplSyntaxOff

\begin{document}
\shcmultiplicationtable{4}
\end{document}

那么如何才能编写下面的代码呢l3

\def\sz{11}
\foreach \b in {1,...,\sz}{%
    \noindent%
    \foreach \a in {1,2,...,\sz}{%
        \pgfmathparse{int(\a*\b)}%
        \makebox[2em][r]{${\pgfmathresult}$}
    }

}

答案1

嵌套两个\int_step_inline:nn循环:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\multiplicationtable}{m}
 {
  \noindent
  \int_step_inline:nn { #1 }
   {
    \int_step_inline:nn { #1 }
     {
      \makebox[2em][r]{ \int_to_arabic:n { ##1*####1 } }
     }
    \int_compare:nF { #1=##1 } { \\ }
   }
 }

\ExplSyntaxOff

\begin{document}

\multiplicationtable{11}

\end{document}

在此处输入图片描述

第一个\int_step_inline:nn循环用于构建行,基本条目为##1=1。这里的索引必须命名,##1因为它处于“第二级”。每个循环都有一个嵌套\int_step_inline:nn循环,用于构建行中的单元格;这里的索引必须命名为,因为我们处于第三级。参数编号前的标记####1数为 2#n–1,因为在每个级别中都会构建一个带有参数的宏;在更高级别上,当执行宏定义时,每对#标记都会变成一个标记。

在每个单元格中,我们可以使用来计算所需的值\int_to_arabic:,它需要一个“整数表达式”作为其参数。

在外层循环的末尾,我添加了一个测试#1=##1,即我们是否在最后一行;如果不是,则添加。这避免了在空行之前出现\\警告。\\


一种不同的实现方式是使用tabular,其中表主体是预先构建的,从而更容易添加“装饰品”。

\documentclass{article}
\usepackage{xparse,array}

\ExplSyntaxOn

\NewDocumentCommand{\multiplicationtable}{O{2em}m}
 {
  \azetina_multiplicationtable:nn { #1 } { #2 }
 }

\tl_new:N \l__azetina_multiplicationtable_tl

\cs_new_protected:Nn \azetina_multiplicationtable:nn
 {
  \tl_set:Nn \l__azetina_multiplicationtable_tl { $\times$ }
  \int_step_inline:nn { #2 }
   {
    \tl_put_right:Nn \l__azetina_multiplicationtable_tl { & ##1 }
   }
  \tl_put_right:Nn \l__azetina_multiplicationtable_tl { \\ \hline }
  \int_step_inline:nn { #2 }
   {
    \tl_put_right:Nn \l__azetina_multiplicationtable_tl { ##1 }
    \int_step_inline:nn { #2 }
     {
      \tl_put_right:Nx \l__azetina_multiplicationtable_tl
       {
        & \int_to_arabic:n { ##1*####1 }
       }
     }
    \tl_put_right:Nn \l__azetina_multiplicationtable_tl { \\ }
   }
  \begin{tabular}{ @{} r |@{}  *{#2}{w{r}{#1}@{}} }
  \tl_use:N \l__azetina_multiplicationtable_tl
  \end{tabular}
 }

\ExplSyntaxOff

\begin{document}

\multiplicationtable{11}

\bigskip

\multiplicationtable[1.5em]{4}

\end{document}

在此处输入图片描述

相关内容