表示变量名的变量怎么用

发布于 2021-11-09 15:08:33

我自己在做定理环境,然后希望根据定理,定义等等情况,自动加不同计数器和设置不同颜色,先来代码

\int_new:N \l__zljdlcounter_int
\int_new:N \l__zljdycounter_int
\int_new:N \l__zljxzcounter_int
\int_new:N \l__zljjlcounter_int
\int_new:N \l__zljtlcounter_int
\int_new:N \l__zljylcounter_int
\int_new:N \l__zljglcounter_int
\NewDocumentCommand{\zljdl}{s O{定理} +m}
{
    \tl_clear_new:N \l_counter_tl
    \tl_clear_new:N \l_color_tl
    \str_case:nnTF {#2}
    {
        {定理}{
            \tl_set:Nn \l_color_tl {red}
            \tl_set:Nn \l_counter_tl {\l__zljdlcounter_int}
            }
        {定义}{
            \tl_set:Nn \l_color_tl {blue}
            \tl_set:Nn \l_counter_tl {\l__zljdycounter_int}
            }
        {性质}{
            \tl_set:Nn \l_color_tl {green!70!black}
            \tl_set:Nn \l_counter_tl {\l__zljxzcounter_int}
            }
        {结论}{
            \tl_set:Nn \l_color_tl {cyan!70!black}
            \tl_set:Nn \l_counter_tl {\l__zljjlcounter_int}
            }
        {推论}{
            \tl_set:Nn \l_color_tl {blue!70!black}
            \tl_set:Nn \l_counter_tl {\l__zljtlcounter_int}
            }
        {引理}{
            \tl_set:Nn \l_color_tl {orange!70!black}
            \tl_set:Nn \l_counter_tl {\l__zljylcounter_int}
            }
        {公理}{
            \tl_set:Nn \l_color_tl {red!70!black}
            \tl_set:Nn \l_counter_tl {\l__zljglcounter_int}
            }
    }
    {}
    {}
    %开始定理主体
        {\heiti\color{\tl_use:N \l_color_tl}\Large #2 }
        \IfBooleanTF{#1}
        {}
        {
            \int_add:Nn \cs_meaning:N \l_counter_tl {1}
            {
                \heiti
                \color{\tl_use:N \l_color_tl}
                \Large 
                \int_use:N \cs_meaning:N\l_counter_tl
            } 
        }
        \hspace*{1em}\kaishu #3
   %
}

后面 IfBooleanTF{#1}这部分搞不定,可不可以int_add:N 后面那个l_counter_tl根据前面的case变化,不太会描述,请高手看看,谢谢

查看更多

关注者
0
被浏览
972
雾月
雾月 2021-11-09
这家伙很懒,什么也没写!
\IfBooleanTF{#1}
        {}
        {
            \int_add:Nn \l_counter_tl {1}
            {
                \heiti
                \color{\tl_use:N \l_color_tl}
                \Large 
                \int_use:N \l_counter_tl 
            } 
        }

直接写就可以了,\int_... 会自动展开。当然也可以使用 \exp_after:wN \int_... \l_counter_tl,不过 \exp_after:wN 是多余的。

你也可以在 \str_case:nn 中使用 \tl_set_eq:NN \l_counter_tl \..._int。这是因为 \tl_set_eq:NN 就是 \let

另外 \color 中的 \tl_use:N 是不必要的,它会自动扩展。(而且 \tl_ue:N 实际上只是检查了一下命令是否存在)
(而 \color_select:n 则必须首先扩展。)

\int_add:Nn .. 1 可简写为 \int_incr:N ..,并且速度更快。

(LaTeX3的命名规范,变量:\⟨scope⟩_⟨module⟩_⟨description⟩_⟨type⟩,函数:\⟨module⟩_⟨description⟩:⟨arg-spec⟩moduledescription 应该用_分隔,module一般是必须的。)

1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览