Solución prefabricada de markdown2pdf con código fonte para Linux

Prefacio

Markdown é unha boa forma de escribir un artigo breve, e ás veces bastante texto, cun formato sinxelo en cursiva e en negra. Markdown tamén é bo para escribir artigos co código fonte incluído. Pero ás veces queres bailar sen perdas cunha pandeireta para transformala nun ficheiro PDF normal e ben formado, e para que non haxa problemas durante a conversión, que, por exemplo, tiven - non podes escribir en ruso en os comentarios do código fonte, liñas demasiado longas non son transferidas, pero cortar e outros problemas menores. A instrución permitirache configurar rapidamente o conversor md2pdf sen entender realmente como funciona. O script para unha instalación máis ou menos automática está a continuación na sección correspondente.

O meu modelo TeX de mostra para a conversión usa o paquete de fontes PSCyr, que inclúe soporte para fontes de Microsoft, é dicir Times New Roman. Había tales requisitos para un diploma segundo GOST. Se sabes como, podes modificar o modelo para adaptalo ás túas necesidades. Nas miñas propias instrucións, primeiro terás que xogar coa configuración PSCyr en TexLive. A configuración realízase na distribución Linux Mint Mate, para outras distribucións pode que teñas que buscar en Google os cartafoles do paquete TexLive estándar para o teu sistema.

Instalación de TexLive

Por suposto, só pode instalar as partes necesarias deste paquete. Pero persoalmente, era francamente preguiceiro para buscar a instalación de traballo mínima necesaria. Para asegurarte de que todo funciona, instala o paquete TexLive completo. Chámase texlive-full e pesa algo máis de 2 gigabytes, teña en conta este feito. Executamos o comando:

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

Despois dunha instalación suficientemente longa, pode pasar ao seguinte elemento.

Instalación de Pandoc Converter

Pandoc é un paquete de Linux que permite converter algúns formatos de texto a outros. Ten moitas características interesantes que podes atopar en Internet. Só nos interesa a posibilidade de converter un ficheiro de rebaixa a PDF. Comproba se Pandoc está instalado e se non, instálao. Por exemplo así:

user@hostname:~$ dpkg -s pandoc

Se a saída indica que non está instalado, instale:

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

Instalando o paquete PSCyr para TexLive

Primeiro cómpre descargar PSCyr. Polo momento aínda está dispoñible neste Ligazón, se no momento de ler o artigo non está dispoñible por algún motivo, non se desespere, é fácil atopalo xunto coas instrucións de instalación escribindo algo así como "Instalación de PsCyr texlive" en Google. Se está dispoñible, é máis fácil para ti, descargue e suporemos que desempaquetou o arquivo no seu cartafol de inicio e, polo tanto, o camiño cara ao cartafol contido no arquivo parece ~/PSCyr. A continuación, vai ao Terminal e executa os seguintes comandos en secuencia:

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ón, descubra onde se atopa o directorio local texmf. Executamos o comando:

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

O máis probable é que teñas este directorio - /usr/local/share/texmf/, e despois facemos:

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

Ben, ou non podes molestarte e executar un comando que copiará nun cartafol texmf onde queira que estea:

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

Tipos de letra PSCyr instalados, conéctese a TexLive:

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

Modelo LaTeX para conversión md2pdf

Non describirei exactamente como está configurado este modelo, e simplemente darei debaixo do spoiler sen moita explicación. Abonda con dicir que está ben configurado, polo menos no que se refire a como manexa textos con moito código fonte. Se non estás satisfeito co tamaño das sangrías, o espazo entre liñas, a falta de numeración de seccións e subseccións, entón na miña opinión é bastante sinxelo buscar en Google a pregunta "como facelo en Latex ..." e entón a túa necesidade. Se non está nada claro, escribe nos comentarios, tentarei afondar na miña propia configuración hai 4 anos e describir que liña do modelo é responsable de que. Mentres tanto, escribirei como o fixen no meu PC, e podes repetilo ou modificalo por ti mesmo.

Crear un ficheiro modelo.tex no catálogo /usr/share/texlive/:

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

Dálle permisos de lectura:

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

ábreo baixo a raíz e pega o contido oculto baixo o spoiler que aparece a continuación:

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

Contido do modelo /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}

Gardando o ficheiro /usr/share/texlive/template.tex e escribe un script que converterá o ficheiro Makrdown en PDF, creando no mesmo cartafol un ficheiro chamado ficheiro Markdown co prefixo .pdf, é dicir, despois da conversión. nome de ficheiro.md aparecerá no cartafol. nome do ficheiro.md.pdf. Imos chamar ao guión md2pdf e poñerse no camiño / usr / bin. Imos executar os comandos en secuencia:

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 cuarta liña contén realmente o comando de conversión. prestar atención --from=markdown_github. A versión de GitHub de Markdown é compatible co Markdown orixinal, polo que se o teu texto está escrito nela, non tes que preocuparte. Se o seu ficheiro MD está escrito nun dialecto específico de Markdown, lea o manual de Pandoc (man pandoc), asegúrese de que a súa implementación é compatible con ela e axusta /usr/bin/md2pdf Se é necesario.

Script para a instalación máis ou menos automática

Se realmente non queres configurar nada e tes unha distribución semellante a Ubuntu, podes probar a crear un script cos contidos ocultos baixo o spoiler, e o máis probable é que todo se instale, o único é copiar. o modelo de TeX publicado baixo o spoiler anterior onde precisas. Abre o terminal e executa:

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

Despois éncheo co seguinte contido:

O contido do 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

Execútalo co comando:

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

Non o esquezas /usr/share/texlive/template.tex debe cubrirse segundo se indica no apartado "Modelo LaTeX para conversión md2pdf» contido.

Usando md2pdf

Só ten que abrir o cartafol co ficheiro Markdown (algún_arquivo.md) no Terminal e executa o comando:

user@hostname:~$ md2pdf some_file.md

Como resultado, aparecerá un ficheiro no cartafol algún_arquivo.md.pdf.

Conclusión

Segundo o método descrito, podes construír calquera estilo de ficheiros PDF, tamén podes converter outros formatos en lugar de md, calquera compatible con Pandoc. Atrévome a esperar que algún día esta instrución sexa útil a 3 persoas e media.

Fonte: www.habr.com

Engadir un comentario