10 latex3中关于循环语句的疑惑

发布于 2024-08-07 14:27:48

请问对于下面的latex3代码:

\documentclass{article}
\usepackage[margin=2cm]{geometry}
\usepackage{amsmath}
\usepackage{ctex}
\pagestyle{empty}
\begin{document}
\ExplSyntaxOn
\int_set:Nn \l_tmpa_int {0}
实际上我们还可以尝试设置步长进行循环.\par
\int_step_inline:nnnn {30} {10} {60}{
    \int_incr:N \l_tmpa_int
    步长为~10~的循环之~{#1}~,这是第~\int_use:N \l_tmpa_int~个数\par
}
\int_new:N \l_loop_var
\int_step_variable:nnNn {10} {20} \l_loop_var {
    这是第~\l_loop_var~个数\par
}
\ExplSyntaxOff
\end{document}

(1)代码中为什么\l_tmpa_int需要使用\int_use:N输出,而\l_loop_var可以直接作为一个宏输出呢?我看下图文档均在输出流.

image.png

(2)传入参数#1时,是否可以在其两侧加上{,#1{#1}是否有什么区别.
(3)\int_step_variable相较于\int_step_inline有什么其他的好处吗,是否仅仅是在内部调用时参数使用方式的不同,一者为#1,另一者为\tl_xyz?

查看更多

关注者
0
被浏览
597
鱼香肉丝没有鱼先生
鱼香肉丝没有鱼先生.

(1).

\int_new:N \l_loop_var
\int_step_variable:nnNn {10} {20} \l_loop_var {
    这是第~\l_loop_var~个数\par
}

其实你这里的第一行没有意义

image.png

可以看到,\int_step_variable:nnNn 需要的第三个参数需要接受一个 tl 类型 token,在循环的时候将每一次待循环的值赋给它, 他甚至不需要被定义.

在 LaTeX3 中有些变量是基于宏实现,还有一部分是基于寄存器实现,前者可以直接使用,后者则需要在前面加上 \xxx_use:, 类似的在 TeX 中也有体现

\def\cmd{aaa}
\cmd % normally

\newcount\mycnt
\mycnt=1
\mycnt % error
\the\mycnt % normally

(2).

传入参数 #1 是指循环体内部的 {#1}? 这里的 {} 可有可无.

(3).
个人感觉分场景吧, 如果你的循环在函数定义的内部, 那么循环体内部的 # 容易和函数定义中的 # 混淆, 因此循环体内部的 # 需要加倍, 如果嵌套比较深的情况下 ########1 这种东西一长串的虫子会比较恶心, 而使用 \int_step_variable 可以避免.

1 个回答

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览