Soluție gata făcută markdown2pdf cu cod sursă pentru Linux

Prefață

Markdown este o modalitate excelentă de a scrie un articol scurt și, uneori, destul de mult text, cu formatare cursiv și aldine. Markdown este, de asemenea, bun pentru a scrie articole cu codul sursă inclus. Dar uneori doriți să dansați fără pierderi cu o tamburină pentru a o depăși într-un fișier PDF obișnuit, bine format și astfel încât să nu existe probleme în timpul conversiei, ceea ce, de exemplu, am avut - nu puteți scrie în rusă în comentariile codului sursă, liniile prea lungi nu sunt transferate, ci tăiate și alte probleme minore. Instrucțiunea vă va permite să configurați rapid convertorul md2pdf fara a intelege cu adevarat cum functioneaza. Scriptul pentru o instalare mai mult sau mai puțin automată este mai jos în secțiunea corespunzătoare.

Exemplul meu de șablon TeX pentru conversie utilizează pachetul de fonturi PSCyr, care include suport pentru fonturile Microsoft, și anume Times New Roman. Au existat astfel de cerințe pentru o diplomă conform GOST. Dacă știți cum, puteți modifica șablonul pentru a se potrivi nevoilor dvs. În propriile mele instrucțiuni, va trebui mai întâi să te prostești cu setarea PSCyr din TexLive. Configurarea se face în distribuția Linux Mint Mate, pentru alte distribuții poate fi necesar să căutați pe Google folderele standard de pachete TexLive pentru sistemul dumneavoastră.

Instalarea TexLive

Desigur, puteți instala doar părțile necesare ale acestui pachet. Dar personal, mi-a fost sincer prea lene să caut instalația de lucru minimă necesară. Pentru a vă asigura că totul funcționează, instalați întregul pachet TexLive. Se numeste texlive-full și cântărește puțin mai mult de 2 gigaocteți, țineți cont de acest fapt. Executăm comanda:

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

După o instalare suficient de lungă, puteți trece la următorul articol.

Instalarea Pandoc Converter

Pandoc este un pachet Linux care vă permite să convertiți unele formate de text în altele. Are o mulțime de caracteristici interesante pe care le puteți găsi pe Internet. Suntem interesați doar de posibilitatea de a converti un fișier de reducere în PDF. Verificați dacă Pandoc este instalat și dacă nu, instalați-l. De exemplu astfel:

user@hostname:~$ dpkg -s pandoc

Dacă rezultatul spune că nu este instalat, instalați:

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

Instalarea pachetului PSCyr pentru TexLive

Mai întâi trebuie să descărcați PSCyr. Deocamdată este încă disponibil la aceasta legătură, dacă în momentul citirii articolului nu este disponibil din anumite motive, nu disperați, este ușor să îl găsiți împreună cu instrucțiunile de instalare tastând ceva de genul „Instalarea PsCyr texlive” în Google. Dacă este disponibil, atunci vă este mai ușor, descărcați și vom presupune că ați despachetat arhiva în folderul dvs. de acasă și astfel calea către folderul conținut în arhivă arată ca ~/PSCyr. Apoi mergeți la Terminal și executați următoarele comenzi în secvență:

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

Apoi, aflați unde se află directorul local texmf. Executăm comanda:

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

Cel mai probabil aveți acest director - /usr/local/share/texmf/, și apoi facem:

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

Ei bine, sau nu vă puteți deranja și rula o comandă care va copia într-un folder texmf oriunde ar fi ea:

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

Fonturile PSCyr instalate, conectați-vă la TexLive:

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

Șablon LaTeX pentru conversia md2pdf

Nu voi descrie exact cum este configurat acest șablon și îl voi da pur și simplu sub spoiler fără prea multe explicații. Este suficient să spunem că este bine configurat, cel puțin în ceea ce privește modul în care gestionează textele cu mult cod sursă. Dacă nu sunteți mulțumit de dimensiunea indentărilor, spațierea liniilor, lipsa numerotării secțiunilor și subsecțiunilor, atunci, în opinia mea, este destul de ușor să căutați pe google întrebarea „cum se face în Latex ...” și atunci nevoia ta. Dacă nu este deloc clar, scrieți în comentarii, voi încerca să mă aprofundez în propriile mele setări acum 4 ani și să descriu ce linie a șablonului este responsabilă pentru ce. Între timp, voi scrie cum am procedat pe computerul meu și sunteți liber să îl repetați sau să îl modificați singur.

Creați un fișier șablon.tex în catalog /usr/share/texlive/:

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

Da-i permisiuni de citire:

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

deschideți-l sub rădăcină și lipiți în el conținutul ascuns sub spoilerul de mai jos:

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

Conținutul șablonului /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}

Salvarea fișierului /usr/share/texlive/template.tex și scrieți un script care va converti fișierul Makrdown în PDF, creând în același folder un fișier numit fișier Markdown cu prefixul .pdf, adică după conversie filename.md va apărea în folder. filename.md.pdf. Să numim scenariul md2pdf și pus pe drum / usr / bin. Să executăm comenzile în secvență:

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

A 4-a linie conține de fapt comanda de conversie. fi atent la --from=markdown_github. Versiunea GitHub a Markdown este compatibilă cu versiunea originală Markdown, așa că dacă textul dvs. este scris în ea, nu trebuie să vă faceți griji. Dacă fișierul dvs. MD este scris într-un anumit dialect Markdown, atunci citiți manualul Pandoc (man pandoc), asigurați-vă că implementarea dvs. este susținută de aceasta și modificați /usr/bin/md2pdf daca este necesar.

Script pentru instalare mai mult sau mai puțin automată

Dacă nu doriți să configurați absolut nimic și aveți o distribuție asemănătoare Ubuntu, puteți încerca să creați un script cu conținutul ascuns sub spoiler și, cel mai probabil, totul se va instala singur, singurul lucru este să copiați șablonul TeX postat sub spoilerul de mai sus acolo unde aveți nevoie de ei înșiși. Deschideți terminalul și rulați:

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

Apoi umpleți-l cu următorul conținut:

Conținutul scriptului $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

Rulați-l cu comanda:

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

Nu uita asta /usr/share/texlive/template.tex trebuie completat așa cum este indicat în secțiunea „Șablon LaTeX pentru conversia md2pdf» conținut.

Folosind md2pdf

Doar deschideți folderul cu fișierul Markdown (some_file.md) în Terminal și rulați comanda:

user@hostname:~$ md2pdf some_file.md

Ca rezultat, un fișier va apărea în folder some_file.md.pdf.

Concluzie

Pe baza metodei descrise, puteți construi orice stil de fișiere PDF, puteți converti și alte formate în loc de md, oricare suportat de Pandoc. Îndrăznesc să sper că într-o zi această instrucțiune va fi utilă pentru 3 persoane și jumătate.

Sursa: www.habr.com

Adauga un comentariu