Introduzione
Markdown è un ottimo modo per scrivere un breve articolo, e a volte anche un testo piuttosto lungo, con una formattazione semplice come corsivo e grassetto. Inoltre, Markdown è buono per scrivere articoli con inclusione di codice sorgente. Ma a volte si desidera convertire senza perdite, e senza complicazioni, in un normale file PDF ben formattato, e che non ci siano problemi durante la conversione, come ad esempio quelli che ho avuto io: non si possono scrivere commenti in russo nel codice sorgente, le righe troppo lunghe non vengono suddivise, ma tagliate, e altri piccoli problemi. Le istruzioni consentiranno di configurare rapidamente il convertitore md2pdf senza entrare troppo nel come funziona. Lo script per un'installazione più o meno automatica è di seguito nella sezione pertinente.
Il mio esempio di template TeX per la conversione utilizza il pacchetto di font PSCyr, che include il supporto per i font Microsoft, in particolare Times New Roman. Queste erano le richieste per il diploma secondo il GOST. Se sapete come fare, potete modificare il template secondo le vostre esigenze. Nelle mie istruzioni, dovrete prima sistemare la configurazione di PSCyr in TexLive. La configurazione viene eseguita nella distribuzione Linux Mint Mate; per altre distribuzioni, potrebbe essere necessario cercare le cartelle standard del pacchetto TexLive per il vostro sistema.
Installazione di TexLive
Naturalmente, si possono installare solo le parti necessarie di questo pacchetto. Ma personalmente mi è sembrato davvero noioso cercare un'installazione minima necessaria. Affinché tutto funzioni correttamente, installiamo l'intero pacchetto TexLive. Si chiama texlive-full e pesa poco più di 2 gigabyte, tenete presente questo fatto. Eseguiamo il comando:
user@hostname:~$ sudo apt install texlive-full -yDopo un'installazione piuttosto lunga, si può procedere al punto successivo.
Installazione del convertitore Pandoc
Pandoc è un pacchetto Linux che consente di convertire alcuni formati di testo in altri. Ha molte funzionalità interessanti, che potete esplorare autonomamente su Internet. A noi interessa solo la possibilità di convertire un file markdown in PDF. Verifichiamo se Pandoc è installato e, se non lo è, lo installeremo. Ad esempio:
user@hostname:~$ dpkg -s pandocSe nell'output risulta che non è installato, lo installiamo:
user@hostname:~$ sudo apt install pandoc -yInstallazione del pacchetto PSCyr per TexLive
Per prima cosa, è necessario scaricare PSCyr. Finora è ancora disponibile qui , se al momento della lettura dell'articolo non è disponibile per qualche motivo, non disperate, è facile trovarlo insieme alle istruzioni per l'installazione, digitando su Google qualcosa come "Installazione PsCyr texlive". Se è disponibile, è più semplice, scaricate e consideriamo che l'archivio sia stato estratto nella vostra cartella home e quindi il percorso verso la cartella contenuta nell'archivio è come ~/PSCyr. Adesso apriamo il Terminale ed eseguiamo i comandi in sequenza:
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.mapPoi scopriamo dove si trova la directory locale texmf. Eseguiamo il comando:
user@hostname:~$ kpsewhich -expand-var='$TEXMFLOCAL'Probabilmente questa directory è la vostra — /usr/local/share/texmf/, e quindi eseguiamo:
user@hostname:~$ sudo cp -R ./PSCyr/* /usr/local/share/texmf/Oppure si può anche semplificare e eseguire il comando che copierà nella cartella texmf doveunque essa sia:
user@hostname:~$ sudo cp -R ./PSCyr/* $(kpsewhich -expand-var='$TEXMFLOCAL')I font PSCyr sono stati installati, colleghiamoli in TexLive:
user@hostname:~$ sudo texhash
user@hostname:~$ updmap --enable Map=pscyr.map
user@hostname:~$ sudo mktexlsrModello LaTeX per la conversione md2pdf
Non entrerò nel dettaglio di come è impostato questo modello, ma lo riporterò in un spoiler senza molte spiegazioni. È sufficiente dire che è impostato abbastanza bene, almeno per come gestisce i testi con molto codice sorgente. Se non siete soddisfatti delle dimensioni degli indent, degli intervalli tra le righe, della mancanza di numerazione delle sezioni e sotto-sezioni, penso sia abbastanza facile cercare su internet la domanda "come fare in Latex..." e poi farlo. Se ancora non è chiaro, scrivete nei commenti, cercherò di rientrare nelle mie impostazioni di quattro anni fa e di spiegare quale riga del modello fa cosa. Per ora, descriverò come ho fatto sul mio PC, e siete liberi di ripetere o modificare secondo le vostre preferenze.
Creiamo il file template.tex nella directory /usr/share/texlive/:
user@hostname:~$ sudo touch /usr/share/texlive/template.texImpostiamo i diritti di lettura:
user@hostname:~$ sudo chmod 444 /usr/share/texlive/template.texapriamo come root e incolliamo il contenuto nascosto nello spoiler sottostante:
user@hostname:~$ sudo nano /usr/share/texlive/template.texContenuto del modello /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}Salviamo il file /usr/share/texlive/template.tex e scriviamo uno script che convertirà il file Markdown in PDF, creando nella stessa cartella un file con il nome del file Markdown con il suffisso .pdf, cioè dopo la conversione filename.md nella cartella apparirà filename.md.pdf. Chiamiamo lo script md2pdf e lo posizioniamo nel percorso /usr/bin. Eseguiamo le seguenti comandi:
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\/md2pdfNella quarta riga è indicato il comando di conversione. Fate attenzione a —from=markdown_github. La versione Markdown di GitHub è retrocompatibile con il Markdown originale, quindi se il tuo testo è scritto in esso, non devi preoccuparti. Se il tuo file MD è scritto in un dialetto specifico di Markdown, consulta il manuale di Pandoc (man pandoc), assicurati che la tua implementazione li supporti e apporta modifiche /usr/bin/md2pdf se necessario.
Script per un'installazione più o meno automatica
Se non hai voglia di configurare nulla, e hai una distribuzione simile a Ubuntu, puoi provare a creare uno script con il contenuto nascosto sotto lo spoiler, e probabilmente tutto si installerà da solo; l'unica cosa è che il modello TeX, presentato nello spoiler sopra, dovrai copiarlo tu dove necessario. Apri il Terminale ed esegui:
user@hostname:~$ cd
user@hostname:~$ touch installmd2pdf.shPoi riempi il file con il seguente contenuto:
Contenuto dello 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/md2pdfEseguilo con il comando:
user@hostname:~$ sudo bash $HOME/installmd2pdf.shRicorda che /usr/share/texlive/template.tex devi riempire il contenuto indicato nella sezione «Modello LaTeX per la conversione md2pdf».
Utilizzo di md2pdf
Apri semplicemente la cartella contenente il file Markdown (some_file.md) nel Terminale, e esegui il comando:
user@hostname:~$ md2pdf some_file.mdDi conseguenza, nella cartella apparirà un file some_file.md.pdf.
Conclusione
Basandoti sul metodo descritto, puoi creare qualsiasi tipo di stile di file PDF, puoi anche convertire formati diversi dal md, qualsiasi formato supportato da Pandoc. Spero che un giorno questa guida possa essere utile a 3,5 persone.
Fonte: habr.com
