Valmis lahendus markdown2pdf allika koodiga Linuxile

EessÔna

Markdown on suurepĂ€rane viis lĂŒhikese artikli kirjutamiseks, aga mĂ”nikord ka piisavalt mahuka teksti koostamiseks lihtsa vormindamisega, mis sisaldab kaldkirja ja rasvaseid fonte. Markdown sobib ka artiklite kirjutamiseks koos allikakoodiga. Kuid vahel on soov ilma kaotusteta ning keerutamiseta see tavapĂ€rasesse, hĂ€sti vormindatud PDF-faili ĂŒle kanda, et vĂ€ltida konversiooniga seotud probleeme, nagu olid mul — kommentaarides allikakoodis ei saa vene keeles kirjutada, liiga pikad read ei murru, vaid lĂ”igatakse Ă€ra, ja muid vĂ€ikseid probleeme. Juhend vĂ”imaldab kiirelt seadistada konverteri md2pdf mitte eriti sĂŒvenedes, kuidas see töötab. Skript enam-vĂ€hem automaatseks installimiseks on allolevas vastavas osas.

Minu nĂ€ide TeX-i malli konversiooniks kasutab PSCyr pakkumist, mis sisaldab Microsofti fontide tuge, sealhulgas Times New Roman. Sellised nĂ”uded diplomile GOST-i jĂ€rgi olid. Kui oskate, vĂ”ite mallid oma vajadustele kohandada. Minu juhendis tuleb esmalt tegutseda PSCyr seadistamisega TexLive'is. Seadistamine toimub Linux Mint Mate'i distributsioonis, teiste distributsioonide puhul tuleb vĂ”ib-olla googeldada TexLive'i paketi standardkaustasid teie sĂŒsteemi jaoks.

TexLive'i installimine

Muidugi on vÔimalik installida ainult vajalikud osad sellest paketist. Kuid isiklikult mul lihtsalt ei olnud meelt otsida minimaalset vajalikku tööinstallatsiooni. Et kÔik töö kindlalt toimiks, installime kogu TexLive'i pakketi. See nimetatakse texlive-full ja kaalub veidi rohkem kui 2 gigabaiti, pidage seda silmas. TÀidame kÀsu:

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

PÀrast piisavalt pikka installimist saame minna jÀrgmisesse punkti.

Pandoc'i konverteri installimine

Pandoc — Linuxi paket, mis vĂ”imaldab teisendada teatud tekstivormingud teistesse. Sellel on palju huvitavaid funktsioone, millega saate ise veebis tutvuda. Meid huvitab vaid markdown-faili teisendamine PDF-iks. Kontrollime, kas Pandoc on juba installitud ja kui ei, siis installime selle. NĂ€iteks nii:

user@hostname:~$ dpkg -s pandoc

Kui vĂ€ljundis on kirjas, et ei ole installitud — installime:

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

Paketi PSCyr installimine TexLive'ile

Esmalt tuleb alla laadida PSCyr. Praegu on see endiselt saadaval sellelt lingi kaudu, kui artikli lugemise hetkel see mingil pÔhjusel ei ole saadaval, Àrge heitke meelt, selle leidmine koos installatsioonijuhendiga ei ole keeruline, lihtsalt otsige Googlest midagi sellist nagu «PsCyr texlive installimine». Kui see on saadaval, on teil lihtsam, laadige alla ja eeldame, et olete arhivi oma kodukausta vÀlja pakkunud, seega nÀeb tee kausta, mis sisaldab arhivit, vÀlja nagu ~/PSCyr. Siis avame Terminali ja jÀrgemööda tÀidame kÀsud:

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

JÀtkame uurimist, kus asub kohalik kataloog texmf. TÀidame kÀsu:

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

TĂ”enĂ€oliselt on see kataloog teil — /usr/local/share/texmf/, ja siis tĂ€idame:

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

VÔi vÔite ka lihtsalt tÀita kÀsu, mis kopeerib sinna, texmf kus iganes see ka poleks:

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

PSCyr font on paigaldatud, ĂŒhendame TexLive'iga:

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

LaTeX mall md2pdf konverteerimiseks

Ma ei hakka kirjeldama, kuidas see mall tĂ€pselt seadistatud on, vaid toon selle lihtsalt spoilerite alla koos vĂ€heste selgitustega. Piisab, kui öelda, et see on hĂ€sti seadistatud, vĂ€hemalt kuidas see töötleb tekste, kus on palju algkoodi. Kui teid ei rahulda vahede suurus, rea kĂ”rgused, jaotiste ja alajaotiste numbri puudumine, siis minu arvates on piisavalt lihtne otsida internetist kĂŒsimust "kuidas Latexis teha..." ja edasi teie vajadus. Kui on tĂ€iesti arusaamatu, kirjutage kommentaaridesse, pĂŒĂŒan sĂŒveneda oma nelja aasta tagustesse seadistustesse ja selgitada, milline mallireaktsiooni rida mille jaoks vastutab. Praegu kirjeldan, kuidas tegin seda oma arvutis, ja te vĂ”ite vabalt korrata vĂ”i kohandada seda enda jaoks.

Loome faili template.tex kaustas /usr/share/texlive/:

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

Anname sellele lugemisÔigused:

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

Ava root Ôigustes ja kleebi sinna sisu, mis on peidetud allpool spoileris:

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

Malli sisu /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}

Salvestame faili /usr/share/texlive/template.tex ja kirjutame skripti, mis konverteerib Markdown faili PDF-ks, luues samasse kausta faili, mille nimi algab Markdown failiga ja millel on lÔppu .pdf, st pÀrast konversiooni filename.md kaustas ilmub filename.md.pdf. Nimetame skripti md2pdf ja paneme selle teele /usr/bin. Sooritame jÀrgnevalt kÀsud:

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. reatel on toodud konversioonikĂ€su. Pange tĂ€hele —from=markdown_github. GitHub'i Markdowni versioon on tagasisuunas ĂŒhilduv originaalse Markdowniga, seega kui teie tekst on kirjutatud sellel, ei ole pĂ”hjust muretseda. Kui teie MD-fail on kirjutatud spetsiifilises Markdowni murdes, siis lugege Pandoc'i kĂ€siraamatut (man pandoc), veenduge, et teie elluviimine on toetatud, ja vajadusel kohandage /usr/bin/md2pdf .

Skript suhteliselt automaatseks paigaldamiseks

Kui te ei soovi ĂŒldse seadistustega vaeva nĂ€ha ja kasutate Ubuntu-laadset distributsiooni, vĂ”ite proovida luua skripti, mille sisu on peidetud spoilerisse, ja tĂ”enĂ€oliselt paigaldatakse kĂ”ik automaatselt. Ainult TeX-mall, mis on ĂŒlalpool spoileris, peate ise vajalikku kohta kopeerima. Avage Terminal ja kĂ€ivitage:

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

SeejÀrel tÀitke see jÀrgmise sisuga:

Skripti sisu $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

KÀivitage see kÀsklusega:

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

Ärge unustage, et /usr/share/texlive/template.tex tuleb tĂ€ita peatĂŒkis „LaTeX mall md2pdf konverteerimiseks” mĂ€rgitud sisuga.

md2pdf kasutamine

Lihtsalt avage Markdown-faili kaust (some_file.md) Terminalis ja kÀivitage kÀsk:

user@hostname:~$ md2pdf some_file.md

Tulemusena ilmub kausta fail some_file.md.pdf.

KokkuvÔte

Kirjeldatud meetodil on vÔimalik luua igasuguseid PDF-failide stiile, samuti saab teisendada muid formaate, mis on Pandoci poolt toetatud. Loodan, et see juhend on kord kolmel ja poolel inimesele kasulik.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster