Linux uchun manba kodi bilan tayyor markdown2pdf yechimi

muqaddima

Markdown - oddiy kursiv va qalin formatlash bilan qisqa maqola va ba'zan juda ko'p matn yozishning ajoyib usuli. Markdown manba kodi bilan maqolalar yozish uchun ham yaxshi. Ammo ba'zida siz bema'nilik bilan raqsga tushishni xohlaysiz, uni oddiy, yaxshi shakllangan PDF-faylga o'tkazish uchun daf bilan raqsga tushishni xohlaysiz va konvertatsiya paytida hech qanday muammo bo'lmasligi uchun, masalan, menda bor edi - siz rus tilida yoza olmaysiz. manba kodining sharhlari, juda uzun qatorlar o'tkazilmaydi, lekin kesilgan va boshqa kichik muammolar. Ko'rsatma sizga konvertorni tezda sozlash imkonini beradi md2pdf u qanday ishlashini tushunmasdan. Ko'proq yoki kamroq avtomatik o'rnatish uchun skript tegishli bo'limda quyida keltirilgan.

Konvertatsiya qilish uchun mening namunaviy TeX shablonim PSCyr shrift paketidan foydalanadi, u Microsoft shriftlarini qo'llab-quvvatlaydi, xususan Times New Roman. GOST bo'yicha diplom uchun bunday talablar mavjud edi. Agar qanday qilishni bilsangiz, shablonni ehtiyojlaringizga mos ravishda o'zgartirishingiz mumkin. Mening ko'rsatmalarimga ko'ra, siz avval TexLive-da PSCyr sozlamalari bilan aldashingiz kerak bo'ladi. O'rnatish Linux Mint Mate distributivida amalga oshiriladi, boshqa tarqatishlar uchun tizimingiz uchun standart TexLive paket papkalarini Google orqali qidirishingiz kerak bo'lishi mumkin.

TexLive o'rnatilmoqda

Albatta, siz ushbu paketning faqat kerakli qismlarini o'rnatishingiz mumkin. Lekin shaxsan men minimal zarur ish o'rnatishni izlashga dangasa bo'ldim. Hammasi ishlayotganiga ishonch hosil qilish uchun butun TexLive paketini o'rnating. U deyiladi texlive-to'liq va og'irligi 2 gigabaytdan bir oz ko'proq, bu haqiqatni yodda tuting. Biz buyruqni bajaramiz:

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

Etarlicha uzoq o'rnatishdan so'ng, keyingi elementga o'tishingiz mumkin.

Pandoc konvertorini o'rnatish

Pandoc - bu ba'zi matn formatlarini boshqalarga aylantirish imkonini beruvchi Linux paketidir. U Internetda o'zingizni topishingiz mumkin bo'lgan juda ko'p qiziqarli xususiyatlarga ega. Biz faqat markdown faylini PDF-ga aylantirish imkoniyati bilan qiziqamiz. Pandoc o'rnatilgan yoki yo'qligini tekshiring, agar bo'lmasa, uni o'rnating. Masalan, shunday:

user@hostname:~$ dpkg -s pandoc

Agar chiqish o'rnatilmaganligini aytsa, o'rnating:

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

TexLive uchun PSCyr paketini o'rnatish

Avval PSCyr-ni yuklab olishingiz kerak. Hozircha u shu yerda mavjud aloqa, agar maqolani o'qish paytida biron bir sababga ko'ra u mavjud bo'lmasa, umidsizlikka tushmang, Google-da "PsCyr texlive-ni o'rnatish" kabi biror narsani yozib, uni o'rnatish ko'rsatmalari bilan birga topish oson. Agar u mavjud bo'lsa, siz uchun osonroq bo'ladi, yuklab oling va biz arxivni uy papkangizga ochdingiz deb taxmin qilamiz va shuning uchun arxivdagi papkaga yo'l shunday ko'rinadi. ~/PSCyr. Keyin Terminalga o'ting va quyidagi buyruqlarni ketma-ket bajaring:

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

Keyinchalik, mahalliy katalog qaerda joylashganligini bilib oling texmf. Biz buyruqni bajaramiz:

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

Katta ehtimol bilan sizda ushbu katalog mavjud - /usr/local/share/texmf/, va keyin biz:

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

Xo'sh, yoki siz bezovta qila olmaysiz va papkaga nusxa ko'chiradigan buyruqni bajara olmaysiz texmf u qayerda bo'lmasin:

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

PSCyr shriftlari o'rnatilgan, TexLive-ga ulaning:

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

Md2pdf konvertatsiya qilish uchun LaTeX shabloni

Men ushbu shablon qanday sozlanganligini aniq tasvirlamayman va uni spoyler ostida ko'p tushuntirishsiz beraman. Hech bo'lmaganda juda ko'p manba kodi bo'lgan matnlarni qanday boshqarishi nuqtai nazaridan, yaxshi tuzilganligini aytish kifoya. Agar siz chekinishlar o'lchami, qatorlar oralig'i, bo'limlar va bo'limlarning raqamlanmaganligidan qoniqmasangiz, menimcha, Internetda "Lateksda qanday qilish kerak ..." degan savolni google-da topish juda oson va keyin sizning ehtiyojingiz. Agar bu umuman tushunarli bo'lmasa, sharhlarda yozing, men 4 yil oldin o'z sozlamalarimni o'rganishga harakat qilaman va shablonning qaysi qatori nima uchun javobgar ekanligini tasvirlab beraman. Ayni paytda, men buni shaxsiy kompyuterimda qanday qilganimni yozaman va siz buni o'zingiz uchun takrorlashingiz yoki o'zgartirishingiz mumkin.

Fayl yarating template.tex katalogda /usr/share/texlive/:

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

Unga o'qishga ruxsat bering:

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

uni ildiz ostida oching va unga quyidagi spoyler ostida yashiringan tarkibni joylashtiring:

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

Shablon tarkibi /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}

Faylni saqlash /usr/share/texlive/template.tex va Makrdown faylini PDF-ga o'zgartiradigan skriptni yozing, xuddi shu papkada .pdf prefiksi bilan Markdown fayli deb nomlangan faylni yarating, ya'ni konversiyadan keyin. filename.md papkada paydo bo'ladi. fayl nomi.md.pdf. Keling, skriptni chaqiraylik md2pdf va yo'lga qo'ying / usr / bin. Buyruqlarni ketma-ket bajaramiz:

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

4-qatorda aslida aylantirish buyrug'i mavjud. e'tibor bering --from=markdown_github. Markdown-ning GitHub versiyasi asl Markdown bilan orqaga qarab mos keladi, shuning uchun agar matn unda yozilgan bo'lsa, tashvishlanishingizga hojat yo'q. Agar MD faylingiz ma'lum bir Markdown lahjasida yozilgan bo'lsa, Pandoc qo'llanmasini o'qing (man pandoc), uni amalga oshirishingiz qo'llab-quvvatlanishiga ishonch hosil qiling va o'zgartiring /usr/bin/md2pdf zarur bo'lsa.

Ko'proq yoki kamroq avtomatik o'rnatish uchun skript

Agar siz haqiqatan ham hech narsani sozlashni xohlamasangiz va sizda Ubuntu-ga o'xshash tarqatish bo'lsa, siz spoyler ostida yashirin tarkibga ega skript yaratishga urinib ko'rishingiz mumkin va hamma narsa o'zini o'zi o'rnatishi mumkin, yagona narsa - nusxalash. TeX shablonini kerak bo'lganda yuqoridagi spoyler ostida joylashtiriladi. Terminalni oching va ishga tushiring:

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

Keyin uni quyidagi tarkib bilan to'ldiring:

$HOME/installmd2pdf.sh skriptining mazmuni

#!/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

Buyruq bilan ishga tushiring:

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

Buni unutmang /usr/share/texlive/template.tex bo'limida ko'rsatilganidek to'ldirilishi kerak "Md2pdf konvertatsiya qilish uchun LaTeX shabloniΒ» mazmuni.

Md2pdf dan foydalanish

Faqat Markdown fayli bilan jildni oching (some_file.md) Terminalda va buyruqni bajaring:

user@hostname:~$ md2pdf some_file.md

Natijada, papkada fayl paydo bo'ladi some_file.md.pdf.

xulosa

Ta'riflangan usulga asoslanib, siz PDF-fayllarning istalgan uslubini yaratishingiz mumkin, shuningdek, Pandoc tomonidan qo'llab-quvvatlanadigan md o'rniga boshqa formatlarni ham o'zgartirishingiz mumkin. Bir kun kelib bu ko'rsatma 3 yarim kishiga foydali bo'ladi deb umid qilishga jur'at etaman.

Manba: www.habr.com

a Izoh qo'shish