Gotovo rješenje markdown2pdf s izvorni kodom za Linux

Predgovor

Markdown je sjajan način za pisanje kratkog članka, a ponekad i dovoljno opsežnog teksta, s jednostavnim formatiranjem u obliku kurziva i podebljanog teksta. Također, Markdown je dobar za pisanje članaka s uključivanjem izvornog koda. No, ponekad želite pretvoriti ga u običan, dobro oblikovani PDF bez gubitaka i komplikacija prilikom konverzije, poput onih s kojima sam se susretao — ne možete pisati na ruskom u komentarima izvornog koda, premdu duge retke se ne prebacuju, već se preseku i druge sitne probleme. Ova uputa će vam omogućiti brzo postavljanje konvertera md2pdf ne ulazeći previše u to kako to funkcionira. Skripta za više manje automatsku instalaciju dolje u odgovarajućem odjeljku.

Moj primjer TeX predloška za konverziju koristi paket fontova PSCyr, koji uključuje podršku za Microsoft fontove, a to su Times New Roman. Takvi su bili zahtjevi za diplomu prema GOST-u. Ako znate, možete modificirati predložak prema svojim potrebama. U mojoj uputi, međutim, potrebno je prvo malo se malo pomučiti s postavkama PSCyr u TexLive. Postavke se vrše u distribuciji Linux Mint Mate, za druge distribucije, možda ćete morati potražiti standardne mape paketa TexLive za vaš sustav.

Instalacija TexLive

Naravno, možete instalirati samo potrebne dijelove ovog paketa. No, osobno mi je bilo iskreno lijeno tražiti minimalno potrebnu radnu instalaciju. Da bi sve točno radilo, instaliramo cijeli paket TexLive. Zove se texlive-full i težak je nešto više od 2 gigabajta, imajte to na umu. Izvršite sljedeću naredbu:

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

Nakon dovoljno dugog instaliranja, možemo preći na sljedeću točku.

Instalacija konvertera Pandoc

Pandoc je Linux paket koji omogućava pretvaranje nekih tekstualnih formata u druge. Ima mnogo zanimljivih mogućnosti, s kojima se možete sami upoznati na internetu. Nas zanima samo mogućnost pretvaranja markdown datoteke u PDF. Provjerimo je li Pandoc instaliran i ako nije, instaliramo ga. Na primjer ovako:

user@hostname:~$ dpkg -s pandoc

Ako u ispisu piše da nije instaliran — instaliramo:

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

Instalacija paketa PSCyr za TexLive

Za početak trebate preuzeti PSCyr. Za sada je još uvijek dostupan na ovoj vezi, ako u trenutku čitanja članka nije dostupna iz bilo kojeg razloga, nemojte očajavati, lako ju je pronaći zajedno s uputama za instalaciju, upisivanjem u Google nešto poput „Instalacija PsCyr texlive“. Ako je dostupna, onda vam je lakše, preuzmite ju i pretpostavimo da ste raspakirali arhivu u svoj domaći folder, pa tako putanja do foldera unutar arhive izgleda kao ~/PSCyr. Tada otvaramo Terminal i redom izvršavamo komande:

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

Dalje saznajemo gdje se nalazi lokalni direktorij texmf. Izvršavamo komandu:

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

Vjerojatno je taj direktorij kod vas — /usr/local/share/texmf/, pa onda izvršavamo:

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

Ili jednostavno možemo izvršiti komandu koja će kopirati u folder texmf gdje god da se nalazio:

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

Fontovi PSCyr su instalirani, povezujući u TexLive:

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

LaTeX predložak za konverziju md2pdf

Neću opisivati kako je ovaj predložak podešen, jednostavno ću ga navesti ispod spoiler-a bez dodatnih objašnjenja. Dovoljno je reći da je dobro podešen, barem kako obrađuje tekstove s puno izvorne koda. Ako niste zadovoljni veličinama usta, međurednim razmacima, nedostatkom numeracije poglavlja i podpoglavlja, mislim da je to lako pronaći pitanjem na internetu „kako u Latex napraviti…“, a onda vaša potreba. Ako vam nije jasno, pišite u komentarima, pokušat ću se prisjetiti vlastitih podešavanja prije 4 godine i objasniti koja linija predloška za što odgovara. U međuvremenu, opisat ću kako sam to napravio na svom računalu, a vi ste slobodni ponoviti ili modificirati to za sebe.

Kreiramo datoteku template.tex u direktoriju /usr/share/texlive/:

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

Postavljamo mu prava na čitanje:

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

otvaramo kao root i umetnemo u njega sadržaj skriven ispod spoiler-a dolje:

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

Sadržaj predloška /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}

Spremamo datoteku /usr/share/texlive/template.tex i pišemo skript koji će konvertirati Markdown datoteku u PDF, stvarajući u istoj mapi datoteku s nazivom Markdown datoteke s dodatkom .pdf, odnosno nakon konverzije filename.md u mapi će se pojaviti filename.md.pdf. Skript ćemo nazvati md2pdf i staviti ga na put /usr/bin. Izvršit ćemo redom sljedeće naredbe:

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. retku naznačena je naredba za konverziju. Obratite pozornost na —from=markdown_github. GitHub verzija Markdawn-a je unazad kompatibilna s originalnim Markdawn-om, tako da se ne trebate brinuti ako je vaš tekst napisan na njemu. Ako je vaš MD datoteka napisana na specifičnom dijalektu Markdawn-a, provjerite priručnik za Pandoc (man pandoc), uvjerite se da vaša implementacija podržava to, i ispravite /usr/bin/md2pdf ako je potrebno.

Skripta za više-manje automatsku instalaciju

Ako ne želite previše podešavati, a imate Ubuntu-sličnu distribuciju, možete pokušati stvoriti skriptu s sadržajem skrivenim pod sponom, i vjerojatno će se sve instalirati samo, jedino, TeX predložak, postavljen pod sponom iznad, kopirate gdje treba sami. Otvorite Terminal i izvršite:

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

Zatim ga ispunite ovim sadržajem:

Sadržaj 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

Pokrenite ga pomoću naredbe:

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

Ne zaboravite da /usr/share/texlive/template.tex morate ispuniti sadržajem navedenim u odjeljku „LaTeX predložak za konverziju md2pdf”.

Korištenje md2pdf

Jednostavno otvorite mapu s Markdown datotekom (some_file.md) u Terminals, i izvršite naredbu:

user@hostname:~$ md2pdf some_file.md

Kao rezultat, u mapi će se pojaviti datoteka some_file.md.pdf.

Zaključak

Na temelju opisane metode može se izgraditi bilo koji stil PDF datoteka, također se mogu konvertirati umjesto md drugi formati, svi podržani od strane Pandoc-a. Nadam se da će ova uputstva jednom zatrebati 3 i pol osobama.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster