메뉴 건너뛰기

Shelter of KTUG

KTUG 임시 피난지

알림과 잡담

무제

yihoze 2017.03.23 09:14 조회 수 : 2268

HzDraw.png

 

\documentclass{article}
\usepackage{xparse}
\usepackage{tikz}
\usepackage{xcolor}

\ExplSyntaxOn
\int_new:N \l_easydraw_elements_int
\tl_new:N \l_easydraw_tl
\tl_new:N \l_easydraw_option_tl

\NewDocumentCommand \EasydrawSetup { m }
{
    \tl_set:Nn \l_easydraw_option_tl { #1 }
}

\cs_new:Npn \easydraw_draw:n #1
{
        \tl_if_eq:nnTF {#1}{cycle}
        { 
            \tl_put_right:Nn \l_easydraw_tl { #1 }
        }{
            \tl_put_right:Nn \l_easydraw_tl { (#1) }
        }
        \int_decr:N \l_easydraw_elements_int
        \int_compare:nTF { \l_easydraw_elements_int == 0 }
        {
            \tl_put_right:Nn \l_easydraw_tl { ; }
        }{
            \tl_put_right:Nn \l_easydraw_tl { -- }
        }
}

\cs_new:Npn \easydraw_count_elements:n #1
{
    \int_incr:N \l_easydraw_elements_int
}

\NewDocumentCommand \easydraw { o >{\SplitList{;}} m }
{
    \group_begin:
    \IfValueT {#1} { \tl_set:Nn \l_easydraw_option_tl { #1 } }
    \int_zero:N \l_easydraw_elements_int
    \tl_clear:N \l_easydraw_tl
    \ProcessList{#2} { \easydraw_count_elements:n }
    \tl_put_right:Nn \l_easydraw_tl { \draw[ }
    \exp_args:NNo \tl_put_right:Nn \l_easydraw_tl { \l_easydraw_option_tl }
    \tl_put_right:Nn \l_easydraw_tl { ] }
  \ProcessList{#2}{ \easydraw_draw:n }          
    \l_easydraw_tl
    \group_end:
}
\ExplSyntaxOff

\EasydrawSetup{black}

\begin{document}
\begin{tikzpicture}
\draw[black!30] (0,0) grid (5,5);
\coordinate (A) at (1,1);
\easydraw{0,0; A; 2,1; 3,0; cycle}
\easydraw[thick, blue]{0,3; 2,0; 3,1}
\easydraw{2,2; 3,3; 2,4}
\end{tikzpicture}
\end{document}