پیشگفتار
این مجموعه بهعنوان یک پروژه دانشگاهی تهیه شده و با هدف آموزش زبان نشانهگذاری Markdown و ابزار Pandoc به مبتدیان نوشته شده است. خوانندگان در این مجموعه با مفاهیم و کاربردهای مارکدون در نگارش مستندات فنی، گزارشها و استفادههای روزمره آشنا میشوند و همچنین یاد میگیرند چگونه مستندات را به فرمتهای مختلف تبدیل کرده و خروجیهای متنوعی با کمک پنداک تولید کنند. مطالب بهصورت گامبهگام، از مقدمات تا مفاهیم پیشرفته، همراه با مثالهای عملی ارائه شدهاند.
برای بهرهگیری بهتر، پیشنهاد میشود فصلها بهترتیب مطالعه شده و تمرینهای پایانی هر بخش تکمیل شوند. تجربه نشان داده است که یادگیری زمانی مؤثرتر خواهد بود که خواننده خود بهطور عملی مفاهیم را تمرین کرده، روشها و امکانات مختلف را تجربه کند و آموختهها را در عمل به کار گیرد.
مطالب ارائه شده در این مجموعه از منابع مختلف گردآوری شده و بخش عمده فصل اول آن از کتاب The Markdown Guide اثر Matt Cone اقتباس شده است. این اثر تحت لایسنس CC BY-SA 4.0 منتشر شده و مجموعه حاضر نیز به تبع آن تحت همان لایسنس ارائه میشود.
تهیهکننده: محمدرضا روستا
مقدمه
مارکدون (Markdown) یک زبان نشانهگذاری (Markup) سبک است که با آن میتوان به متون ساده، قالببندی و ساختار اضافه کرد. این زبان در سال ۲۰۰۴ توسط جان گروبر طراحی شد و امروز یکی از محبوبترین زبانهای نشانهگذاری در جهان است.
کار با مارکدون با استفاده از ویرایشگرهای گرافیکی (WYSIWYG: آنچه میبینی همان است که دریافت میکنی) مثل Microsoft Word فرق دارد. در Word، شما بر روی دکمهها کلیک میکنید و فوراً نتیجه قالببندی را روی متن میبینید. اما مارکدون اینگونه نیست؛ در مارکدون شما نشانهها و دستورهایی را در متن اضافه میکنید تا مشخص شود کدام قسمتها باید به شکل متفاوت نمایش داده شوند، و این قالببندی بعداً هنگام نمایش یا خروجی گرفتن اعمال میشود.
بهعنوان مثال، تصویر زیر بخشی از یک کد مارکدون را نشان میدهد؛ کد در سمت چپ و پیشنمایش آن در سمت راست قرار دارد:
مارکدون یک «فرمت نوشتاری» (Writing Format) است، نه یک «فرمت انتشار» (Publishing Format) مانند PDF. این یعنی شما متن را در قالبی ساده و قابلخواندن مینویسید، و سپس میتوانید آن را به فرمتهای گوناگون برای انتشار تبدیل کنید.
گاهاً معیار برای یک ابزار نوشتار خوب این است که استفاده از آن به یک عادت تبدیل شود؛ نوشتن با آن باید روان و بدون دردسر باشد. اگر احساس کنیم ابزار جلوی کارمان را میگیرد، دیگر از آن استفاده نمیکنیم.
یکی از دلایل موفقیت مارکدون در برابر دیگر زبانهای نشانهگذاری، ایجاد تعادل درست بین سهولت و کارایی است. یادگیری آن آسان و استفاده از آن سریع است، برخلاف زبانهایی مثل LaTeX که پیچیدگی بیشتری دارند. . همچنین بعضی از مبدلهای مارکداون میتوانند از زبان LaTeX نیز پشتیبانی کنند.
از زمان معرفی مارکدون در سال ۲۰۰۴، میلیونها نفر از آن برای نوشتن تقریبا همهچیز استفاده کردهاند؛ از یادداشتهای روزانه گرفته تا مستندات رسمی. مارکدون همهجا حضور دارد و در فصل «کاربردها و مزایا» خواهید دید که تا چه اندازه گسترده استفاده میشود.
دانستن مارکدون در بسیاری از شغلها به یک مهارت ضروری تبدیل شده است، بهخصوص در حوزهی فناوری که نوشتن مستندات برای ابزار یا نرمافزاری که ساختهاید بخش جداییناپذیر کار است.
در ادامه، ابتدا با مفاهیم پایه و نسخه اصلی مارکدون آشنا میشوید، سپس به سراغ انواع «مشتقات» و گونههای آن مانند GitHub Flavored Markdown میرویم. همچنین، ابزارها و مبدلهایی مانند Pandoc را بررسی میکنیم و یاد میگیریم چگونه از مارکدون همراه با LaTeX برای نوشتن متون علمی و ریاضی استفاده کنیم.
آشنایی با زبانهای مارکآپ
یک زبان مارکآپ زبانی است که برای تعریف ساختار و نمایش متن طراحی شده است.
واژهی «مارکآپ» (markup) برگرفته از عبارت «علامتگذاری روی نسخههای کاغذی» (marking up) است؛ به معنای دستورالعملها و اصلاحاتی که ویراستاران روی نسخههای دستنویس نویسندگان اعمال میکنند، یا زمانی که خواننده بخشی از متن را برجسته و نشانهگذاری (هایلایت) میکند.
برای مثال، HTML یا HyperText Markup Language یکی از شناختهشدهترین زبانهای مارکآپ است. در یک فایل متنی مانند فایل HTML، اجزای محتوا با «تگ»ها نشانهگذاری میشوند تا هدف و نقش هر بخش مشخص شود:
<!DOCTYPE html>
<html>
<head>
<title>HTML Example Code</title>
</head>
<body>
<h1>Learning and Practicing</h1>
<p>Markdown made writing simple.</p>
</body>
</html>
در مثال بالا:
<h1>نشان میدهد که «Learning and Practicing» یک تیتر اصلی است.<p>مشخص میکند که متن داخل آن یک پاراگراف است.
نمونههای مشهور دیگر زبانهای مارکآپ عبارتاند از:
- LaTeX: برای پردازش اسناد علمی و ریاضی
- XML: برای ذخیرهسازی و تبادل داده
- Markdown: برای نوشتن مستندات و متنهای ساده با قالببندی
برخلاف زبانهای برنامهنویسی که به سیستم دستورالعمل میدهند، زبانهای مارکآپ بیشتر به توصیف و سازماندهی محتوا میپردازند.
زبانهای نشانهگذاری سبک (Lightweight Markup Language) با نگارشی ساده و ظریف طراحی شدهاند تا نوشتن و خواندن متن خام آسان باشد. این زبانها بهخصوص در موقعیتهایی کاربرد دارند که لازم باشد هم متن خام و هم خروجی رندر شده سند خوانا باشد. مارکدون یکی از شناختهشدهترین نمونهها است.
پیدایش مارکدون
زبان مارکدون در سال ۲۰۰۴ و با همکاری آرون شوارتز خلق شد. هدف اصلی آن سادهسازی نوشتن متنهای قالببندیشده بود، بهگونهای که متن خام بهراحتی قابل خواندن باشد و هم بتوان آن را به XHTML یا HTML معتبر تبدیل کرد.
در سال ۲۰۰۶ گروبر اولین نسخه Markdown را به عنوان یک پروژه منبع باز منتشر کرد و به دیگران اجازه داد تا در توسعه آن مشارکت کنند.
بر خلاف زبانهای نشانهگذاری پیچیده مانند HTML یا Rich Text Format، مارکدون طوری طراحی شده که متن نوشتهشده در حالت خام خوانا و طبیعی به نظر برسد، بدون آنکه پر از تگها و دستورهای قالببندی باشد. ایدهی آن از سبک ساده و خوانای ایمیلهای متنی الهام گرفته شده است.
در اوایل دهه ۲۰۰۰، نوشتن برای وب کار دشواری بود؛ وبلاگها تازه شکل گرفته بودند و پلتفرمهای بلاگنویسی امکانات محدودی داشتند. برای ایجاد محتوای قابل قبول، اغلب باید HTML را یاد میگرفتید.
برای مثال، وبسایت شرکت اپل در سال ۱۹۹۷ چنین شکلی داشت:
گروبر با هدف بازگرداندن فرآیند نوشتن اسناد دیجیتال به دست نویسندگان، به جای برنامهنویسان، مارکدون را طراحی کرد تا همه بتوانند به راحتی بنویسند و متون زیبا تولید کنند.
چرا از مارکدون استفاده کنیم؟
- مارکدون برای همهچیز قابل استفاده است. از ساخت وبسایت و نوشتن اسناد و یادداشتها گرفته تا کتاب، ارائه، ایمیل و مستندات فنی.
- مارکدون بر پایه متن ساده (Plain Text) است که هر ویرایشگری میتواند آن را بخواند و ویرایش کند.
- این فرمت بسیار سبک است و کمترین تأثیر را روی محتوای اصلی میگذارد.
- وبسایتهایی مثل Reddit، GitHub و بسیاری از اپلیکیشنهای دسکتاپ و تحت وب از آن پشتیبانی میکنند.
موارد استفاده
اینها فقط چند نمونه برای شروع هستند؛ مطمئناً در ادامه ایدههای بیشتری به ذهنتان خواهد رسید:
- مستندسازی: مارکدون یک انتخاب مناسب برای مستندات فنی است. شرکتهایی مثل GitHub به شکل فزایندهای برای مستندات خود از آن استفاده میکنند.
- یادداشتبرداری: سریع، ساده و بهراحتی قابل یادگیری؛ مارکدون بهترین سینتکس برای یادداشتهای دیجیتال است.
- اسناد قابل انتشار: با نرمافزارهای ویرایش مارکدون میتوانید اسناد خود را بنویسید و به PDF یا HTML خروجی بگیرید.
- وبسایتها:مارکدون برای وب طراحی شده است و ابزارهای متعددی برای تولید محتوای وبلاگ و سایت وجود دارد. (نمونه آن Markdown Guide)
- ایمیل: برای نگارش ایمیلهای تمیز و ساختارمند با قالببندی ساده.
ویرایشگرها
برای نوشتن و استفاده از مارکدون، ابتدا به یک ویرایشگر مناسب است. گرچه ویرایشگرهای زیادی برای همه پلتفرمها وجود دارد، پشتیبانی از زبان فارسی (راستبهچپ) محدود است و همین انتخابها را کمتر و تصمیمگیری را دشوارتر میکند.
ویرایشگرهای پیشنهادی برای هر پلتفرم:
-
💻 دسکتاپ (ویندوز، مک و لینوکس)
- Obsidian (پیشنهادی)
- MarkText
- VS Code
- Anytype
- Ghostwriter
-
📱 موبایل
- Markor (اندروید)
- Obsidian (اندروید/iOS)
- Simplenote
-
🌐 وب
- Simplenote (پیشنهادی)
- StackEdit
Obsidian تنها یک ویرایشگر ساده متن نیست؛ این برنامه امکاناتی فراهم میکند که نگارش و مدیریت یادداشتها را بسیار کارآمد میکند. برخی از مهمترین ویژگیهای آن عبارتاند از:
- پشتیبانی کامل از زبان فارسی و تشخیص خودکار جهت متن: بدون نیاز به تنظیم دستی، متنهای فارسی بهدرستی راستبهچپ و متنهای انگلیسی چپبهراست نمایش داده میشوند.
- سیستم مدیریت دانش (KMS): امکان لینک دادن یادداشتها به یکدیگر و ایجاد شبکهای از اطلاعات مرتبط، باعث میشود ایدهها و دانش شما منظم و قابل پیگیری باشند.
- همگامسازی بین دستگاهها و دسترسی آفلاین: میتوانید یادداشتهایتان را بین کامپیوتر، موبایل و تبلت همگامسازی کنید و بدون نیاز به اینترنت دائم شروع به نوشتن کنید.
- پشتیبانی از LaTeX: نوشتن فرمولهای ریاضی و محاسبات علمی در یادداشتها بسیار ساده و راحت است.
نحوه کارکرد
متن مارکدون در یک فایل با پسوند .md یا .markdown ذخیره میشود. سپس برنامههای مارکدون از چیزی به نام پردازشگر مارکدون (Markdown processor) استفاده میکنند که گاهی به آن «پارسر» هم گفته میشود تا متن شما را به فرمتهای قابل نمایش مانند HTML یا PDF تبدیل کنند. در این مرحله، سند شما قابل مشاهده در مرورگر وب یا آماده چاپ کردن است.
تصویر زیر این روند را نشان میدهد:
خلاصه روند در چهار مرحله تقسیم میشود:
- ایجاد یک فایل مارکدون با پسوند
.mdیا.markdownدر یک ویرایشگر. - این فایل را در برنامه مارکدون باز کنید و شروع به نوشتن کنید.
- برنامه مارکدون، فایل شما را به یک صفحه HTML تبدیل میکند.
- میتوانید صفحه HTML را در مرورگر ببینید یا آن را به فرمتهای دیگری مثل PDF تبدیل کنید.
ممکن است با توجه به برنامه مورد استفاده، نحوه انجام این مراحل کمی متفاوت باشد، اما کلیت روند همین است.
قواعد پایه (Basic Syntax)
در این فصل با قواعد پایه مارکدون آشنا میشویم. تقریباً همه ویرایشگرها و برنامههایی که از مارکدون پشتیبانی میکنند، از قواعد پایهای پیروی میکنند که در نسخه اصلی توسط جان گروبر معرفی شده است. با این حال، هر مفسر ممکن است تفاوتها و جزئیات خاص خود را داشته باشد که در فصل بعد به آنها پرداخته خواهد شد.
عنوانها (Headings)
برای ایجاد عنوان (Heading) کافی است قبل از متن یا کلمه مورد نظر، از علامت # استفاده کنید. تعداد این علامتها میتواند بین ۱ تا ۶ باشد؛ هر چه تعداد # بیشتر باشد، اندازه عنوان کوچکتر خواهد بود.
برای نمونه، عنوان با یک # بزرگترین و عنوان با شش # کوچکترین است:
# عنوان سطح ۱
## عنوان سطح ۲
### عنوان سطح ۳
#### عنوان سطح ۴
##### عنوان سطح ۵
###### عنوان سطح ۶
روش دیگر برای ایجاد عنوان (فقط سطح ۱ و ۲) این است که در خط بعد از متن، از علامتهای = یا - استفاده کنید:
عنوان سطح ۱
===========
عنوان سطح ۲
-----------
تعداد علامتهای = یا - در این روش مهم نیست و میتواند متغیر باشد.
برای اطمینان از نمایش درست در همه ویرایشگرها، همیشه بین علامتهای # و متن یک فاصله قرار دهید. همچنین، بهتر است قبل و بعد از عنوان، یک خط خالی بگذارید تا سازگاری و خوانایی بیشتری ایجاد شود.
پاراگرافها
برای ایجاد پاراگراف در مارکدون کافی است بین دو بخش متن یک خط خالی قرار دهید:
این خط اول است
و این خط دوم است.
اگر بین خطوط متن فاصله نگذارید، همهی آنها یک پاراگراف واحد در نظر گرفته میشوند.
همچنین توجه داشته باشید اگر پاراگراف داخل یک لیست نیست، آن را با فاصله یا تب (Tab) شروع نکنید.؛ چون این کار باعث تغییر ناخواسته در قالببندی میشود.
شکستن خط (Line Break)
گاهی لازم است به خط بعد بروید، بدون آنکه پاراگراف تازهای ساخته شود. این کار در مارکدون با گذاشتن دو یا چند فاصله در انتهای خط و سپس فشردن کلید Enter انجام میشود:
این خط اول است
و این خط دوم است.
به این روش فاصله پایانی یا trailing whitespace گفته میشود. این روش همیشه ایدئال نیست؛ چون این فاصلهها در ویرایشگر دیده نمیشوند و ممکن است سهواً یا بهطور عادت بعد از هر جمله گذاشته شوند.
برای شفافیت بیشتر، میتوانید از تگ <br> استفاده کنید که نتیجهی مشابهی دارد ولی کاملاً قابلتشخیص است:
این خط اول است <br>
و این خط دوم است.
تأکید (Emphasis)
در مارکدون میتوان روی بخشهایی از متن تأکید کرد تا توجه بیشتری به آن جلب شود. این تأکید میتواند به شکل پررنگ، مورب، یا پررنگ و مورب همزمان باشد.
برای اعمال این سبکها، علامتهای مخصوص باید دقیقاً قبل و بعد از کلمه یا عبارت موردنظر قرار بگیرند، بدون فاصله اضافی بین علامتها و متن:
- برای مورب کردن متن، یک علامت ستاره
*یا یک خط زیر_کافی است. - برای پررنگ کردن متن، از دو علامت ستاره
**یا دو خط زیر__در ابتدا و انتهای عبارت استفاده کنید. - برای پررنگ و مورب همزمان، سه ستاره
***یا سه خط زیر___بهکار میرود.
به نمونههای زیر توجه کنید:
**این متن پررنگ است**
*این متن مورب است*
***این متن پررنگ و مورب است***
این بخش از متن __پررنگ__ و این بخش هم _مورب_ است
و این بخش **_هردو آن میباشد_**
خروجی:
این متن پررنگ است
این متن مورب است
این متن پررنگ و مورب است
این بخش از متن پررنگ و این بخش هم مورب است
و این بخش هردو آن میباشد
بسیاری از مفسرهای مارکدون هنگام استفاده از underscore (_) در وسط جمله، رفتار یکسانی ندارند.
برای جلوگیری از ناسازگاری، پیشنهاد میشود بیشتر از علامت ستاره (*) برای تأکید استفاده کنید.
نقلقول (Blockquote)
گاهی لازم است بخشی از متن یا جملهای را به عنوان نقلقول بیاورید؛ مثلاً نقلقول از یک نویسنده، مستندات رسمی یا حتی تأکید بر یک بخش از متن.
برای این کار، کافی است در ابتدای پاراگراف از علامت > استفاده کنید:
> این یک نقلقول است.
خروجی:
این یک نقلقول است.
نقلقول میتواند شامل چند پاراگراف باشد. در این حالت باید در خط خالی بین پاراگرافها هم علامت > را بگذارید:
> این پاراگراف اول است.
>
> و این پاراگراف دوم است.
خروجی:
این پاراگراف اول است.
و این پاراگراف دوم است.
برای خوانایی بهتر و سازگاری بیشتر در همه مفسرها، توصیه میشود قبل و بعد از نقلقولها یک خط خالی قرار دهید.
لیستها (Lists)
لیستها در مارکدون برای سازماندهی محتوا، مرتب کردن مراحل یا نمایش نکات به کار میروند. دو نوع اصلی لیست وجود دارد: مرتب و بدون ترتیب. همچنین میتوان این دو نوع را با هم ترکیب کرد یا لیستهای تو در تو ساخت.
لیست مرتب (Ordered List)
برای ایجاد لیست مرتب، شمارهگذاری را قبل از هر آیتم قرار دهید و بعد از آن یک نقطه بگذارید. لازم نیست شمارهها دقیق باشند؛ مارکدون بهطور خودکار ترتیب را درست نمایش میدهد:
1. آیتم اول
1. آیتم دوم
1. آیتم سوم
خروجی:
- آیتم اول
- آیتم دوم
- آیتم سوم
برای ایجاد لیستهای تو در تو، آیتمهای داخلی را با چهار فاصله یا یک تب (Tab) فاصله دهید:
1. آیتم اول
2. آیتم دوم
1. آیتم تو در تو اول
2. آیتم تو در تو دوم
3. آیتم سوم
خروجی:
- آیتم اول
- آیتم دوم
- آیتم تو در تو اول
- آیتم تو در تو دوم
- آیتم سوم
لیست بدون ترتیب (Unordered List)
برای ایجاد لیست بدون ترتیب میتوانید از خط تیره -، ستاره * و یا علامت جمع + استفاده کنید:
- آیتم اول
- آیتم دوم
- آیتم سوم
* آیتم اول
* آیتم دوم
* آیتم سوم
+ آیتم اول
+ آیتم دوم
+ آیتم سوم
خروجی همهی این روشها یکسان است:
- آیتم اول
- آیتم دوم
- آیتم سوم
لیستهای بدون ترتیب هم میتوانند تو در تو باشند؛ کافی است آیتمهای داخلی را با چهار فاصله یا یک تب (Tab) فاصله دهید:
- آیتم اول
- آیتم دوم
- آیتم تو در تو اول
- آیتم تو در تو دوم
- آیتم سوم
خروجی:
- آیتم اول
- آیتم دوم
- آیتم تو در تو اول
- آیتم تو در تو دوم
- آیتم سوم
ترکیب لیستها
میتوانید لیست بدون ترتیب را داخل لیست مرتب قرار دهید یا برعکس:
1. مورد اول
2. مورد دوم
- آیتم تو در تو اول
- آیتم تو در تو دوم
3. مورد سوم
خروجی:
- مورد اول
- مورد دوم
- آیتم تو در تو اول
- آیتم تو در تو دوم
- مورد سوم
برای سازگاری، از ترکیب کردن چند نشانه در یک لیست خودداری کنید — یک نوع نشانه انتخاب کرده و تا انتهای لیست از همان استفاده کنید.
کد (Code)
در مارکدون برای نمایش متن به صورت کد، دو روش اصلی وجود دارد: کد درونخطی و بلوک کد. علاوه بر این، نوع دیگری به نام بلوک کد حصاردار هم وجود دارد که در فصلهای بعدی به آن پرداخته خواهد شد.
کد درونخطی (Inline Code)
برای مشخص کردن یک کلمه یا عبارت به عنوان کد، آن را بین دو بکتیک ` قرار دهید:
این `بخش` از جمله یک کد است.
خروجی:
این بخش از جمله یک کد است.
اگر متن شما شامل بکتیک باشد، میتوانید از دو بکتیک پشت سر هم استفاده کنید:
``از `code` در فایل خود استفاده کنید.``
خروجی:
از `code` در فایل خود استفاده کنید.
بلوک کد (Code Block)
برای ایجاد یک بلوک کد چند خطی، کافی است هر خط را حداقل چهار فاصله (space) یا یک تب (Tab) به داخل (indent) ببرید:
def greet(name):
print(f"Hello, {name}!")
greet("World")
خروجی:
def greet(name):
print(f"Hello, {name}!")
greet("World")
نمایش تصویر
برای درج تصویر در مارکدون، از علامت تعجب ! قبل از متن جایگزین استفاده میکنیم. متن جایگزین را داخل کروشه [] مینویسیم و مسیر یا آدرس تصویر را داخل پرانتز () قرار میدهیم.
ساختار کلی:

مثال:

خروجی حاصل به این شکل خواهد بود:
متن جایگزین به کاربرانی که تصویر برایشان نمایش داده نمیشود و یا از خواننده صفحه استفاده میکنند کمک میکند تا محتوای تصویر را درک کنند. همچنین متن جایگزین برای سئو (SEO) مهم است و به موتورهای جستجو کمک میکند تا محتوای تصویر را درک و در نتایج جستجو نمایش دهند.
خط جداکننده (Horizontal Rule)
برای ایجاد یک خط افقی که معمولاً برای جدا کردن بخشها یا موضوعات استفاده میشود، کافی است سه علامت یا بیشتر از یکی از موارد آورده شده را در یک خط قرار دهید: ستاره (*)، خط تیره (-) یا زیرخط (_).
مثالها:
***
----
________
خروجی رندر شده هر سه حالت یکسان خواهد بود:
لینکها (Links)
در مارکدون چند روش برای ایجاد لینک وجود دارد. یکی از متداولترین روشها، ایجاد لینکی با متن دلخواه است. برای این کار، متن لینک را داخل کروشه [ ] و آدرس مقصد را داخل پرانتز ( ) میگذاریم. به عنوان مثال:
[Google](https://google.com)
در این نمونه، Google متن قابل کلیک است و https://google.com آدرس مقصد آن میباشد. خروجی به شکل زیر است:
با کلیک روی متن، کاربر به آدرس مشخص شده هدایت میشود.
روش دیگر برای ایجاد لینک، تبدیل مستقیم یک URL یا آدرس ایمیل به لینک است. کافی است آنها را داخل علامتهای کوچکتر و بزرگتر < > قرار دهید:
<https://eff.org>
<fake@example.com>
خروجی به این صورت خواهد بود و قابل کلیک است:
این روشها باعث میشوند متون شما هم برای خواننده و هم برای موتورهای جستجو قابل دسترسی و کاربرپسند باشند.
نمایش کاراکترهای ویژه (Escaping Characters)
گاهی لازم است کاراکتری را که معمولاً در مارکدون برای قالببندی استفاده میشود، بهصورت معمولی نمایش دهیم. برای این کار کافی است قبل از آن کاراکتر یک بکاسلش (\) قرار دهید.
به عنوان مثال، علامت ستاره (*) معمولاً برای ایجاد لیست بدون ترتیب استفاده میشود. اگر بخواهیم بدون ایجاد لیست، فقط خود علامت ستاره را نمایش دهیم، باید از بکاسلش قبل آن استفاده کنیم:
\* این علامت ستاره بهصورت معمولی نمایش داده شده است.
خروجی به شکل زیر خواهد بود:
* این علامت ستاره بهصورت معمولی نمایش داده شده است.
تمرینها
تمرین ۱
در این تمرین، هدف شما این است که متن خام زیر را با استفاده از مارکدون قالببندی کنید و خروجی نهایی را مشابه نمونه در آورید:
- متن خام را کپی کرده و در ویرایشگر مارکدون خود قرار دهید.
- اطمینان حاصل کنید که:
- تأکیدها حفظ شدهاند
- نقلقول به درستی با نمایش داده شده
- لیست تو در تو، به درستی رندر شود
متن خام قابل کپی
اوپن سورس یک مدل توسعه نرمافزار است که کد منبع آن برای همه قابل دسترسی و تغییر است. این رویکرد به توسعهدهندگان اجازه میدهد تا نوآوری و همکاری را در سطح جهانی تجربه کنند. پروژههای اوپن سورس معمولاً توسط جوامع فعال پشتیبانی میشوند و این جوامع با به اشتراک گذاشتن دانش و منابع، کیفیت و امنیت نرمافزارها را بهبود میبخشند. بسیاری از متخصصان معتقدند:
اوپن سورس تنها به تولید نرمافزار محدود نمیشود؛ بلکه فلسفهای برای آزادی و شفافیت در فناوری است.
مزایای استفاده از اوپن سورس:
دسترسی آزاد به کد منبع
نوآوری و همکاری جهانی
پروژهها توسط جامعه توسعهدهندگان بهبود مییابند
اشکالات سریعتر شناسایی و رفع میشوند
انعطافپذیری و سفارشیسازی
کاربران میتوانند کد را تغییر داده و نرمافزاری مطابق نیاز خود بسازند
اوپن سورس یک مدل توسعه نرمافزار است که کد منبع آن برای همه قابل دسترسی و تغییر است. این رویکرد به توسعهدهندگان اجازه میدهد تا نوآوری و همکاری را در سطح جهانی تجربه کنند. پروژههای اوپن سورس معمولاً توسط جوامع فعال پشتیبانی میشوند و این جوامع با به اشتراک گذاشتن دانش و منابع، کیفیت و امنیت نرمافزارها را بهبود میبخشند. بسیاری از متخصصان معتقدند:
اوپن سورس تنها به تولید نرمافزار محدود نمیشود؛ بلکه فلسفهای برای آزادی و شفافیت در فناوری است.
مزایای استفاده از اوپن سورس:
- دسترسی آزاد به کد منبع
- نوآوری و همکاری جهانی
- پروژهها توسط جامعه توسعهدهندگان بهبود مییابند
- اشکالات سریعتر شناسایی و رفع میشوند
- انعطافپذیری و سفارشیسازی
- کاربران میتوانند کد را تغییر داده و نرمافزاری مطابق نیاز خود بسازند
تمرین ۲
در این تمرین، هدف شما این است که متن خام زیر را با استفاده از Markdown قالببندی کنید و خروجی نهایی را مشابه نمونه ایجاد نمایید:
- قطعه کد پایتون را به صورت بلوک کد نمایش دهید.
- یک تصویر با متن جایگزین مناسب درج کنید.
- یک لینک قابل کلیک ایجاد کنید.
متن خام قابل کپی
نمونه کد پایتون به صورت زیر میباشد:
def add(a, b):
return a + b
result = add(5, 3)
print("result:", result)
همچنین، وبسایت پایتون از اینجا قابل دسترسی میباشد و لوگوی پایتون به شکل زیر است:
نمونه کد پایتون به صورت زیر میباشد:
def add(a, b):
return a + b
result = add(5, 3)
print("result:", result)
همچنین، وبسایت پایتون از اینجا قابل دسترسی میباشد و لوگوی پایتون به شکل زیر است:

قواعد گسترشیافته (Extended Syntax)
قواعد پایهای که جان گروبر در نسخه اصلی مارکدون معرفی کرده بود، بیشتر نیازهای روزمره را پوشش میداد. اما با گذشت زمان، بسیاری از کاربران به امکانات بیشتری نیاز پیدا کردند. به همین دلیل، توسعهدهندگان و سازمانها قابلیتهای تازهای به مارکدون افزودند و نسخههای کاملتری از آن ایجاد کردند.
این امکانات اضافه شده شامل مواردی مانند: جدولها، بلوکهای کد پیشرفته، لینکسازی، و پانویسها و موارد دیگر هستند.
نسخههای دارای این امکانات، اغلب با عنوان نسخههای گسترشیافته مارکدون شناخته میشوند. این ویژگیها معمولاً یا بهصورت نسخههای گسترشیافته در دسترس هستند، یا با نصب افزونه روی پردازشگرهای سازگار فعال میشوند.
چندین زبان نشانهگذاری سبک وجود دارد که بر پایه مارکدون ساخته شده و قابلیتهای آن را گسترش میدهند. این زبانها سینتکس پایهی گروبر را شامل میشوند و امکانات جدیدی را به آن اضافه میکنند.
بسیاری از محبوبترین ویرایشگرهای مارکدون از این زبانهای نشانهگذاری سبک استفاده میکنند:
در ادامه، برخی از این قواعد گسترشیافته را بررسی خواهیم کرد تا ببینیم چگونه میتوانند نوشتن در مارکدون را سادهتر و خواناتر کنند.
جدولها (Tables)
مارکدون پایه از جدولها پشتیبانی نمیکند، اما در نسخههای گسترشیافته میتوان بهسادگی جدول ایجاد کرد. برای ایجاد جدول در مارکدون:
- از سه یا چند خط تیره (
---) برای مشخص کردن سر ستونها استفاده میشود. - برای جدا کردن ستونها، از خط عمودی (
|) استفاده میشود.
مثال ساده:
| نام | نقش |
| ---- | --------- |
| علی | مدیر |
| سارا | برنامهنویس |
خروجی به این شکل خواهد بود:
| نام | نقش |
|---|---|
| علی | مدیر |
| سارا | برنامهنویس |
اگر طول ستونها یا تعداد خط تیرهها متفاوت باشد، باز هم خروجی تغییر نخواهد کرد:
| نام | نقش |
| --- | ----------- |
| علی | مدیر |
| سارا | برنامهنویس |
برای مرتبتر شدن جدولها میتوان متن داخل ستونها را چپچین، وسطچین یا راستچین کرد. برای این کار، در ردیف سرستونها از علامت دونقطه (:) استفاده میشود:
مثال:
| نام اعضا | نقش افراد | توضیحات |
| :------- | :--------: | ----------------: |
| علی | مدیر | مسئول تیم |
| سارا | برنامهنویس | توسعهدهنده وب |
| محمد | طراح | طراحی رابط کاربری |
خروجی به این شکل خواهد بود:
| نام اعضا | نقش افراد | توضیحات |
|---|---|---|
| علی | مدیر | مسئول تیم |
| سارا | برنامهنویس | توسعهدهنده وب |
| محمد | طراح | طراحی رابط کاربری |
با استفاده از این روش میتوانید محتوای ستونها را به صورت دلخواه ترازبندی کنید تا جدولهایتان خواناتر و مرتبتر به نظر برسند.
در جدولها میتوانید از قالببندی متن هم استفاده کنید. مثلاً درون سلولها لینک اضافه کنید، متن را پررنگ یا مورب کنید، یا از کدهای درونخطی (`کد`) بهره ببرید.
با این حال، برخی عناصر مانند عنوانها، تصاویر یا خطوط جداکننده درون جدول پشتیبانی نمیشوند.
بلوک کد حصاردار (Fenced Code Block)
پیشتر با کد درونخطی و بلوک کد آشنا شدیم. حالا به نوع دیگری از کد میرسیم که انعطاف بیشتری دارد و کار با آن راحتتر است.
بسته به پردازشگر یا ویرایشگر مارکدون، در این روش، بهجای تورفتگی (indent)، کافی است در ابتدای خط و انتهای بلوک کد از سه بکتیک (```) یا سه تیلدا (~~~) استفاده کنید:
```
def greet(name):
print(f"Hello, {name}!")
greet("World")
```
خروجی:
def greet(name):
print(f"Hello, {name}!")
greet("World")
برجستهسازی کد (Syntax Highlighting)
یکی از مزایای مهم بلوکهای حصاردار این است که میتوانید زبان مورد استفاده را مشخص کنید تا کد با رنگبندی و هایلایت مناسب نمایش داده شود. برای این کار، نام زبان را بعد از بکتیکهای ابتدایی بنویسید:
```python
def greet(name):
print(f"Hello, {name}!")
greet("World")
```
خروجی:
def greet(name):
print(f"Hello, {name}!")
greet("World")
برای کدهای کوتاه، استفاده از بلوک ساده کافی است. اما اگر کد طولانی دارید یا میخواهید از برجستهسازی (Highlight) بهره ببرید، بهتر است از بلوکهای حصاردار استفاده کنید.
پانویس (Footnote)
پانویسها به شما امکان میدهند که توضیحات یا منابع اضافی را بدون شلوغ کردن متن اصلی اضافه کنید. هنگام استفاده، یک شماره بالانویس (superscript) همراه با لینک در متن قرار میگیرد که با کلیک روی آن، کاربر به بخش توضیح پانویس هدایت میشود.
برای ایجاد پانویس:
- در متن، از کلاهک (^) و یک شناسه داخل براکت استفاده کنید (مثلاً
[^1]). شناسه میتواند عدد یا کلمه باشد، اما نباید شامل فاصله یا تب باشد. - سپس متن پانویس را با همان شناسه و یک دونقطه تعریف کنید (مثلاً
[^1]: متن پانویس).
در خروجی، پانویسها بهصورت خودکار شمارهگذاری میشوند. لازم نیست همهی پانویسها را در انتهای سند بیاورید؛ فقط کافی است خارج از بخشهایی مثل عنوانها، جدولها یا نقلقولها قرار بگیرند.
مثال:
این یک پانویس ساده است[^1] و این هم یک پانویس طولانیتر[^توضیح].
[^1]: این اولین پانویس است.
[^توضیح]:
این یک پانویس طولانیتر است که میتواند چند پاراگراف داشته باشد.
برای مثال اینجا یک کد داریم: `{ my code }`
همچنین میتوانید پاراگرافهای بیشتری اضافه کنید.
خروجی:
این یک پانویس ساده است1 و این هم یک پانویس طولانیتر2.
خطخوردگی (Strikethrough)
گاهی لازم است در متن نشان بدهیم که یک کلمه یا عبارت حذف یا اشتباه است. برای این کار، کافی است قبل و بعد از متن موردنظر دو علامت تیلدا (~~) قرار دهیم:
مثال:
زمین ~~صاف~~ گرد است.
~~این جمله کامل خطخورده است.~~
خروجی:
زمین صاف گرد است
این جمله کامل خطخورده است.
فهرست کارها (Task Lists)
فهرست کارها (Task List) برای زمانی کاربرد دارد که میخواهید مجموعهای از کارها یا اهداف را بهصورت لیست نمایش دهید و مشخص کنید کدام انجام شده و کدام باقی مانده است.
ساختار کلی به این شکل است:
- اول یک خط تیره (
-) قرار دهید. - بعد از آن، یک جفت کروشه بنویسید.
- اگر میخواهید مورد تیکخورده باشد، داخل کروشه یک
xقرار دهید ([x]). در غیر این صورت فاصله بگذارید ([ ]).
مثال:
- [x] نوشتن کتاب
- [ ] بهروزرسانی وبسایت
- [ ] تماس با پشتیبانی
خروجی:
- نوشتن کتاب
- بهروزرسانی وبسایت
- تماس با پشتیبانی
از فهرست کارها میتوانید برای مدیریت وظایف، برنامهریزی پروژهها یا حتی یادداشتهای شخصی استفاده کنید. بهویژه در گیتهاب (GitHub) و بسیاری از ویرایشگرهای مارکدون، این قابلیت بسیار رایج است.
تمرین عملی
در این تمرین، هدف شما انتخاب یک متن دلخواه و قالببندی آن با استفاده از قابلیتهای گسترشیافته Markdown است. برای انجام این کار، از دستورالعملهای زیر پیروی کنید:
- یک جدول ساده با ترازبندی دلخواه بسازید تا اطلاعات یا دادههای متنی خود را سازماندهی کنید.
- یک بلوک کد حصاردار ایجاد کنید و زبان کد را برای برجستهسازی (Syntax Highlighting) مشخص کنید.
- حداقل یک پانویس (Footnote) به متن اضافه کنید.
- یک یا چند کلمه خطخورده (Strikethrough) در جملات مشخص کنید.
- یک فهرست کارها (Task List) بسازید و مشخص کنید کدام موارد انجام شده و کدام باقی ماندهاند.
-
این اولین پانویس است. ↩
-
این یک پانویس طولانیتر است که میتواند چند پاراگراف داشته باشد.
برای مثال اینجا یک کد داریم:{ my code }همچنین میتوانید پاراگرافهای بیشتری اضافه کنید. ↩
راهنمای سریع مارکدون
در ادامه یک مرور سریع بر فصل های قبل ارائه شده است. برای جزئیات بیشتر، به فصلهای مربوطه (قواعد پایه و یا قواعد گسترشیافته) مراجعه کنید.
قواعد پایه (Basic Syntax)
| عنصر | نحوه نوشتن در مارکدون |
|---|---|
| عنوانها (Heading) | # عنوان ۱ ## عنوان ۲ ### عنوان ۳ |
| مورب (Italic) | *متن مورب* |
| پررنگ (Bold) | **متن پررنگ** |
| مورب و پررنگ | ***متن مورب و پررنگ *** |
| نقل قول (Blockquote) | > یک نقلقول |
| لیست مرتب (Ordered List) | 1. مورد اول 2. مورد دوم 3. مورد سوم |
| لیست بدون ترتیب (Unordered List) | - مورد اول - مورد دوم |
| کد درونخطی (Inline Code) | `کد` |
| بلوک کد (Code Block) | استفاده از ۴ فاصله یا تب |
| خط افقی (Horizontal Rule) | --- یا *** یا ___ |
| لینک (Link) | [عنوان](آدرس) |
| تصویر (Image) |  |
قواعد گسترشیافته (Extended Syntax)
این عناصر، قواعد پایه مارکدون را گسترش میدهند و امکانات بیشتری برای نوشتار فراهم میکنند. توجه داشته باشید که همه ویرایشگرها یا پردازشگرهای مارکدون از این عناصر پشتیبانی نمیکنند.
| عنصر | نحوه نوشتن در مارکدون |
|---|---|
| جدولها | | ستون ۱ | ستون ۲ | | --- | --- | | متن | نمونه | | متن | دیگر | |
| بلوک کد حصاردار (Fenced Code Block) | ``` متن درون بلوک ``` |
| پانویس (Footnote) | یک نمونه پانویس [^1] [^1]: یک نمونه تعریف برای پانویس |
| خطخوردگی (Strikethrough) | نمونه متن با ~~خطخوردگی~~ در آن |
| فهرست کارها (Task List) | - [x] مورد انجام شده - [ ] مورد انجام نشده |
پنداک (Pandoc) چیست؟
پنداک یک کتابخانه نوشتهشده با زبان Haskell برای تبدیل فرمتهای نشانهگذاری (Markup) به یکدیگر است. همچنین یک ابزار خط فرمان دارد که از همین کتابخانه استفاده میکند.
با استفاده از پانداک میتوانید بین انواع مختلفی از فرمتهای نشانهگذاری و پردازش متن تبدیل انجام دهید؛ از جمله انواع مختلف مارکدون، HTML، LaTeX و فایلهای Word (docx). برای دیدن فهرست کامل فرمتهای ورودی و خروجی، میتوانید به وبسایت پانداک مراجعه کنید.
همچنین یک نسخه گسترشیافته از مارکدون وجود دارد که توسط پنداک ارائه شده است. این نسخه شامل قابلیتهایی مانند جدولها، لیستهای تعریفی، بلوکهای متادیتا، پانویسها، ارجاعات، فرمولهای ریاضی و بسیاری امکانات دیگر است. البته این ویژگیها موضوع اصلی این بخش نیستند و تنها بهعنوان یک نکته به آنها اشاره میکنیم.
چرا پنداک؟
برای تبدیل فایلهای مارکدون به فرمتهای دیگر، به یک ابزار نیاز است. ابزاری که در این فصل از آن استفاده خواهیم کرد پنداک است. پنداک از مارکدون پایه و همچنین چندین نسخه گسترشیافته پشتیبانی میکند. علاوه بر این، امکان تعریف قالبها (Templates) و استایلها (Stylesheets) را فراهم میکند تا خروجی فایلها را مطابق نیاز خود شخصیسازی کنید:
پنداک تنها برای تبدیل مارکدون به فرمتهای خروجی مختلف نیست؛ بلکه میتواند بین انواع فرمتهای متفاوت ورودی و خروجی تبدیل انجام دهد. با این حال، در این کتاب تنها به تبدیل مارکدون به فرمتهای دیگر میپردازیم.
از آنجا که مارکدون فقط یک زبان برای ایجاد ساختار در متن است، به ابزار خاصی وابسته نیست. بنابراین میتوان از هر نرمافزار یا ویرایشگری که آن را پشتیبانی میکند برای پردازش اسناد استفاده کرد. اگر ویرایشگر شما امکان خروجی گرفتن در فرمتها و استایلهای مختلف را داشته باشد، این سادهترین روش برای خروجی گرفتن از متون مارکدون خواهد بود.
اما با استفاده از پنداک، کنترل و انعطاف بسیار بیشتری روی نحوه پردازش اسناد خواهید داشت. پنداک بهمراتب قدرتمندتر و همهکارهتر از هر ویرایشگر دیگری است که مارکدون را پشتیبانی میکند.
وقتی کار نوشتن جدیتر میشود و میخواهید بر شکل و ظاهر نهایی اسناد کنترل کامل داشته باشید، به توانمندیهای پنداک نیاز است. البته یادگیری آن میتواند کمی دشوار باشد، اما اگر ابتدا با مثالها و موارد ساده شروع شود، بهتدریج با این ابزار آشنا خواهید شد و پایهای محکم برای استفاده از ویژگیهای پیشرفتهتر خواهید داشت.
پیش از نصب و کار با پنداک، لازم است با اصول اولیه خط فرمان آشنا شویم؛ زیرا بسیاری از مراحل نصب و قابلیتهای پنداک از طریق خط فرمان اجرا میشوند. در ادامه به این موضوع خواهیم پرداخت.
رابط خط فرمان چیست؟
رابط خط فرمان (Command Line Interface – CLI) یک رابط متنی است که در آن کاربر با وارد کردن دستورات، با سیستمعامل کامپیوتر تعامل میکند. برخلاف رابطهای کاربری گرافیکی (GUI) که بر پایه آیکنها و منوها هستند، در CLI همهچیز بر پایه تایپ دستور انجام میشود. این روش امکان کنترل دقیق و بهتر سیستم را به کاربر میدهد.
رابطهای کاربری گرافیکی انجام کارهای ساده را آسان میکنند، در حالی که رابطهای خط فرمان انجام کارهای دشوار را امکانپذیر میسازند.
به عنوان مثال در محیط گرافیکی، برای باز کردن یک فایل بر روی آیکن آن دوبار کلیک میکنید؛ در خط فرمان همان کار را با نوشتن یک دستور انجام میدهید:
open myfile.txt
خروجی دستور در ترمینال نمایش داده میشود یا فایل با برنامه مربوطه باز میشود.
برای کار با خط فرمان، ابتدا باید محیطی داشته باشیم که دستورات در آن اجرا شوند. ترمینال این امکان را برای ما فراهم میکند. ترمینال یک برنامه یا اپلیکیشن است که محیط لازم برای دسترسی به خط فرمان را فراهم میکند. در واقع همان پنجره یا فضایی است که آن را باز میکنید تا دستورات را تایپ کنید. به این ترتیب، ترمینال نقش پل ارتباطی بین کاربر و سیستمعامل را ایفا میکند: شما دستور میدهید، سیستم آن را اجرا میکند و نتیجه را مشاهده میکنید:
در ویندوز، ترمینالهای رایج شامل Command Prompt و PowerShell هستند. در لینوکس و مک، معمولاً برنامهای به نام Terminal وجود دارد که یک نشست شِل (Shell Session) را باز میکند. ترمینال این امکان را میدهد که با تایپ دستورات، با شل تعامل کنید و نتایج آن را مشاهده کنید.
شل برنامهای است که دستورات واردشده در ترمینال را پردازش میکند و بهعنوان واسطهای بین کاربر و سیستمعامل عمل میکند. هر نسخه از شل قابلیتها و دستورات متفاوتی ارائه میدهد. شل علاوه بر تفسیر و اجرای دستورات، متغیرهای محیطی را مدیریت میکند، از اسکریپتنویسی پشتیبانی میکند و امکاناتی مانند تاریخچه دستورات و اتصال خروجی یک دستور به ورودی دستور دیگر (Piping) را در اختیار کاربر قرار میدهد.
روند کلی به شکل زیر است:
- یک ترمینال (یا کنسول) باز میکنید تا به خط فرمان (CLI) دسترسی پیدا کنید.
- ترمینال یک نشست شل را ایجاد میکند.
- شل دستورات تایپشده شما را تفسیر کرده و با سیستمعامل تعامل میکند تا آنها را اجرا کند.
- نتایج یا بازخورد دستورات در پنجره ترمینال نمایش داده میشوند.
شروع کار با خط فرمان
برای استفاده از خط فرمان، ابتدا باید ترمینال سیستمعامل خود را باز کنید. هر سیستمعاملی روشهای سادهای برای دسترسی به برنامه ترمینال ارائه میدهد.
-
ویندوز (Windows)
برای باز کردن ترمینال، کلید Windows یا Esc + Ctrl را فشار دهید تا منوی Start باز شود، سپس برنامه "Command Prompt" یا "PowerShell" را جستوجو و اجرا کنید. راه میانبر دیگر X + Windows است که منوی دسترسی سریع را باز میکند و میتوانید Command Prompt یا PowerShell را انتخاب کنید.
-
مک (macOS)
برای باز کردن ترمینال، از Spotlight Search استفاده کنید: کلیدهای Spacebar + (⌘) Command را فشار دهید، "Terminal" را تایپ کرده و Enter بزنید. همچنین میتوانید ترمینال را در پوشه Utilities در بخش Applications پیدا کنید.
-
لینوکس (Linux)
روش باز کردن ترمینال بسته به توزیع متفاوت است، اما معمولاً میتوانید با فشردن کلید های T + Alt + Ctrl ترمینال را باز کنید. همچنین ترمینال معمولاً در منوی برنامهها با نام "Terminal" یا "Console" قابل پیدا کردن است.
جابهجایی در ترمینال
وقتی ترمینال را باز میکنید، معمولاً متنی روی صفحه ظاهر میشود که به آن پرامپت شل (Shell Prompt) گفته میشود. این نشانه به کاربر اعلام میکند که شل آماده دریافت دستورات است. شکل پرامپت بسته به سیستمعامل و نوع شل متفاوت است:
-
لینوکس و مک:
[me@devbox ~]$me: نام کاربریdevbox: نام سیستم (hostname)~: مسیر دایرکتوری یا پوشه جاری
-
ویندوز (Windows – Command Prompt):
C:\Users\me>C:درایو جاریUsers\meمسیر دایرکتوری یا پوشه جاری
-
ویندوز (PowerShell):
PS C:\Users\me>
با وجود تفاوتهای ظاهری، مفهوم اصلی در همه این پرامپتها یکسان است: نشان دادن موقعیت فعلی کاربر در سیستم فایل و آمادگی شل برای دریافت دستور.
دایرکتوری جاری (Current Working Directory)
در هر لحظه، کاربر درون یک پوشه یا داریکتوری مشخص قرار دارد که به آن دایرکتوری جاری گفته میشود. این دایرکتوری میتواند شامل فایلها و زیرپوشههای دیگر باشد و خود نیز زیرمجموعه یک دایرکتوری بالاتر (Parent Directory) باشد.
برای مشاهده مسیر کامل دایرکتوری جاری از دستورات زیر استفاده میشود:
-
در لینوکس و مک:
pwd -
در ویندوز:
echo %cd%
برای نمایش فایلها و پوشههای موجود در دایرکتوری جاری:
-
در لینوکس و مک:
ls -
در ویندوز:
dir
مسیر مطلق و نسبی
برای اشاره به مسیر یک فایل یا پوشه، دو روش اصلی وجود دارد:
-
مسیر مطلق (Absolute Path): مسیر کامل که از ریشه سیستم فایل آغاز میشود. مثال:
/home/me/Documents/file.txt # Linux/mac C:\Users\Me\Documents\file.txt # Windows -
مسیر نسبی (Relative Path): مسیری که نسبت به دایرکتوری جاری محاسبه میشود. مثال: اگر در مسیر
/home/meقرار داشته باشیم:Documents/file.txt # /home/me/Documents/file.txt معادل
تغییر دایرکتوری (cd)
برای جابهجایی بین پوشهها از دستور cd استفاده میشود. این دستور میتواند هم با مسیر نسبی و هم با مسیر مطلق مورد استفاده قرار گیرد:
-
ورود به یک پوشه (با مسیر نسبی):
cd Documents -
ورود به یک پوشه (با مسیر مطلق):
cd /home/me/Documents # Linux/mac cd C:\Users\Me\Documents # Windows -
بازگشت به پوشه والد (یک سطح بالاتر):
cd .. -
بازگشت به دایرکتوری خانه کاربر:
cd ~ # Linux/mac cd %HOMEPATH% # Windows
به این ترتیب، بسته به موقعیت فعلی شما در سیستم فایل، میتوان با استفاده از مسیرهای نسبی بهسادگی بین پوشهها حرکت کرد یا با مسیرهای مطلق مستقیماً به یک مقصد مشخص رفت.
همچنین در ویندوز یک روش سریعتر وجود دارد. کافی است پوشه مورد نظر را در File Explorer باز کنید، بر روی نوار آدرس کلیک کنید، عبارت cmd را تایپ کرده و سپس کلید Enter را بزنید. به این ترتیب، یک پنجره Command Prompt در همان پوشه باز خواهد شد:
یادگیری نحوه استفاده از ترمینال و جابهجایی بین پوشهها، پایه تمام کارهای دیگر در خط فرمان را تشکیل میدهد. وقتی در این کار مراحل مهارت پیدا کنید، استفاده از دستورات دیگر برای مدیریت فایلها یا اجرای برنامهها به مرور طبیعیتر خواهد شد.
در نگاه اول، نوشتن دستور در ترمینال ممکن است کمی ناآشنا باشد. اما برای استفاده از پنداک، آشنایی نسبی با محیط خط فرمان ضروری است؛ زیرا این ابزار بیشتر از طریق ترمینال اجرا میشود و بسیاری از امکانات پیشرفته آن تنها از همین طریق در دسترس هستند.
نحوه کارکرد پنداک
پنداک تمام اسناد را به یک درخت نحو انتزاعی یا Abstract Syntax Tree (AST) تبدیل میکند1. از این نقطه، محتوا میتواند فیلتر شود و اسناد در هر فرمت دلخواهی نوشته شوند:
برای درک بهتر نحوه کار AST، سادهترین روش این است که یک نمونه را مشاهده کنیم. فرض کنید سندی به شکل زیر داریم:
اگر این سند بهعنوان مثال در LaTeX نوشته شده باشد (پنداک بر این اصل بنا شده است که زبان فایل ورودی محدودیتی ایجاد نکند)، دستور زیر AST آن را تولید میکند:
pandoc --from=latex --to=native silly.tex
و خروجی به این شکل خواهد بود:
[ Header
1
( "a-silly-joke" , [] , [] )
[ Str "A" , Space , Str "Silly" , Space , Str "Joke" ]
, Para
[ Str "I\8217m"
, Space
, Span ( "" , [] , [] ) [ Strong [ Str "concerned" ] ]
, Space
, Str "for"
, Space
, Str "the"
, Space
, Str "calendar"
, Note
[ Para
[ Str "Its"
, Space
, Str "days"
, Space
, Str "are"
, Space
, Span ( "" , [] , [] ) [ Emph [ Str "numbered" ] ]
, Str "."
]
]
, Str "."
]
]
در خط ۱، Header constructor را داریم که یک عنوان سطح ۱ است (خط ۲) و به آن یک نام اختصاص داده شده (خط ۳) و همچنین متن آن (خط ۴). توجه داشته باشید که متن شامل سازندههای Str است—یک رشته جداگانه برای هر کلمه—و بین آنها سازندههای Space قرار دارند برای مشخص کردن فاصله بین کلمات.
سپس Para constructor برای یک پاراگراف در خط ۵ آمده است. داخل پاراگراف، اولین رشته "I'm" شامل یک علامت کوتاهکننده (آپاستروف) است. پنداک بهطور خودکار نقلقولها و آپاستروفها را با سمبلهای مناسب UTF-8 قرار میدهد. عدد 8217 مقدار دسیمال یا دهدهی کد UTF-8 این نماد است. بقیه کد نیز به همین صورت ادامه مییابد؛ برای درک اولیه و کوتاه از نحوه کارکرد پنداک، همین مقدار کافی است.
چون نمایش میانی سند یا همان AST در پنداک نسبت به بسیاری از فرمتهایی که بین آنها تبدیل انجام میدهد، کمجزئیاتتر و سادهتر است، نباید انتظار تبدیل کامل و دقیق بین همه فرمتها را داشت. پنداک سعی میکند عناصر ساختاری سند را حفظ کند، اما جزئیاتی مانند اندازه حاشیه (Margin) را تضمین نمیکند. همچنین برخی عناصر سند، مانند جدولهای پیچیده، ممکن است با مدل ساده پنداک سازگار نباشند. در حالی که تبدیل از مارکدون به فرمتهای دیگر معمولاً کامل است، تبدیل از فرمتهای پیچیدهتر ممکن است منجر به از دست رفتن برخی جزئیات شود.
-
مطالب این بخش (نحوه کارکرد پنداک) از وبسایت chulsky است. برای جزئیات دقیقتر، میتوانید به وبسایت مراجعه کنید. ↩
نصب پنداک
برای نصب پنداک، به وبسایت رسمی مراجعه کنید، نسخه مناسب سیستم عامل خود را دانلود کنید و دستورالعملهای نصب مرتبط با همان سیستم عامل را دنبال کنید.
-
ویندوز
-
فایل نصب با پسوند
.msiیا.exeرا دانلود کنید. -
فایل را اجرا و مراحل نصب را دنبال کنید.
-
برای اطمینان از نصب، Command Prompt را باز کنید و دستور زیر را اجرا کنید:
pandoc -vاگر نسخه نمایش داده شد، نصب موفقیتآمیز بوده است.
-
-
مک (macOS)
-
توصیه میشود از ابزار مدیریت بسته Homebrew استفاده کنید. اگر Homebrew را ندارید، به وبسایت رسمی آن رفته و مراحل نصب را دنبال کنید.
-
سپس پنداک را با دستور زیر نصب کنید:
brew install pandoc -
برای اطمینان از نصب، در ترمینال دستور زیر را اجرا کنید:
pandoc -vاگر نسخه نمایش داده شد، نصب موفقیتآمیز بوده است.
-
-
لینوکس
-
نصب از مخزن رسمی سیستم عامل سادهترین راه است. بسته به توزیع:
# Debian / Ubuntu sudo apt update sudo apt install pandoc # Arch Linux sudo pacman -S pandoc # Red Hat / Fedora sudo dnf install pandoc -
برای بررسی نصب، در ترمینال دستور زیر را اجرا کنید:
pandoc -vاگر نسخه نمایش داده شد، نصب موفقیتآمیز بوده است.
-
تبدیل به زبانهای نشانهگذاری دیگر
وقتی یک سند را با مارکدون نوشتیم، حال میتوان آن را به وسیله پنداک به زبان های دیگر تبدیل کنیم. بهعنوان مثال، سند ساده زیر را در نظر بگیرید:
# This is a test document
Here is some text in the document.
- This is a list
- With two items
اگر این متن را در فایلی به نام input.md ذخیره کنیم، میتوانیم آن را با دستور زیر به یک فایل HTML به نام output.html تبدیل کنیم:
pandoc input.md -o output.html
یا آن را به فایل tex تبدیل کنیم:
pandoc input.md -o output.tex
استفاده از زبان فارسی نیازمند پیشنیازهایی است تا پنداک بتواند آن را بهدرستی تبدیل کند. توضیحات مربوط به این پیشنیازها در بخشهای بعدی ارائه خواهد شد. برای سادهتر شدن مفاهیم، توضیحات در این بخش با متن انگلیسی آورده شده است.
گزینه یا آپشن o- نام فایل خروجی را مشخص میکند. برای فایل ورودی (input.md) تنها کافی است نام فایل را بیاوریم. حتی میتوان چندین فایل ورودی را همزمان مشخص کرد. در این حالت، پنداک آنها را به ترتیب به هم متصل میکند و سپس پردازش انجام میدهد. بنابراین اگر بخواهید کتابی بسازید که هر فصل آن در یک فایل جدا نوشته شده باشد، کافی است همه فایلها را بهترتیب در خط فرمان بنویسید تا در خروجی پشت سر هم بیایند:
pandoc -s input1.md input2.md input3.md -o output.tex
با این حال میتوانیم فرمتها را بهطور صریح هم مشخص کنیم. گزینه from-- برای تعیین فرمت ورودی و to-- برای فرمت خروجی استفاده میشود. معمولاً به این کار نیاز ندارید، مگر زمانی که پسوندهای مشترک وجود داشته باشد. برای نمونه، هر دو فرمت EPUB و EPUB3 پسوند epub. دارند. در این شرایط باید فرمت را صریحاً مشخص کنید.
مثال:
pandoc --from markdown --to latex input.md -o output.tex
یا به شکل کوتاهتر:
pandoc -f markdown -t latex input.md -o output.tex
اگر خروجی شما LaTeX باشد و بخواهید یک سند کامل (شامل تمام بخشهای لازم مثل header یا preamble و body) داشته باشید، باید از گزینه standalone-- استفاده کنید.
اما برای فرمتهایی که بهطور پیشفرض باید یک سند کامل باشند—مثل PDF یا EPUB—پنداک خودش این کار را انجام میدهد و دیگر نیازی به این گزینه ندارید.
نکته دیگر این است که خروجیهایی مانند LaTeX یا HTML ممکن است در ظاهر کمی پیچیدهتر از متن همیشگی شوند. دلیلش این است که هر فرمت قوانین و ساختار مخصوص به خودش را دارد. شما لازم نیست نگران این موضوع باشید؛ پنداک تمام این پیچیدگیها را مدیریت میکند و شما فقط کافی است روی نوشتن متن تمرکز کنید.
برای مشاهده فهرست کامل فرمتهایی که پنداک بهعنوان ورودی و خروجی پشتیبانی میکند، میتوانید این دستورات را اجرا کنید:
pandoc --list-input-formats
pandoc --list-output-formats
گزینههای پرکاربرد (Options)
پنداک گزینههای زیادی برای سفارشیسازی تبدیلها دارد. چند نمونهی پرکاربرد عبارتند از:
| گزینه | توضیح |
|---|---|
--toc | افزودن فهرست مطالب (Table of Contents) |
--number-sections | شمارهگذاری خودکار عناوین بخشها |
-V geometry=margin=2.5cm | تنظیم حاشیه صفحه |
-V mainfont="Yas" | انتخاب فونت اصلی (در اینجا فونت فارسی) |
تبدیل به PDF
برای تبدیل به PDF، همان روش بالا را دنبال میکنیم، ولی پسوند خروجی را pdf. قرار دهیم:
pandoc input.md -o output.pdf
بهطور پیشفرض، پنداک برای تولید PDF از LaTeX استفاده میکند، بنابراین باید یک موتور LaTeX روی سیستم نصب باشد. با این حال، پنداک محدود به LaTeX نیست و میتواند از موتورهای دیگری مثل ConTeXt، roff یا حتی HTML بهعنوان واسط استفاده کند. برای انتخاب موتور دلخواه، از گزینه pdf-engine-- یا t- استفاده میکنیم:
pandoc --pdf-engine=context input.md -o output.pdf
pandoc -t context input.md -o output.pdf
pandoc -t html input.md -o output.pdf
جمعبندی
در زیر یک نمونه دستور آورده شده است که چند گزینه پرکاربرد را بهطور همزمان ترکیب میکند:
pandoc input.md -o output.pdf --pdf-engine=xelatex --toc --number-sections -V geometry=margin=2.5cm
هرچند امکان نوشتن همه گزینهها در خط فرمان وجود دارد، ولی وقتی تعدادشان زیاد میشود، دستورها طولانی و خواندن آنها دشوار میشود. در بخش بعدی روشی ارائه شده است که این مشکل را برطرف میکند.
تنظیمات از پیش تعیین شده
پنداک این امکان را به شما میدهد که تمام تنظیمات و گزینههایی را که معمولاً در خط فرمان وارد میکنید، داخل یک فایل YAML ذخیره کنید. به این ترتیب، به جای نوشتن یک دستور طولانی و پر از گزینه، فقط کافی است در خط فرمان، فایل تنظیمات را معرفی کنید.
YAML (مخفف YAML Ain't Markup Language) یک فرمت متنی ساده و خوانا برای ذخیرهسازی دادهها و پیکربندیهاست. در اینجا از YAML برای تعریف گزینهها و پارامترهای پنداک استفاده میکنیم. فایل YAML ساختار سادهای دارد و با فاصلهها و تورفتگیها (indentation) گزینهها و مقادیر را مشخص میکند.
به زبان ساده:
- یک فایل متنی با پسوند
yaml.میسازید. - داخل آن، گزینهها و پارامترهای موردنظرتان برای پنداک را تعریف میکنید.
- سپس در خط فرمان به جای نوشتن همه گزینهها، فقط مینویسید:
pandoc input.md -o output.pdf --defaults /path/to/file.yaml
در نهایت پنداک تمام تنظیمات داخل فایل YAML را بهصورت خودکار اعمال میکند.
یک مثال ساده از فایل YAML:
pdf-engine: xelatex
toc: true
number-sections: true
variables:
geometry: "a4paper, margin=2.5cm"
mainfont: Yas
fontsize: 12pt
حالا کافی است فقط بنویسید:
pandoc input.md -o output.pdf --defaults config.yaml
و همه گزینهها به طور خودکار اعمال میشوند. این روش بهویژه وقتی دستور پنداک شما طولانی باشد یا گزینههای تکراری زیادی داشته باشید بسیار مفید است و کار را سادهتر میکند.
نمونه تنظیمات پیشنهادی برای زبان فارسی
گزینه های زیر یک نمونهای ایدهآل برای زبان فارسی میباشد:
pdf-engine: xelatex
top-level-division: chapter # part, section
variables:
geometry: "a4paper, margin=1.3in"
fontsize: 12pt
header-includes:
- \usepackage{hyperref}
- \usepackage{xepersian}
- \settextfont{XB Niloofar}
- '\renewcommand{\labelitemi}{\tiny\textbullet}' # Set the size of bullet points to small
جدول زیر، هر کدام از گزینههای تعریف شده در مثال بالا را توضیح میدهد:
| گزینه | توضیح |
|---|---|
pdf-engine: xelatex | موتور PDF برای پشتیبانی بهتر از فونتهای فارسی |
top-level-division: chapter | تعیین سطح اصلی تقسیمبندی سند (مثل فصل یا بخش) |
geometry: "a4paper, margin=1.3in" | اندازه کاغذ و فاطله حاشیهها |
fontsize: 12pt | اندازه فونت متن |
header-includes | پکیجها و دستورات اضافهای که قبل از شروع سند بارگذاری میشوند |
\usepackage{hyperref} | فعالکردن لینکها و ارجاعات |
\usepackage{xepersian} | پشتیبانی کامل از متن فارسی |
\settextfont{XB Niloofar} | تعیین فونت اصلی متن فارسی |
\renewcommand{\labelitemi}{\tiny\textbullet} | کوچک کردن علامتهای گلولهای در لیستها |
ترکیب زبانهای مارکآپ
پیشتر توضیح داده شد که پنداک ابتدا فایل ورودی را به یک زبان میانی تبدیل میکند. این یعنی شما میتوانید در یک فایل واحد، ترکیبی از چند زبان نشانهگذاری (Markup) مثل Markdown، LaTeX و HTML داشته باشید. پنداک همه آنها را به درخت نحو انتزاعی (AST) تبدیل کرده و سپس خروجی نهایی را بهدرستی تولید میکند.
به عنوان مثال، یک فایل ورودی شامل Markdown، LaTeX و HTML میتواند به شکل زیر باشد:
بخش LaTeX
برای تعریف مشخصات سند (عنوان، نویسنده، تاریخ) و همچنین برای نوشتن فرمولهای ریاضی یا محتوای پیشرفته که Markdown پشتیبانی محدودی از آنها دارد:
\title{نام اثر}
\author{محمدرضا روستا}
\date{}
\maketitle
The area of a circle is $A = \pi r^2$.
$$
f(x) = \int_{0}^{\infty} e^{-t^2} dt
$$
بخش مارکدون
برای نوشتن متنهای سادهتر، سریع و روان:
## بخش اول
متن نوشته شده با مارکدون
- لیست با آیتم شماره ۱
- لیست با آیتم شماره ۲
کلمات با **تأکید** و ~~خطخوردگی~~
بخش HTML
برای پوشش محدودیتهای مارکدون، مانند لاتک میتوان میتوان از تگهای html هم استفاده کرد. بهعنوان مثال برای مرکزچین کردن متن یا جدول:
<div align="center">
| ستون اول | ستون دوم |
|----------|----------|
| مورد اول | مورد دوم |
| مورد سوم | مورد چهارم |
</div>
به این ترتیب، میتوانید در یک فایل واحد: از Markdown برای متن اصلی، از LaTeX برای فرمولها و از HTML برای قالببندیهای خاص استفاده کنید. پنداک همه را یکجا پردازش کرده و خروجی نهایی را بدون مشکل تولید میکند.