اینم یه تجربه پراکنده دیگه!
من به شخصه مدتهاست علاقه مندم که مستنداتی که تولید میکنم رو با نرم افزار latex بنویسم اما به هزاران دلیل، که مهمترین عدم توانایی به اشتراک گذاری این فایلها با دیگران(اکثر آدمهایی که من باهاشون کار میکنم) نتونستم این ایده رو اجرایی کنم. اما همیشه این علاقه در من وجود داشته و داره. به همین خاطر علمم رو در این زمینه زیاد میکنم. همچنین از وقتی که وبلاگ مینویسم به پستهای وبلاگم به شکل یک مستند نگاه میکنم و دوست دارم اونها در فرمت لاتک داشته باشم.پس به این نتیجه رسیدم که بگردم و ببینم آیا روشی وجود داره که من مستندات رو به یه فرمت خاص بنویسم و بعدش به html و فرمت لاتک تبدیل کنم؟
در ابتدای کار شواهدی پیدا کردم که احتمالا این روش وجود داره. اگه با روش مستند سازی doxygen آشنا باشید، مستندات با استفاده از فرمت خاص doxyegen نوشته میشن و این نرم افزار میتونه نتیجه رو به فرمت لاتک و html تبدیل کنه. پس کار امکان پذیره. همچنین یکی دیگه از نیازمندیهای این راهحل برای تبدیل آسون بودنه تا مهاجرت و استفاده از راه حل کم هزینه باشه. همچنین به نظر من نوشتن به فرمت لاتک و html سخته و خیلی «تو دل برو» یا همون user friendly نیست. پس باید این نکته رو هم در پیدا کردن راه حل در نظر بگیرم.
خب حالا برم سراغ راه حلی که برای این مساله پیدا کردم. من از قبل با دو روش ساده نوشتن html که عبارتند از makrdown و reStructuredText بصورت محدودی آشنا بودم و میدونستم که تبدیل این فرمتهای به html مثل آب خوردن انجام میشه پس نصف مساله حل بود. از اونجایی که من با markdown بیشتر آشنا بودم این زبان ساده شده رو انتخاب کردم. حالا میمونه تبدیل markdown به لاتک که بعد از یه ذره گشتن رسیدم به این دوتا پست(لینک، لینک) و با استفاده از اونها تونستم markdown رو به کمک ابزاری به نام pandoc به لاتک تبدیل کنم و با استفاده از زیپرشین اون رو تبدیل کنم به pdf. حالا مراحل انجام این کار رو اینجا مینویسم
- نوشتن مستند به فرمت markdown مثلا
قسمت اول ====================== نیازمندیها ====================== پکیجهای زیر باید نصب شود 1. پکیج اول 2. پکیج اول 3. پکیج اول 4. پکیج اول 5. پکیج اول 6. سلام 1. سلام ۲ 2. سلام ۳ 3. سلام ۴ 4. سلام ۵ 5. سلام ۶ 6. سلام ۷ 7. سلام ۸ 8. سلام ۹ چطور کامپایل کنیم ==================== کامپایل کن دیگه
- تبدیل این متن به فرمت xelatex با دستور زیر
pandoc -f markdown --latex-engine=xelatex -R -i a.md -o a.tex
- متن نتیجه شده به شکل زیره که اضافاتی داره
section{قسمت اول}label{ux642ux633ux645ux62a-ux627ux648ux644} section{نیازمندیها}label{ux646ux6ccux627ux632ux645ux646ux62fux6ccux647ux627} پکیجهای زیر باید نصب شود begin{enumerate}[<+->] deflabelenumi{arabic{enumi}.} item پکیج اول item پکیج اول item پکیج اول item پکیج اول item پکیج اول item سلام begin{enumerate}[<+->] deflabelenumii{arabic{enumii}.} itemsep1ptparskip0ptparsep0pt item سلام ۲ item سلام ۳ item سلام ۴ item سلام ۵ item سلام ۶ item سلام ۷ item سلام ۸ item سلام ۹ end{enumerate} end{enumerate} section{چطور کامپایل کنیم}label{ux686ux637ux648ux631-ux6a9ux627ux645ux67eux627ux6ccux644-ux6a9ux646ux6ccux645} کامپایل کن دیگه
- حذف این اضافات با دستورارت زیر
sed -i.bak 's/[<+->]//' a.tex sed -i.bak 's/\def\labelenumi{\arabic{enumi}.}//g' a.tex sed -i.bak 's/\itemsep1pt\parskip0pt\parsep0pt//g' a.tex
- که نتیجه میشه این
section{قسمت اول}label{ux642ux633ux645ux62a-ux627ux648ux644} section{نیازمندیها}label{ux646ux6ccux627ux632ux645ux646ux62fux6ccux647ux627} پکیجهای زیر باید نصب شود begin{enumerate} item پکیج اول item پکیج اول item پکیج اول item پکیج اول item پکیج اول item سلام begin{enumerate} item سلام ۲ item سلام ۳ item سلام ۴ item سلام ۵ item سلام ۶ item سلام ۷ item سلام ۸ item سلام ۹ end{enumerate} end{enumerate} section{چطور کامپایل کنیم}label{ux686ux637ux648ux631-ux6a9ux627ux645ux67eux627ux6ccux644-ux6a9ux646ux6ccux645} کامپایل کن دیگه
- این متن به تنهایی توسط لاتک کامپایل نمیشه و باید یه سری تگهای استاندارد لاتک بهش اضافه بشه تا بگه فرمت مستند چیه فونتا چین و از این دست چیزا. بهترین راه برای انجام اینکار داشتن یه فایل دیگه برای اون تگهای و include کردن این فایل در اون فایل هست. یه نمونه از اون فایل به این صورته:
documentclass[a4paper,12pt]{book} usepackage{aut_test} usepackage[colorlinks,linkcolor=black,citecolor=black]{hyperref} usepackage{graphicx} usepackage{amsthm,amssymb} usepackage{tocbibind} usepackage{listings} usepackage{xepersian} settextfont[Scale=1]{B Zar} begin{document} chapter{فصل اول} include{a} end{document}
- و با این دستور لاتک رو کامپایل میکنیم
xelatex -synctex=-1 doc.tex
- و نتیجه توی اینجا قابل مشاهده است.
همین!