حل markdown2pdf جاهز مع شفرة المصدر لنظام Linux

مقدمة

Markdown هي طريقة رائعة لكتابة مقال قصير ، وأحيانًا الكثير من النصوص ، بتنسيق بسيط مائل وجريء. Markdown مفيد أيضًا لكتابة المقالات مع تضمين شفرة المصدر. لكن في بعض الأحيان تريد أن ترقص بدون خسارة ، والرقص مع الدف لتتجاوزه في ملف PDF منتظم جيد التكوين ، وحتى لا تكون هناك مشاكل أثناء التحويل ، وهو ما فعلته ، على سبيل المثال - لا يمكنك الكتابة باللغة الروسية تعليقات الكود المصدري ، لا يتم نقل الأسطر الطويلة جدًا ، ولكن يتم قصها ومشاكل أخرى بسيطة. ستسمح لك التعليمات بإعداد المحول بسرعة md2pdf دون فهم كيفية عملها حقًا. يوجد أدناه البرنامج النصي الخاص بالتثبيت التلقائي إلى حد ما أو أقل في القسم المناسب.

يستخدم نموذج TeX النموذجي الخاص بي للتحويل حزمة خطوط PSCyr ، والتي تتضمن دعمًا لخطوط Microsoft ، وبالتحديد تايمز الرومانية الجديدة. كانت هناك مثل هذه المتطلبات للحصول على دبلوم وفقًا لـ GOST. إذا كنت تعرف كيف يمكنك تعديل القالب ليناسب احتياجاتك. في تعليماتي الخاصة ، سيتعين عليك أولاً العبث بإعداد PSCyr في TexLive. يتم الإعداد في توزيعة Linux Mint Mate ، بالنسبة للتوزيعات الأخرى ، قد تضطر إلى استخدام مجلدات حزم TexLive القياسية لنظامك على google.

تثبيت برنامج TexLive

بالطبع ، يمكنك تثبيت الأجزاء الضرورية فقط من هذه الحزمة. لكنني شخصيًا كنت كسولًا جدًا للبحث عن الحد الأدنى من تركيب العمل الضروري. للتأكد من أن كل شيء يعمل ، قم بتثبيت حزمة TexLive بأكملها. تسمى texlive كامل ويزن أكثر بقليل من 2 غيغابايت ، ضع هذه الحقيقة في الاعتبار. نقوم بتنفيذ الأمر:

user@hostname:~$ sudo apt install texlive-full -y

بعد تثبيت طويل بما فيه الكفاية ، يمكنك المتابعة إلى العنصر التالي.

تثبيت محول Pandoc

Pandoc هي حزمة Linux تسمح لك بتحويل بعض تنسيقات النص إلى أخرى. يحتوي على الكثير من الميزات المثيرة للاهتمام التي يمكنك أن تجدها على الإنترنت. نحن مهتمون فقط بإمكانية تحويل ملف markdown إلى PDF. تحقق مما إذا كان Pandoc مثبتًا وإذا لم يكن مثبتًا ، فقم بتثبيته. على سبيل المثال مثل هذا:

user@hostname:~$ dpkg -s pandoc

إذا كان الإخراج يشير إلى أنه غير مثبت ، فقم بتثبيت:

user@hostname:~$ sudo apt install pandoc -y

تثبيت حزمة PSCyr لـ TexLive

تحتاج أولاً إلى تنزيل PSCyr. في الوقت الحالي لا يزال متاحًا في هذا صلة، إذا لم يكن متاحًا لسبب ما في وقت قراءة المقال ، فلا تيأس ، فمن السهل العثور عليه جنبًا إلى جنب مع تعليمات التثبيت عن طريق كتابة شيء مثل "تثبيت PsCyr texlive" في Google. إذا كان متاحًا ، فسيكون من الأسهل عليك التنزيل وسنفترض أنك قمت بفك ضغط الأرشيف في المجلد الرئيسي ، وبالتالي يبدو المسار إلى المجلد الموجود في الأرشيف مثل ~ / بسير. ثم انتقل إلى Terminal وقم بتنفيذ الأوامر التالية بالتسلسل:

user@hostname:~$ cd
user@hostname:~$ mkdir ./PSCyr/fonts/map ./PSCyr/fonts/enc
user@hostname:~$ cp ./PSCyr/dvips/pscyr/*.map ./PSCyr/fonts/map/
user@hostname:~$ cp ./PSCyr/dvips/pscyr/*.enc ./PSCyr/fonts/enc/
user@hostname:~$ echo "fadr6t AdvertisementPSCyr "T2AEncoding ReEncodeFont"" > ./PSCyr/fonts/map/pscyr.map

بعد ذلك ، اكتشف مكان الدليل المحلي texmf. نقوم بتنفيذ الأمر:

user@hostname:~$ kpsewhich -expand-var='$TEXMFLOCAL'

على الأرجح لديك هذا الدليل - / usr / local / share / texmf /، ثم نقوم بما يلي:

user@hostname:~$ sudo cp -R ./PSCyr/* /usr/local/share/texmf/

حسنًا ، أو لا يمكنك عناء تشغيل الأمر الذي سينسخ إلى مجلد texmf أينما كانت:

user@hostname:~$ sudo cp -R ./PSCyr/* $(kpsewhich -expand-var='$TEXMFLOCAL')

تم تثبيت خطوط PSCyr ، اتصل بـ TexLive:

user@hostname:~$ sudo texhash
user@hostname:~$ updmap --enable Map=pscyr.map
user@hostname:~$ sudo mktexlsr

قالب LaTeX لتحويل md2pdf

لن أصف بالضبط كيف تم تكوين هذا القالب ، وسأعطيه ببساطة تحت المفسد دون الكثير من الشرح. يكفي أن نقول إنه تم تكوينه جيدًا ، على الأقل من حيث كيفية تعامله مع النصوص التي تحتوي على الكثير من التعليمات البرمجية المصدر. إذا لم تكن راضيًا عن حجم المسافات البادئة ، وتباعد الأسطر ، ونقص ترقيم الأقسام والأقسام الفرعية ، فمن السهل جدًا في رأيي أن تبحث في google عن السؤال على الإنترنت "كيف تفعل ذلك في Latex ..." ثم حاجتك. إذا لم يكن الأمر واضحًا على الإطلاق ، فاكتب في التعليقات ، وسأحاول الخوض في إعداداتي الخاصة قبل 4 سنوات ووصف أي سطر من القالب مسؤول عن ماذا. في غضون ذلك ، سوف أكتب كيف فعلت ذلك على جهاز الكمبيوتر الخاص بي ، ولك مطلق الحرية في تكراره أو تعديله بنفسك.

قم بإنشاء ملف template.tex في الكتالوج / usr / share / texlive /:

user@hostname:~$ sudo touch /usr/share/texlive/template.tex

امنحه أذونات القراءة:

user@hostname:~$ sudo chmod 444 /usr/share/texlive/template.tex

افتحه تحت الجذر والصق المحتويات المخفية أسفل المفسد أدناه فيه:

user@hostname:~$ sudo nano /usr/share/texlive/template.tex

محتوى النموذج /usr/share/texlive/template.tex

documentclass[oneside,final,14pt]{extreport}
usepackage{extsizes}
usepackage{pscyr}
renewcommand{rmdefault}{ftm}
usepackage[T2A]{fontenc}
usepackage[utf8]{inputenc}
usepackage{amsmath}
usepackage{mathtext}
usepackage{multirow}
usepackage{listings}
usepackage{ucs}
usepackage{hhline}
usepackage{tabularx}
usepackage{booktabs}
usepackage{longtable}
usepackage{titlesec}
usepackage{hyperref}
usepackage{graphicx}
usepackage{setspace}
usepackage[center,it,labelsep=period]{caption}
usepackage[english,russian,ukrainian]{babel}
usepackage{vmargin}
newcommand{specialcell}[2][c]{%
    begin{tabular}[#1]{@{}c@{}}#2end{tabular}}
setpapersize{A4}
setmarginsrb {1cm}{1cm}{1cm}{1cm}{0pt}{0mm}{0pt}{13mm}
usepackage{indentfirst}
setlengthparindent{1cm}
renewcommand{baselinestretch}{1}
renewcommandthechapter{}
renewcommandthesection{}
renewcommandthesubsection{}
renewcommandthesubsubsection{}
titleformat
{chapter} % command
{bfseriesnormalsizecentering} % format
{thechapter} % label
{0.5ex} % sep
{
    centering
}
[
vspace{-1.5ex}
] % after-code
titleformat
{section}
[block]
{normalfontbfseries}
{thesection}{0.5em}{}
sloppy
letoldenumerateenumerate
renewcommand{enumerate}{
  oldenumerate
  setlength{itemsep}{1pt}
  setlength{parskip}{0pt}
  setlength{parsep}{0pt}
}
letolditemizeitemize
renewcommand{itemize}{
  olditemize
  setlength{itemsep}{1pt}
  setlength{parskip}{0pt}
  setlength{parsep}{0pt}
}
providecommand{tightlist}{%
  setlength{itemsep}{0pt}setlength{parskip}{0pt}}

titlespacing{subsubsection}{parindent}{3mm}{3mm}
titlespacing{subsection}{parindent}{3mm}{3mm}
usepackage{color}

lstset{
    basicstyle=footnotesizettfamily,
    inputencoding=utf8,
    extendedchars=true,
    showspaces=false,
    keepspaces=true
    showstringspaces=false,
    showtabs=false,
    tabsize=4,
    captionpos=b,
    breaklines=true,
    breakatwhitespace=true,
    breakautoindent=true,
    linewidth=textwidth
}

begin{document}
$if(title)$
maketitle
$endif$
$if(abstract)$
begin{abstract}
$abstract$
end{abstract}
$endif$

$for(include-before)$
$include-before$

$endfor$
$if(toc)$
{
$if(colorlinks)$
hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$}
$endif$
setcounter{tocdepth}{$toc-depth$}
tableofcontents
}
$endif$
$if(lot)$
listoftables
$endif$
$if(lof)$
listoffigures
$endif$
$body$

$if(natbib)$
$if(bibliography)$
$if(biblio-title)$
$if(book-class)$
renewcommandbibname{$biblio-title$}
$else$
renewcommandrefname{$biblio-title$}
$endif$
$endif$
bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}

$endif$
$endif$
$if(biblatex)$
printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$

$endif$
$for(include-after)$
$include-after$

$endfor$
end{document}

حفظ الملف /usr/share/texlive/template.tex وكتابة نص يقوم بتحويل ملف Makrdown إلى PDF ، وإنشاء ملف يسمى Markdown في نفس المجلد بالبادئة .pdf ، أي بعد التحويل اسم الملف. md سيظهر في المجلد. اسم الملف.md.pdf. دعنا نسمي البرنامج النصي md2pdf ووضعت في الطريق / البيرة / بن. دعنا ننفذ الأوامر بالتسلسل:

user@hostname:~$ cd
user@hostname:~$ touch md2pdf
user@hostname:~$ echo "#!/bin/bash" > md2pdf
user@hostname:~$ echo "pandoc --output=$1.pdf --from=markdown_github --latex-engine=pdflatex --listings --template=/usr/share/texlive/template.tex $1" >> md2pdf
user@hostname:~$ sudo cp md2pdf /usr/bin/
user@hostname:~$ sudo chmod 111 /usr/bin/md2pdf

يحتوي السطر الرابع بالفعل على أمر التحويل. انتبه على --من = markdown_github. إصدار GitHub من Markdown متوافق مع الإصدارات السابقة مع Markdown الأصلي ، لذلك إذا كان النص مكتوبًا فيه ، فلا داعي للقلق. إذا كان ملف MD الخاص بك مكتوبًا بلغة Markdown معينة ، فاقرأ دليل Pandoc (man pandoc) ، تأكد من أن التنفيذ الخاص بك مدعوم به ، وقم بالتعديل / usr / bin / md2pdf اذا كان ضروري.

برنامج نصي للتثبيت التلقائي أكثر أو أقل

إذا كنت لا تريد حقًا تكوين أي شيء على الإطلاق ، وكان لديك توزيعة تشبه Ubuntu ، فيمكنك محاولة إنشاء نص برمجي بالمحتويات المخفية تحت المفسد ، وعلى الأرجح سيتم تثبيت كل شيء بنفسه ، الشيء الوحيد هو نسخ تم نشر نموذج TeX أسفل المفسد أعلاه إلى المكان الذي تريده. افتح Terminal وقم بتشغيل:

user@hostname:~$ cd
user@hostname:~$ touch installmd2pdf.sh

ثم املأه بالمحتوى التالي:

محتويات البرنامج النصي $ HOME / installmd2pdf.sh

#!/bin/bash
cd /tmp
sudo apt install texlive-full pandoc -y
wget http://blog.harrix.org/wp-content/uploads/2013/02/PSCyr.zip
unzip -qq PSCyr.zip
cd
mkdir ./PSCyr/fonts/map ./PSCyr/fonts/enc
cp ./PSCyr/dvips/pscyr/*.map ./PSCyr/fonts/map/
cp ./PSCyr/dvips/pscyr/*.enc ./PSCyr/fonts/enc/
echo "fadr6t AdvertisementPSCyr "T2AEncoding ReEncodeFont"" > ./PSCyr/fonts/map/pscyr.map
sudo cp -R ./PSCyr/* $(kpsewhich -expand-var='$TEXMFLOCAL')
sudo texhash
updmap --enable Map=pscyr.map
sudo mktexlsr
sudo touch /usr/share/texlive/template.tex
touch md2pdf
echo "#!/bin/bash" > md2pdf
echo "pandoc --output=$1.pdf --from=markdown_github --latex-engine=pdflatex --listings --template=/usr/share/texlive/template.tex $1" >> md2pdf
sudo cp md2pdf /usr/bin/
sudo chmod 111 /usr/bin/md2pdf

قم بتشغيله باستخدام الأمر:

user@hostname:~$ sudo bash $HOME/installmd2pdf.sh

لا تنسي ذلك /usr/share/texlive/template.tex يجب تعبئتها كما هو موضح في القسم "قالب LaTeX لتحويل md2pdf" محتوى.

باستخدام md2pdf

فقط افتح المجلد الذي يحتوي على ملف Markdown (some_file.md) في Terminal وقم بتشغيل الأمر:

user@hostname:~$ md2pdf some_file.md

نتيجة لذلك ، سيظهر ملف في المجلد some_file.md.pdf.

اختتام

استنادًا إلى الطريقة الموضحة ، يمكنك إنشاء أي نمط من ملفات PDF ، كما يمكنك تحويل تنسيقات أخرى بدلاً من md ، أي تنسيقات مدعومة من Pandoc. أجرؤ على أن أتمنى أن تكون هذه التعليمات ذات يوم مفيدة لثلاثة أشخاص ونصف.

المصدر: www.habr.com

إضافة تعليق