使用 \int_step_function

使用 \int_step_function

考虑以下 MWE:

在此处输入图片描述

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

\ExplSyntaxOn

\NewDocumentCommand{\miconcentric}{ O{0.08ex} }
 {
  \mathicon_concentric_circles:n { #1 }
 }
     
\cs_new_protected:Nn \mathicon_concentric_circles:n
 {
 \draw_begin:
 \draw_linewidth:n { #1 }
 \draw_path_circle:nn { 0 , 0 }{ 1.00ex }
 \draw_path_circle:nn { 0 , 0 }{ 0.75ex }
 \draw_path_circle:nn { 0 , 0 }{ 0.50ex }
 \draw_path_use_clear:n { stroke }
 \draw_end:
 }
\ExplSyntaxOff

\begin{document}
    Sample \miconcentric
\end{document}

l3draw手册中可以找到以下内容:

在绘图中,应该出现的命令只有直接用于绘图的命令(来自l3draw)和不产生排版输出的命令。例如,可以使用\int_step_function:nnnN或类似命令在绘图中包含循环。

有没有办法用绘制同心圆\int_step_function:nnnN

答案1

要在此处使用\int_step_function:nnnN,您首先需要某种方法将整数转换为半径的维度。此处使用 更简单\dim_step_function:nnnN,因为您需要维度。

要使用,\dim_step_function:nnnN您需要将其制作\draw_path_circle:nn { 0 , 0 }{ <radius> }成一个采用 as 参数的单个(单标记或N类型)宏<radius>,因此

\cs_new_protected:Npn \mathicon_circle_origin:n #1
  { \draw_path_circle:nn { 0 , 0 } {#1} }

然后使用

% \dim_step_function:nnnN { begin } {  step  } {  end  } \function
  \dim_step_function:nnnN { 0.5ex } { 0.25ex } { 1.0ex } \mathicon_circle_origin:n

尽管如果它是一次性的,您也可以使用以下inline版本:

% \dim_step_inline:nnnn { begin } {  step  } {  end  } { inline function }
  \dim_step_inline:nnnn { 0.5ex } { 0.25ex } { 1.0ex } { \draw_path_circle:nn { 0 , 0 } {#1} }

完整代码如下:

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

\ExplSyntaxOn
\NewDocumentCommand{\miconcentric}{ O{0.08ex} }
  {
    \mathicon_concentric_circles:n {#1}
  }
\cs_new_protected:Nn \mathicon_concentric_circles:n
  {
    \draw_begin:
    \draw_linewidth:n { #1 }
    % This
    \dim_step_inline:nnnn { 0.5ex } { 0.25ex } { 1.0ex }
      { \draw_path_circle:nn { 0 , 0 } {##1} }
    % or this and the definition below
    % \dim_step_function:nnnN { 0.5ex } { 0.25ex } { 1.0ex }
    %   \mathicon_circle_origin:n
    %
    \draw_path_use_clear:n { stroke }
    \draw_end:
  }
\cs_new_protected:Npn \mathicon_circle_origin:n #1
  { \draw_path_circle:nn { 0 , 0 } {#1} }
\ExplSyntaxOff

\begin{document}
    Sample \miconcentric
\end{document}

答案2

在这个特殊情况下,维度是基数的整数倍,即0.25ex\int_step_inline:nnn这很容易:

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

\ExplSyntaxOn

\NewDocumentCommand{\miconcentric}{ O{0.08ex} }
 {
  \mathicon_concentric_circles:n { #1 }
 }
     
\cs_new_protected:Nn \mathicon_concentric_circles:n
 {
 \draw_begin:
 \draw_linewidth:n { #1 }
 \int_step_inline:nnn { 2 } { 4 }
  {
   \draw_path_circle:nn { 0 , 0 } { 0.25ex * ##1 }
  }
 \draw_path_use_clear:n { stroke }
 \draw_end:
 }
\ExplSyntaxOff

\begin{document}

Sample \miconcentric

\medskip

\LARGE
Sample \miconcentric[0.1pt]

\end{document}

在此处输入图片描述

相关内容