Pripravljena rešitev markdown2pdf z izvorno kodo za Linux

Predgovor

Markdown je odličen način za pisanje kratkega članka in včasih kar veliko besedila s preprostim poševnim in krepkim oblikovanjem. Markdown je dober tudi za pisanje člankov z vključeno izvorno kodo. Včasih pa hočeš brez izgube, zaplesati s tamburino, da jo prehiti v navadno, dobro oblikovano datoteko PDF in da ne bo težav pri pretvorbi, kar sem imel na primer jaz - v ruščini ne moreš pisati komentarji izvorne kode, predolge vrstice niso prenesene, ampak odrezane in druge manjše težave. Navodilo vam bo omogočilo hitro nastavitev pretvornika md2pdf ne da bi zares razumel, kako deluje. Skript za bolj ali manj samodejno namestitev je spodaj v ustreznem razdelku.

Moja vzorčna predloga TeX za pretvorbo uporablja paket pisav PSCyr, ki vključuje podporo za Microsoftove pisave, in sicer Times New Roman. Takšne zahteve so bile za diplomo po GOST. Če veste kako, lahko predlogo spremenite tako, da ustreza vašim potrebam. V mojih navodilih se boste morali najprej poigrati z nastavitvijo PSCyr v TexLive. Nastavitev se izvede v distribuciji Linux Mint Mate, za druge distribucije boste morda morali v Googlu poiskati standardne mape paketov TexLive za vaš sistem.

Namestitev TexLive

Seveda lahko namestite samo potrebne dele tega paketa. Toda osebno sem bil odkrito prelen, da bi iskal minimalno potrebno delujočo namestitev. Če želite zagotoviti, da vse deluje, namestite celoten paket TexLive. Se imenuje texlive-poln in tehta nekaj več kot 2 gigabajta, imejte to dejstvo v mislih. Izvedemo ukaz:

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

Po dovolj dolgi namestitvi lahko nadaljujete z naslednjim elementom.

Namestitev pretvornika Pandoc

Pandoc je paket za Linux, ki omogoča pretvorbo nekaterih formatov besedila v druge. Ima veliko zanimivih funkcij, ki jih lahko najdete sami na internetu. Zanima nas le možnost pretvorbe markdown datoteke v PDF. Preverite, ali je Pandoc nameščen in če ni, ga namestite. Na primer takole:

user@hostname:~$ dpkg -s pandoc

Če izhod pravi, da ni nameščen, namestite:

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

Namestitev paketa PSCyr za TexLive

Najprej morate prenesti PSCyr. Zaenkrat je še na voljo pri tem povezava, če v času branja članka iz nekega razloga ni na voljo, ne obupajte, skupaj z navodili za namestitev ga je enostavno najti tako, da v Google vnesete nekaj takega kot »Namestitev PsCyr texlive«. Če je na voljo, potem je lažje za vas, prenesite in domnevali bomo, da ste arhiv razpakirali v domačo mapo in tako pot do mape v arhivu izgleda takole ~/PSCyr. Nato pojdite na terminal in zaporedoma izvedite naslednje ukaze:

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

Nato ugotovite, kje se nahaja lokalni imenik texmf. Izvedemo ukaz:

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

Najverjetneje imate ta imenik - /usr/local/share/texmf/, nato pa naredimo:

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

No, ali pa se ne morete truditi in zagnati ukaza, ki bo kopiral v mapo texmf kjerkoli že je:

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

Pisave PSCyr nameščene, povežite se s TexLive:

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

Predloga LaTeX za pretvorbo md2pdf

Ne bom natančno opisal, kako je ta predloga konfigurirana, in jo bom preprosto podal pod spojler brez posebne razlage. Dovolj je reči, da je dobro konfiguriran, vsaj glede tega, kako obravnava besedila z veliko izvorne kode. Če niste zadovoljni z velikostjo alinej, razmikom med vrsticami, pomanjkanjem oštevilčevanja razdelkov in pododdelkov, potem je po mojem mnenju zelo enostavno poguglati vprašanje na internetu "kako to narediti v Lateksu ..." in potem tvoja potreba. Če sploh ni jasno, napišite v komentarje, poskusil se bom poglobiti v svoje nastavitve pred 4 leti in opisati, katera vrstica predloge je odgovorna za kaj. V tem času bom zapisal, kako sem to naredil na svojem računalniku, vi pa lahko ponovite ali spremenite sami.

Ustvarite datoteko template.tex v katalogu /usr/share/texlive/:

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

Dajte mu dovoljenja za branje:

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

odprite ga pod root in vanj prilepite 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}

Shranite datoteko /usr/share/texlive/template.tex in napišite skript, ki bo pretvoril datoteko Makrdown v PDF, pri čemer bo v isti mapi ustvaril datoteko, imenovano datoteka Markdown s predpono .pdf, to je po pretvorbi ime datoteke.md se prikaže v mapi. ime datoteke.md.pdf. Pokličimo scenarij md2pdf in dal na pot / usr / bin. Izvajajmo ukaze v zaporedju:

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

Četrta vrstica dejansko vsebuje ukaz za pretvorbo. Bodi pozoren na --from=markdown_github. GitHubova različica Markdown je nazaj združljiva z originalnim Markdownom, tako da vam ni treba skrbeti, če je vaše besedilo napisano v njej. Če je vaša datoteka MD napisana v določenem narečju Markdown, preberite priročnik Pandoc (man pandoc), se prepričajte, da vašo izvedbo podpira, in prilagodite /usr/bin/md2pdf če je potrebno.

Skripta za bolj ali manj samodejno namestitev

Če res ne želite ničesar konfigurirati in imate Ubuntu podobno distribucijo, lahko poskusite ustvariti skript z vsebino skrito pod spojlerjem in najverjetneje se bo vse namestilo samo od sebe, edina stvar je, kopirajte predlogo TeX, objavljeno pod zgornjim spojlerjem, kjer je to potrebno. Odprite terminal in zaženite:

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

Nato ga napolnite z naslednjo vsebino:

Vsebina skripta $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 ga z ukazom:

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

Ne pozabite na to /usr/share/texlive/template.tex je treba izpolniti, kot je navedeno v razdelku "Predloga LaTeX za pretvorbo md2pdf»vsebina.

Uporaba md2pdf

Samo odprite mapo z datoteko Markdown (nekaj_datoteke.md) v terminalu in zaženite ukaz:

user@hostname:~$ md2pdf some_file.md

Posledično se bo v mapi pojavila datoteka nekaj_datoteke.md.pdf.

Zaključek

Na podlagi opisane metode lahko sestavite poljuben slog datotek PDF, namesto md lahko pretvorite tudi druge formate, katere podpira Pandoc. Upam si upati, da bo nekoč to navodilo koristilo 3 osebam in pol.

Vir: www.habr.com

Dodaj komentar