با استفاده از بسته Tikz
میتوانید این شکل را رسم کنید. برای نمونه، من بر اساس شکل شما، یک شکل شماتیک رسم کردهام تا متوجه نحوه عملکرد این بسته شوید:
\documentclass{book}
\usepackage{xcolor}
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
\tikzstyle{block} = [draw,rectangle,thick,minimum height=2em,minimum width=2em,fill=green!10!white]
\begin{document}
\begin{figure}[htbp] % figure placement: here, top, bottom, or page
\centering
\begin{tikzpicture}[scale=1, auto, >=stealth,node distance=2cm,align=right]
\node[block](b1){$b1$ Long block 3} ;
\node[block,right =of b1.east](b2){$b2$} ;
\node[block,right of= b2](b5){$b5$} ;
\node[block,above of= b2](b3){$b3$} ;
\node[block,above of= b5,xshift=1cm](b6){Long Block} ;
\node[block,below = of b1.west,anchor=west](b8){$b8$ Long block 4} ;
\node[block,below = of b2.west,anchor=west](b9){$b9$} ;
\node[block,below = of b5.west ,anchor=west](b7){B7 Block} ;
\node[block,below = of b9.west ,anchor=west](b10){new Block} ;
\node[block,right = of b10 ,anchor=west,xshift=-1cm](b11){new Block2} ;
\draw[->,thick](b1.north)--node{H2}(b3.west);
\draw[->,thick](b6.south)--(b6.south|-b7.north);
\coordinate (aux) at ($(b6.south)+(0.5,0)$) ;
\draw[->,thick](aux)--(aux|-b11.north);
\draw[<->,thick](b8)--(b9);
\draw[->,thick](b6.south west)--(b2) ;
\draw[->,thick](b2)--(b3) ;
\coordinate (aux1) at ($(b1.south)+(0.5,0)$) ;
\coordinate (aux2) at ($(b1.south)-(0.5,0)$) ;
\draw[->,thick](aux1)--(aux1|-b8.north) ;
\draw[<-,thick](aux2)--(aux2|-b8.north) ;
\end{tikzpicture}
\caption{example caption}
\label{fig:example}
\end{figure}
\end{document}
که خروجی آن به صورت زیر خواهد بود:
در این کد، چند بخش وجود دارد که به ترتیب به آنها خواهم پرداخت:
۱- فراخوانی بسته Tikz
و کتابخانههای مورد نیاز: در دیباچه متن پس از فراخوانی بسته Tikz
، باید با استفاده از دستور زیر کتابخانههای مورد استفاده این بسته را با استفاده از دستور زیر فراخوانی کرد (به عنوان نمونه در این مثال از دو کتابخانه positioning
جهت استفاده از موقعیت اطراف اشکال و از کتابخانه calc
جهت محاسبه موقعیتها استفاده شده است)
\usepackage{tikz}
\usetikzlibrary{positioning,calc}
۲- تعریف استایلهایی که به طور معمول مورد استفاده قرار میگیرد (این بخش اختیاری است و میتوان هر جا در متن برنامه به استایل تعریف شده رسید، آن را با تعریف آن جایگزین نمود) با استفاده از دستور زیر میتوان تعریف نمود (به عنوان نمونه استایل بلوک که در برنامه به کرات مورد استفاده قرار گرفته است، در اینجا تعریف گردیده است):
\tikzstyle{block} = [draw,rectangle,thick,minimum height=2em,minimum width=2em,fill=green!10!white]
۳- گام بعدی ایجاد محیطی جهت رسم شکل مورد نظر است: بدین منظوراز محیط tikzpicture
استفاده میگردد. در کد فوق، جهت استفاده از این شکل به صورت یک جسم معلق و استفاده از زیرنویس، این محیط در محیط figure
نوشته شده است. بدین ترتیب، ساختار کلی رسم شکل در محیط tikzpicture
به صورت زیر خواهد بود:
\begin{figure}[htbp] % figure placement: here, top, bottom, or page
\centering
\begin{tikzpicture}[scale=1, auto, >=stealth,node distance=2cm]
% draw your picture here
\end{tikzpicture}
\caption{example caption}
\label{fig:example}
\end{figure}
لازم به ذکر است که در ابتدای این محیط برخی ویژگیهایی برای آن تعیین شده است که به ترتیب، مقیاس فاصله در رسم (\draw
)، تعیین محل برچسبها به صورت خودکار (auto
)، نوع سر پیکان (>=stealth
) و فاصله استاندارد در نظر گرفته شده میان اشکال است.
۴- رسم اشکال: رسم اشکال با استفاده از دستور \node
انجام میپذیرد. به عنوان نمونه، از میان اشکال رسم شده، تعریف یکی از آنها را با هم مرور میکنیم:
\node[block,below = of b2.west,anchor=west](b9){Block $b9$} ;
در تعریف این شکل، نشان میدهد که در کشیدن این شکل از استایل block که قبلا تعریف کردیم، استفاده شده است. همچنین بخش دوم نشان میدهد که این شکل در پایین شکل b2 (اندازه گیری شده از سمت غربی آن) رسم میگردد و مبدا مختصات برای رسم این شکل نیز در بخش غربی آن خواهد بود. در ادامه نام این شکل (b9) آورده شده است و سپس در کروشه، نوشته داخل این بلوک آورده شده است.
۵- رسم اتصالات: برای رسم اتصال میان دو شکل از دستور \draw
استفاده میگردد. برای نمونه برداری را که از شکل b1 به شکل b2 رسم شده است به صورت زیر است:
\draw[->,thick](b1)--node{H}(b2);
همانگونه که مشاهده میشود، ابتدا استایل (جهت فلش و اندازه خط) مربوط به این خط به عنوان ورودی داده شده است. سپس در ادامه مختصات اولیه خط و در نهایت مختصات نهایی خط آورده شده است. لازم به ذکر است که اگر نیاز داشتید که بر روی خط برچسبی رسم شود، کافی است پس از --
یک شکل (با استفاده از دستور node، همانگونه که در کد فوق ملاحظه میگردد) رسم کنید و برچسب را درون کروشه جلوی آن قرار دهید.
برخی مواقع در ترسیم اتصالات نیاز به تعریف مختصات به صورت مستقل هستیم. برای تعریف مختصات، میتوان از دستور \coordinate
استفاده نمود:
\coordinate (aux1) at ($(b1.south)+(0.5cm,0)$) ;
که در آن نشان میدهد که مختصاتی با نام aux1 در مکانی که به اندازه ۰.۵ سانتیمتر از جنوب شکل b1 در راستای محور افقی فاصله دارد ایجاد گردیده است.
این کلیتی بود از آنچه نوشته شده است. برای اطلاع بیشتر از نحوه ترسیم اشکال به مستندات بسیار کامل بسته
tikz
مراجعه کنید که با استفاده از دستور زیر در ترمینال (محیط پایه یونیکس) و یا cmd ویندوز قابل دسترسی است:
texdoc tikz