Končna rešitev markdown2pdf z izvorno kodo za Linux

Predgovor

Markdown je odličan način za pisanje malog članka, a ponekad i dovoljno opsežnog teksta, s jednostavnim formatiranjem poput italic i bold. Takođe, Markdown je dobar za pisanje članaka koji uključuju izvorni kod. Ali ponekad želite bez gubitaka, bez muke pretvoriti ga u običan, dobro oblikovan PDF fajl, a da ne bude problema prilikom konvertovanja, kao što su, na primer, moji problemi - ne možete pisati na srpskom u komentarima izvornog koda, preduge linije se ne prelome, već se obrezuju i druge sitne poteškoće. Uputstvo će omogućiti brzo podešavanje konvertera. md2pdf ne previše ulazeći kako to funkcioniše. Skripta za manje-više automatsku instalaciju ispod u odgovarajućem odeljku.

Moj primer TeX šablona za konverziju koristi paket fontova PSCyr, koji uključuje podršku za Microsoft fontove, a to je Times New Roman. Takvi su zahtevi za diplomu po GOST-u. Ako znate, možete modifikovati šablon prema svojim potrebama. U mom uputstvu moraćete prvo malo da se pomučite sa podešavanjem PSCyr u TexLive. Podešavanje se vrši u distribuciji Linux Mint Mate, za druge distribucije, možda ćete morati da potražite standardne foldere paketa TexLive za vaš sistem.

Instalacija TexLive

Naravno, moguće je instalirati samo potrebne delove ovog paketa. Ali lično mi je bilo iskreno dosadno tražiti minimalno potrebnu radnu instalaciju. Da bi sve radilo kako treba, instaliramo ceo paket TexLive. Zove se texlive-full i teži nešto više od 2 gigabajta, imajte ovo na umu. Izvršite komandu:

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

Nakon prilično duge instalacije možemo preći na sledeću tačku.

Instalacija konvertera Pandoc

Pandoc je paket za Linux koji omogućava pretvaranje nekih tekstualnih formata u druge. Ima mnogo zanimljivih mogućnosti, sa kojima se možete upoznati sami na internetu. Nas zanima samo mogućnost pretvaranja markdown fajla u PDF. Proverićemo da li je Pandoc instaliran i ako nije, onda ćemo ga instalirati. Na primer ovako:

user@hostname:~$ dpkg -s pandoc

Ako u izlazu piše da nije instaliran - instaliramo:

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

Instalacija paketa PSCyr za TexLive

Za početak je potrebno preuzeti PSCyr. Za sada je još uvek dostupan na ovoj linku, če ob branju tega članka iz kakršnega koli razloga ni dostopno, se ne obupajte, enostavno ga je mogoče najti skupaj z navodili za namestitev, če v Googlu vpišete nekaj takega kot „Namestitev PsCyr texlive“. Če je dostopno, pa je to za vas lažje, prenesite in domnevamo, da ste razpakirali arhiv v domači mapo, tako da pot do mape, ki je vsebovana v arhivu, izgleda kot ~\/PSCyr. Potem odprite Terminal in zaporedno izvedite ukaze:

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

Nato ugotovimo, kje se nahaja lokalni katalog texmf. Izvedemo ukaz:

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

Verjetno je, da je ta katalog pri vas — /usr/local/share/texmf/, in potem izvedemo:

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

Lahko pa se ne mučite in izvedete ukaz, ki bo kopiral v mapo texmf kjer koli že je:

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

Pisave PSCyr so nameščene, povežemo jih v TexLive:

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

LaTeX predloga za pretvorbo md2pdf

Ne bom opisoval, kako je ta predloga natančno nastavljena, temveč jo bom preprosto predstavil pod spojlerjem brez posebnih razlag. Dovolj je reči, da je nastavljena dovolj dobro, vsaj obdelava besedil z velikim številom izvorne kode. Če vas ne zadostujejo velikosti zamikov, razmiki med vrsticami, pomanjkanje številčenja poglavij in podpoglavij, potem menim, da je to dovolj enostavno poiskati na internetu s vprašanje „kako v LaTeXu narediti…“ in nato vaša potreba. Če ni povsem jasno, pišite v komentarje, poskusil bom razumeti lastne nastavitve izpred 4 let in razložiti, katera vrstica predloge za kaj odgovarja. Za zdaj pa bom opisal, kako sem to naredil na svojem računalniku, vi pa ste svobodni, da ponovite ali prilagodite zase.

Ustvarimo datoteko template.tex v imeniku /usr/share/texlive/:

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

Določimo ji pravice za branje:

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

odprt pod root in vanj prilepimo vsebino, skrito pod spodnjim spojlerjem:

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

Vsebina predloge \/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}

Zapisujemo datoteku /usr/share/texlive/template.tex i pišemo skriptu koja će konvertovati Markdown datoteku u PDF, stvarajući u istoj fascikli datoteku sa imenom Markdown datoteke sa sufiksom .pdf, to jest nakon konverzije filename.md u fascikli će se pojaviti filename.md.pdf. Nazvaćemo skriptu md2pdf i staviti je na put /usr/bin. Izvršićemo naredbe redom:

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

U 4. liniji je zapravo navedena komanda za konvertovanje. Obratite pažnju na —from=markdown_githubGitHub različica Markdown je unazad kompatibilna s originalnim Markdownom, tako da, če je vaš tekst napisan v njem, vam ni treba skrbeti. Če je vaš MD datoteka napisana v specifičnem dialektu Markdown, preberite priročnik za Pandoc (man pandoc), prepričajte se, da vaša implementacija to podpira, in jo po potrebi prilagodite. /usr/bin/md2pdf при необходимости.

Skripta za bolj ali manj avtomatično namestitev

Če vam ni preveč do nastavljanja, in imate distribucijo podobno Ubuntuju, lahko poskusite ustvariti skripto s vsebino, skrito pod spoilerjem, in verjetno se bo vse namestilo samo; edino, TeX predloga, objavljena pod zgornjim spoilerjem, jo boste morali sami skopirati na pravo mesto. Odprite Terminal in izvedite:

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

Nato jo napolnite z naslednjo vsebino:

Vsebina skripte $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

Zaženite jo z ukazom:

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

Ne pozabite, da /usr/share/texlive/template.tex morate napolniti z vsebino, navedeno v razdelku "LaTeX predloga za pretvorbo md2pdf".

Uporaba md2pdf

Preprosto odprite mapo z Markdown datoteko (some_file.md) v Terminalu in izvedite ukaz:

user@hostname:~$ md2pdf some_file.md

Kot rezultat bo v mapi nastala datoteka some_file.md.pdf.

Zaključek

Na osnovi opisanega metoda lahko ustvarite katerikoli stil PDF datotek, prav tako lahko pretvarjate namesto md druge formate, vse, ki jih podpira Pandoc. Upam, da bo enkrat ta navodila koristila 3 in pol ljudem.

Izvor: habr.com

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster