10 怎样定义一个命令可以根据变量字符个数替换成符号

发布于 2021-04-06 19:59:07

我想根据汉字的字数,将一串汉字转换为一些框,比如下面的代码,“好好学习天天向上”一共有8个汉字,对应的我想替换成八个square。请问是否可以自定义一个命令,可以根据命令变量中字符的个数,生成对应的square?

我浏览了stackexchange,看到一些相关的,但基本上是替换特定符号,我想根据汉字个数生成相应的框,不知道怎么实现,请各位大佬指导一下

\documentclass{ctexart}
\usepackage{amssymb}
\begin{document}
    好好学习天天向上

    $\square$ $\square$ $\square$ $\square$ $\square$ $\square$ $\square$ $\square$

    \mycmd{好好学习天天向上}
\end{document}

查看更多

关注者
0
被浏览
1.1k
如果您有什么不同意见,您是对的,我是错的。
这家伙很懒,什么也没写!

你是想做填空题?为何不用下划线呢?

\documentclass{ctexart}
\usepackage{xeCJKfntef}
\begin{document}
  \CJKunderline*[thickness=1pt, hidden=true]{瞻彼阕者,虚室生白,吉祥止止}
\end{document}

按照@u14623 的代码,我修改了一下

  • 我用 texlive 2021,改成 \int_sub:Nn \l__char_int 1 才是正确的结果
  • @u5175 说的报错是指 \l__char_int 在第二次使用时会重复定义,这是代码写的有问题,放到前面去就好了
\documentclass{ctexart}
\usepackage{expl3}
\usepackage{xparse}
\usepackage{l3keys2e}
\usepackage{amssymb}

\begin{document}
    \ExplSyntaxOn
      \int_new:N \l__char_int
        \NewDocumentCommand{\squarechar}{ m }
        {
            \int_set:Nn \l__char_int {\str_count:n {#1}}
            \int_do_while:nn {\l__char_int > 0}
            {
                $\square$
                \int_sub:Nn \l__char_int 1
            }
        }
    \ExplSyntaxOff
    \squarechar{好好学习,天天向上}

    \squarechar{好好学习}

    \squarechar{学习}
\end{document}
2 个回答
天地無用
天地無用 2021-04-06
这家伙很懒,什么也没写!
\documentclass{ctexart}
\usepackage{expl3}
\usepackage{xparse}
\usepackage{l3keys2e}
\usepackage{amssymb}

\begin{document}
    \ExplSyntaxOn
        \NewDocumentCommand{\squarechar}{ m }
        {
            \int_new:N \l__char_int
            \int_set:Nn \l__char_int {\str_count:n {#1}}
            \int_do_while:nn {\l__char_int > 0}
            {
                $\square$
                \int_sub:Nn \l__char_int 3
            }
        }
    \ExplSyntaxOff
    \squarechar{好好学习,天天向上}
\end{document}

这个字符只能输入汉字字符,因为汉字在LaTeX3占的字符数是3个,如果输入英文符号的话会出错,暂时没想到怎么解决,希望能帮到你

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览