在下面的 MWE 中,我使用\def\path{numworks/\int_use:N \l__test_this_step_int.png}
和\includegraphics[scale = #3]{\path}
。
我可以避免使用\def
“纯” LaTeX3 编码风格吗?
注意:我的代码的下一步将是用用户给出的?
参数中的实际步数计数器替换。numworks/?.png
\documentclass[a4paper, 12pt]{article}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{expl3}
\usepackage{xparse}
\ExplSyntaxOn
\int_new:N \l__test_max_step_int
\int_new:N \l__test_this_step_int
\DeclareDocumentCommand\screensteps{vvv}{
\int_set:Nn \l__test_max_step_int{#1}
\int_set:Nn \l__test_this_step_int{0}
% Lets' print the material...
\int_do_while:nn {\l__test_this_step_int < \l__test_max_step_int} {
\int_gincr:N \l__test_this_step_int
\int_if_odd:nTF { \l__test_this_step_int } {
\begin{multicols}{2}
\centering
}{
\columnbreak
}
\par\emph{Étape \ \int_use:N \l__test_this_step_int.}
\par\smallskip
%%%%%%%%%%%% HERE
\def\path{numworks/\int_use:N \l__test_this_step_int.png}
%%%%%%%%%%%% HERE
\includegraphics[scale = #3]{\path}
\int_if_even:nT{ \l__test_this_step_int } {
\end{multicols}
}
}
}
\ExplSyntaxOff
\begin{document}
\screensteps{6}{numworks/?.png}{.6}
\end{document}
答案1
\def
非常通用,因此很大程度上取决于您想要做什么。如果您想要\def
“定义命令”,那么您需要\cs_new(_protected):Npn
。如果您想要\def
“存储一些数据”,那么您需要\tl_set:Nn
。这里您想要存储图像的路径,因此肯定是后者。此外,图像路径可以更具体地视为字符串,因此您可以使用\str_set:Nn
。
在下面的代码中,我使用了\str_set:Nx
,这样参数中的任何用户宏都会被展开,并且已经添加到用当前步骤号\str_replace_all:Nnn
替换所有?
宏中。由于您只想无条件地从 1 循环到#1
,因此您可以使用 ,\int_step_inline:nn
而不是比较步骤号并每次增加计数器。如果您使用\int_step_inline:nn
,那么您就可以像内联代码中一样获得当前循环索引##1
。
下面的例子尝试包含(numworks/1.png
但numworks/6.png
失败了,因为我没有这些文件:)
\documentclass[a4paper, 12pt]{article}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{expl3}
\usepackage{xparse}
\ExplSyntaxOn
\str_new:N \l__test_path_str
\DeclareDocumentCommand \screensteps {mmm}
{
\int_step_inline:nn {#1}
{
\int_if_odd:nTF {##1}
{
\begin{multicols}{2}
\centering
}
{ \columnbreak }
\par \emph {Étape ~ ##1 . }
\par \smallskip
\str_set:Nx \l__test_path_str {#2}
\str_replace_all:Nnn \l__test_path_str { ? } {##1}
\includegraphics[scale = #3]{\l__test_path_str}
\int_if_even:nT {##1}
{ \end{multicols} }
}
}
\ExplSyntaxOff
\begin{document}
\screensteps{6}{numworks/?.png}{.6}
\end{document}
屏幕截图由 projetmbc 添加