Solució de markdown2pdf preparada amb codi font per a Linux

Prefaci

Markdown és una manera fantàstica d'escriure un article breu i, de vegades, molt de text, amb un format senzill en cursiva i en negreta. Markdown també és bo per escriure articles amb codi font inclòs. Però de vegades voleu ballar sense pèrdues amb un tamborí per avançar-lo en un fitxer PDF normal i ben format, i perquè no hi hagi problemes durant la conversió, que, per exemple, vaig tenir - no podeu escriure en rus en els comentaris del codi font, les línies massa llargues no es transfereixen, però es tallen i altres problemes menors. Les instruccions us permetran configurar ràpidament el convertidor md2pdf sense entendre realment com funciona. L'script per a una instal·lació més o menys automàtica es troba a continuació a la secció corresponent.

La meva plantilla TeX de mostra per a la conversió utilitza el paquet de fonts PSCyr, que inclou suport per a tipus de lletra de Microsoft, és a dir Times New Roman. Hi havia aquests requisits per obtenir un diploma segons GOST. Si sabeu com, podeu modificar la plantilla per adaptar-la a les vostres necessitats. Segons les meves instruccions, primer haureu de jugar amb la configuració PSCyr a TexLive. La configuració es fa a la distribució Linux Mint Mate, per a altres distribucions és possible que hàgiu de buscar a Google les carpetes estàndard del paquet TexLive per al vostre sistema.

Instal·lant TexLive

Per descomptat, només podeu instal·lar les parts necessàries d'aquest paquet. Però personalment, era francament massa mandrós per buscar la instal·lació de treball mínima necessària. Per assegurar-vos que tot funciona, instal·leu tot el paquet TexLive. Es diu texlive-full i pesa una mica més de 2 gigabytes, tingueu en compte aquest fet. Executem l'ordre:

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

Després d'una instal·lació prou llarga, podeu passar a l'element següent.

Instal·lació del convertidor Pandoc

Pandoc és un paquet Linux que permet convertir alguns formats de text a altres. Té moltes funcions interessants que podeu trobar a Internet. Només ens interessa la possibilitat de convertir un fitxer de reducció a PDF. Comproveu si Pandoc està instal·lat i, si no, instal·leu-lo. Per exemple com aquest:

user@hostname:~$ dpkg -s pandoc

Si la sortida diu que no està instal·lat, instal·leu:

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

Instal·lant el paquet PSCyr per a TexLive

Primer heu de descarregar PSCyr. De moment encara està disponible en aquest enllaç, si en el moment de llegir l'article no està disponible per algun motiu, no us desespereu, és fàcil trobar-lo juntament amb les instruccions d'instal·lació escrivint alguna cosa com "Instal·lant PsCyr texlive" a Google. Si està disponible, us serà més fàcil, descarregueu-lo i assumirem que heu desempaquetat l'arxiu a la vostra carpeta d'inici i, per tant, el camí a la carpeta que conté l'arxiu sembla ~/PSCyr. A continuació, aneu al terminal i executeu les ordres següents en seqüència:

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

A continuació, esbrineu on es troba el directori local textmf. Executem l'ordre:

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

El més probable és que tingueu aquest directori - /usr/local/share/texmf/, i després fem:

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

Bé, o no us podeu molestar i executar una ordre que copiarà a una carpeta textmf sigui on sigui:

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

Fonts PSCyr instal·lades, connecteu-vos a TexLive:

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

Plantilla LaTeX per a la conversió de md2pdf

No descriuré exactament com està configurada aquesta plantilla, i simplement la donaré sota l'aleró sense gaire explicació. N'hi ha prou amb dir que està ben configurat, almenys pel que fa a com gestiona textos amb molt de codi font. Si no esteu satisfet amb la mida de les sagnies, l'interlineat, la manca de numeració de seccions i subseccions, al meu entendre és bastant fàcil buscar a Google la pregunta a Internet "com fer-ho en làtex ..." i llavors la teva necessitat. Si no està gens clar, escriu als comentaris, intentaré aprofundir en la meva pròpia configuració fa 4 anys i descriure quina línia de la plantilla és responsable de què. Mentrestant, aniré anotant com ho vaig fer al meu ordinador, i podeu repetir-ho o modificar-lo vosaltres mateixos.

Creeu un fitxer template.tex al catàleg /usr/share/texlive/:

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

Doneu-li permisos de lectura:

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

obriu-lo sota l'arrel i enganxeu-hi el contingut amagat sota l'aleró següent:

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

Contingut de la plantilla /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}

Desant el fitxer /usr/share/texlive/template.tex i escriu un script que convertirà el fitxer Makrdown a PDF, creant a la mateixa carpeta un fitxer anomenat fitxer Markdown amb el prefix .pdf, és a dir, després de la conversió. nomfitxer.md apareixerà a la carpeta. nomfitxer.md.pdf. Anem a cridar el guió md2pdf i posar en camí / Usr / bin. Executem les ordres en seqüència:

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

La quarta línia conté realment l'ordre de conversió. para atenció a --from=markdown_github. La versió de GitHub de Markdown és compatible cap enrere amb el Markdown original, de manera que si hi ha escrit el vostre text, no us haureu de preocupar. Si el vostre fitxer MD està escrit en un dialecte específic de Markdown, llegiu el manual de Pandoc (man pandoc), assegureu-vos que la vostra implementació sigui compatible amb ella i ajusteu-la /usr/bin/md2pdf si és necessari.

Script per a una instal·lació més o menys automàtica

Si realment no voleu configurar res i teniu una distribució semblant a l'Ubuntu, podeu provar de crear un script amb els continguts amagats sota l'spoiler i, molt probablement, tot s'instal·larà, l'única cosa és copiar. la plantilla TeX publicada a l'spoiler de dalt on us necessiteu. Obriu el terminal i executeu:

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

A continuació, ompliu-lo amb el següent contingut:

El contingut de l'script $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

Executeu-lo amb l'ordre:

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

No ho oblidis /usr/share/texlive/template.tex s'ha d'omplir tal com s'indica a l'apartat "Plantilla LaTeX per a la conversió de md2pdf» contingut.

Utilitzant md2pdf

Només cal que obriu la carpeta amb el fitxer Markdown (algun_fitxer.md) al terminal i executeu l'ordre:

user@hostname:~$ md2pdf some_file.md

Com a resultat, apareixerà un fitxer a la carpeta algun_fitxer.md.pdf.

Conclusió

Segons el mètode descrit, podeu crear qualsevol estil de fitxers PDF, també podeu convertir altres formats en lloc de md, qualsevol compatible amb Pandoc. M'atreveixo a esperar que algun dia aquesta instrucció sigui útil a 3 persones i mitja.

Font: www.habr.com

Afegeix comentari