考虑以下 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}