Soluzione markdown2pdf già pronta con codice sorgente per Linux

prefazione

Markdown è un ottimo modo per scrivere un breve articolo, e talvolta un bel po' di testo, con una semplice formattazione in corsivo e grassetto. Markdown è utile anche per scrivere articoli con codice sorgente incluso. Ma a volte vuoi ballare senza perdere, ballare con un tamburello per trasformarlo in un normale file PDF ben formato e in modo che non ci siano problemi durante la conversione, cosa che, ad esempio, ho avuto: non puoi scrivere in russo in i commenti del codice sorgente, le righe troppo lunghe non vengono trasferite, ma tagliate e altri problemi minori. Le istruzioni ti permetteranno di configurare rapidamente il convertitore md2pdf senza capire veramente come funziona. Lo script per un'installazione più o meno automatica è sotto nell'apposita sezione.

Il mio modello TeX di esempio per la conversione utilizza il pacchetto di font PSCyr, che include il supporto per i font Microsoft, vale a dire Times New Roman. C'erano tali requisiti per un diploma secondo GOST. Se sai come fare, puoi modificare il modello in base alle tue esigenze. Secondo le mie stesse istruzioni, dovrai prima scherzare con l'impostazione PSCyr in TexLive. L'installazione viene eseguita nella distribuzione Linux Mint Mate, per altre distribuzioni potresti dover cercare su Google le cartelle dei pacchetti TexLive standard per il tuo sistema.

Installazione di TexLive

Naturalmente, puoi installare solo le parti necessarie di questo pacchetto. Ma personalmente, ero francamente troppo pigro per cercare l'installazione funzionante minima necessaria. Per assicurarti che tutto funzioni, installa l'intero pacchetto TexLive. È chiamato texlive-pieno e pesa poco più di 2 gigabyte, tieni presente questo fatto. Eseguiamo il comando:

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

Dopo un'installazione sufficientemente lunga, puoi procedere all'elemento successivo.

Installazione del convertitore Pandoc

Pandoc è un pacchetto Linux che ti consente di convertire alcuni formati di testo in altri. Ha molte caratteristiche interessanti che puoi trovare su Internet. Siamo interessati solo alla possibilità di convertire un file markdown in PDF. Controlla se Pandoc è installato e, in caso contrario, installalo. Ad esempio in questo modo:

user@hostname:~$ dpkg -s pandoc

Se l'output dice che non è installato, installa:

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

Installazione del pacchetto PSCyr per TexLive

Per prima cosa devi scaricare PSCyr. Per ora è ancora disponibile a questo collegamento, se al momento della lettura dell'articolo non è disponibile per qualche motivo, non disperare, è facile trovarlo insieme alle istruzioni di installazione digitando qualcosa come "Installazione di PsCyr texlive" in Google. Se è disponibile, allora è più facile per te, scarica e supponiamo che tu abbia decompresso l'archivio nella tua cartella home e quindi il percorso della cartella contenuta nell'archivio è simile ~/PSCir. Quindi vai al Terminale ed esegui i seguenti 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.map

Quindi, scopri dove si trova la directory locale texmf. Eseguiamo il comando:

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

Molto probabilmente hai questa directory - /usr/local/condividi/texmf/, e quindi facciamo:

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

Bene, o non puoi preoccuparti ed eseguire un comando che verrà copiato in una cartella texmf dovunque lei sia:

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

Font PSCyr installati, connettiti a TexLive:

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

Modello LaTeX per la conversione md2pdf

Non descriverò esattamente come è configurato questo modello e lo fornirò semplicemente sotto lo spoiler senza molte spiegazioni. Basti dire che è ben configurato, almeno in termini di come gestisce i testi con molto codice sorgente. Se non sei soddisfatto della dimensione dei rientri, dell'interlinea, della mancanza di numerazione di sezioni e sottosezioni, allora secondo me è abbastanza facile cercare su Google la domanda su Internet "come farlo in Latex ..." e allora il tuo bisogno. Se non è del tutto chiaro, scrivi nei commenti, cercherò di approfondire le mie impostazioni 4 anni fa e descrivere quale riga del modello è responsabile di cosa. Nel frattempo, scriverò come l'ho fatto sul mio PC e sei libero di ripeterlo o modificarlo da solo.

Crea un file modello.tex nel catalogo /usr/condividi/texlive/:

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

Dagli i permessi di lettura:

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

aprilo sotto la radice e incolla il contenuto nascosto sotto lo spoiler qui sotto:

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

Contenuto 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}

Salvataggio del file /usr/share/texlive/template.tex e scrivere uno script che convertirà il file Makrdown in PDF, creando nella stessa cartella un file chiamato file Markdown con il prefisso .pdf, cioè dopo la conversione nomefile.md apparirà nella cartella. nomefile.md.pdf. Chiamiamo lo script md2pdf e mettiti in cammino / Usr / bin. Eseguiamo i comandi in sequenza:

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 riga contiene effettivamente il comando di conversione. prestare attenzione a --from=markdown_github. La versione GitHub di Markdown è retrocompatibile con il Markdown originale, quindi se il tuo testo è scritto al suo interno, non devi preoccuparti. Se il tuo file MD è scritto in uno specifico dialetto Markdown, leggi il manuale Pandoc (man pandoc), assicurati che la tua implementazione sia supportata da esso e modifica /usr/bin/md2pdf se necessario.

Script per installazione più o meno automatica

Se non vuoi davvero configurare nulla e hai una distribuzione simile a Ubuntu, puoi provare a creare uno script con i contenuti nascosti sotto lo spoiler e molto probabilmente tutto si installerà da solo, l'unica cosa è, copia il modello TeX pubblicato sotto lo spoiler sopra a dove hai bisogno di te stesso. Apri Terminale ed esegui:

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

Quindi riempilo con il seguente contenuto:

Il 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/md2pdf

Eseguilo con il comando:

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

Non dimenticare quello /usr/share/texlive/template.tex deve essere compilato come indicato nella sezione "Modello LaTeX per la conversione md2pdf" contenuto.

Utilizzando md2pdf

Basta aprire la cartella con il file Markdown (qualche_file.md) nel Terminale ed esegui il comando:

user@hostname:~$ md2pdf some_file.md

Di conseguenza, un file apparirà nella cartella qualche_file.md.pdf.

conclusione

Sulla base del metodo descritto, puoi creare qualsiasi stile di file PDF, puoi anche convertire altri formati invece di md, qualsiasi supportato da Pandoc. Oserei sperare che un giorno questa istruzione sarà utile a 3 persone e mezzo.

Fonte: habr.com

Aggiungi un commento