Gotovo rješenje za markdown2pdf sa izvornim kodom za Linux

Predgovor

Markdown je odličan način za pisanje kratkog članka, a ponekad i dosta teksta, s jednostavnim kurzivom i podebljanim oblikovanjem. Markdown je također dobar za pisanje članaka s uključenim izvornim kodom. Ali ponekad poželite da bez gubitka, zaplešete uz tamburu da je prestignete u običan, dobro formiran PDF fajl, i da ne bude problema tokom konverzije, što sam, na primer, imao - ne možete pisati na ruskom na komentari izvornog koda, predugački redovi se ne prenose, već seku i drugi manji problemi. Upute će vam omogućiti da brzo postavite pretvarač md2pdf bez stvarnog razumijevanja kako to funkcionira. Skripta za manje-više automatsku instalaciju je ispod u odgovarajućem odjeljku.

Moj uzorak TeX šablona za konverziju koristi paket fontova PSCyr, koji uključuje podršku za Microsoft fontove, tj. Times New Roman. Postojali su takvi zahtjevi za diplomu prema GOST-u. Ako znate kako, možete modificirati predložak kako bi odgovarao vašim potrebama. U mojim vlastitim uputama, prvo ćete se morati zezati sa postavkom PSCyr u TexLiveu. Podešavanje je urađeno u Linux Mint Mate distribuciji, za druge distribucije možda ćete morati guglati standardne foldere TexLive paketa za vaš sistem.

Instaliranje TexLive

Naravno, možete instalirati samo neophodne dijelove ovog paketa. Ali lično, iskreno, bio sam previše lijen da tražim minimalnu potrebnu radnu instalaciju. Da biste bili sigurni da sve radi, instalirajte cijeli TexLive paket. To se zove texlive-full i teži nešto više od 2 gigabajta, imajte ovu činjenicu na umu. Izvršavamo naredbu:

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

Nakon dovoljno duge instalacije, možete preći na sljedeću stavku.

Instalacija Pandoc Convertera

Pandoc je Linux paket koji vam omogućava da neke tekstualne formate pretvorite u druge. Ima puno zanimljivih funkcija koje možete pronaći na internetu. Zanima nas samo mogućnost konverzije markdown datoteke u PDF. Provjerite je li Pandoc instaliran, a ako nije, instalirajte ga. Na primjer ovako:

user@hostname:~$ dpkg -s pandoc

Ako izlaz kaže da nije instaliran, instalirajte:

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

Instaliranje PSCyr paketa za TexLive

Prvo morate preuzeti PSCyr. Za sada je još uvijek dostupan na ovom mjestu link, ako u trenutku čitanja članka iz nekog razloga nije dostupan, ne očajavajte, lako ga je pronaći zajedno s uputama za instalaciju tako što ćete u Google upisati nešto poput “PsCyr texlive installation”. Ako je dostupna, onda vam je lakše, preuzmite i pretpostavit ćemo da ste arhivu raspakirali u svoju kućnu mapu i tako put do mape koja se nalazi u arhivi izgleda ovako ~/PSCyr. Zatim idite na Terminal i izvršite sljedeće naredbe u nizu:

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

Zatim saznajte gdje se nalazi lokalni imenik texmf. Izvršavamo naredbu:

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

Najvjerovatnije imate ovaj direktorij - /usr/local/share/texmf/, a onda radimo:

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

Pa, ili se ne možete truditi i pokrenuti naredbu koja će kopirati u mapu texmf gde god da je:

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

PSCyr fontovi su instalirani, povežite se na TexLive:

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

LaTeX šablon za md2pdf konverziju

Neću opisivati ​​tačno kako je ovaj šablon konfigurisan, već ću ga jednostavno dati ispod spojlera bez mnogo objašnjenja. Dovoljno je reći da je dobro konfigurisan, barem u smislu načina na koji obrađuje tekstove s puno izvornog koda. Ako niste zadovoljni veličinom uvlaka, razmakom između redova, nedostatkom numeracije odjeljaka i pododjeljaka, onda je po mom mišljenju prilično lako proguglati pitanje na internetu "kako to učiniti u latexu..." i onda vaša potreba. Ako uopće nije jasno, napišite u komentarima, pokušat ću se udubiti u vlastita podešavanja prije 4 godine i opisati koja je linija šablona za šta odgovorna. U međuvremenu ću napisati kako sam to uradio na svom računaru, a vi to možete sami ponoviti ili modifikovati.

Kreirajte fajl template.tex u katalogu /usr/share/texlive/:

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

Dajte mu dozvole za čitanje:

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

otvorite ga ispod korijena i u njega zalijepite sadržaj sakriven ispod spojlera:

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

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

Čuvanje datoteke /usr/share/texlive/template.tex i napišite skriptu koja će pretvoriti datoteku Makrdown u PDF, kreirajući u istoj mapi datoteku pod nazivom Markdown datoteka s prefiksom .pdf, odnosno nakon konverzije ime datoteke.md će se pojaviti u folderu. ime datoteke.md.pdf. Pozovimo skriptu md2pdf i stavite na put / usr / bin. Izvršimo 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

Četvrti red zapravo sadrži naredbu za konverziju. obratite pažnju na --from=markdown_github. GitHub verzija Markdowna je kompatibilna s originalnim Markdownom, tako da ako je vaš tekst napisan u njoj, ne morate brinuti. Ako je vaša MD datoteka napisana na određenom Markdown dijalektu, pročitajte priručnik za Pandoc (man pandoc), uvjerite se da je vaša implementacija podržana od njega i prilagodite /usr/bin/md2pdf ako je potrebno.

Skripta za manje-više automatsku instalaciju

Ako ne želite baš ništa da konfigurišete, a imate distribuciju nalik Ubuntu, možete pokušati da kreirate skriptu sa sadržajem skrivenim ispod spojlera i najverovatnije će se sve instalirati samo od sebe, jedino kopirajte TeX šablon postavljen ispod spojlera iznad tamo gdje vam je potrebno. Otvorite Terminal i pokrenite:

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

Zatim ga popunite sljedećim 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 naredbom:

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

Ne zaboravite to /usr/share/texlive/template.tex mora biti popunjen kako je navedeno u odjeljku "LaTeX šablon za md2pdf konverziju» sadržaj.

Korištenje md2pdf

Samo otvorite fasciklu sa datotekom Markdown (some_file.md) u terminalu i pokrenite naredbu:

user@hostname:~$ md2pdf some_file.md

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

zaključak

Na osnovu opisane metode, možete napraviti bilo koji stil PDF datoteka, također možete konvertirati druge formate umjesto md, bilo koji podržan od Pandoc-a. Usuđujem se da se nadam da će jednog dana ovo uputstvo biti korisno za 3 i po osobe.

izvor: www.habr.com

Dodajte komentar