Solución markdown2pdf lista para usar con código fuente para Linux

prefacio

Markdown es una excelente manera de escribir un artículo breve y, a veces, una gran cantidad de texto, con formato simple en cursiva y negrita. Markdown también es bueno para escribir artículos con código fuente incluido. Pero a veces quieres bailar sin pérdidas, bailar con una pandereta para convertirlo en un archivo PDF normal y bien formado, y para que no haya problemas durante la conversión, que, por ejemplo, tuve: no puedes escribir en ruso en los comentarios del código fuente, las líneas demasiado largas no se transfieren, sino que se cortan y otros problemas menores. La instrucción le permitirá configurar rápidamente el convertidor. md2pdf sin entender realmente cómo funciona. El script para una instalación más o menos automática se encuentra a continuación en la sección correspondiente.

Mi plantilla TeX de muestra para la conversión utiliza el paquete de fuentes PSCyr, que incluye compatibilidad con las fuentes de Microsoft, a saber Times New Roman. Había tales requisitos para un diploma según GOST. Si sabe cómo, puede modificar la plantilla para adaptarla a sus necesidades. En mis propias instrucciones, primero tendrá que jugar con la configuración de PSCyr en TexLive. La configuración se realiza en la distribución Linux Mint Mate; para otras distribuciones, es posible que deba buscar en Google las carpetas de paquetes estándar de TexLive para su sistema.

Instalación de TexLive

Por supuesto, puede instalar solo las partes necesarias de este paquete. Pero personalmente, era francamente demasiado perezoso para buscar la instalación de trabajo mínima necesaria. Para asegurarse de que todo funcione, instale el paquete completo de TexLive. Se llama texlive-completo y pesa un poco más de 2 gigas, ten en cuenta este dato. Ejecutamos el comando:

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

Después de una instalación suficientemente larga, puede continuar con el siguiente elemento.

Instalación del convertidor Pandoc

Pandoc es un paquete de Linux que le permite convertir algunos formatos de texto a otros. Tiene muchas características interesantes que puedes encontrar en Internet. Solo nos interesa la posibilidad de convertir un archivo Markdown a PDF. Compruebe si Pandoc está instalado y, si no, instálelo. Por ejemplo como este:

user@hostname:~$ dpkg -s pandoc

Si el resultado dice que no está instalado, instale:

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

Instalación del paquete PSCyr para TexLive

Primero necesitas descargar PSCyr. Por ahora sigue disponible en este enlace, si al momento de leer el artículo no está disponible por alguna razón, no te desesperes, es fácil encontrarlo junto con las instrucciones de instalación escribiendo algo como “Instalando PsCyr texlive” en Google. Si está disponible, entonces es más fácil para usted, descárguelo y asumiremos que ha desempaquetado el archivo en su carpeta de inicio y, por lo tanto, la ruta a la carpeta contenida en el archivo se parece a ~/PSCyr. Luego vaya a la Terminal y ejecute los siguientes 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, averigüe dónde se encuentra el directorio local texmf. Ejecutamos el comando:

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

Lo más probable es que tenga este directorio: /usr/local/share/texmf/, y luego hacemos:

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

Bueno, o no puedes molestarte y ejecutar un comando que se copiará en una carpeta. texmf donde quiera que ella esté:

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

Fuentes PSCyr instaladas, conéctese a TexLive:

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

Plantilla LaTeX para conversión md2pdf

No describiré exactamente cómo está configurada esta plantilla, y simplemente la daré debajo del spoiler sin mucha explicación. Baste decir que está bien configurado, al menos en cuanto a cómo maneja textos con mucho código fuente. Si no está satisfecho con el tamaño de las sangrías, el espacio entre líneas, la falta de numeración de secciones y subsecciones, entonces, en mi opinión, es bastante fácil buscar en Google la pregunta "cómo hacerlo en Latex ..." y entonces tu necesidad. Si no está del todo claro, escriba en los comentarios, intentaré profundizar en mi propia configuración hace 4 años y describir qué línea de la plantilla es responsable de qué. Mientras tanto, escribiré cómo lo hice en mi PC, y puedes repetirlo o modificarlo por ti mismo.

crear un archivo plantilla.tex en el catalogo /usr/share/texlive/:

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

Dale permisos de lectura:

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

ábralo debajo de la raíz y pegue el contenido oculto debajo del spoiler a continuación:

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

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

Guardar archivo /usr/share/texlive/plantilla.tex y escriba un script que convierta el archivo Makrdown a PDF, creando en la misma carpeta un archivo llamado Markdown file con el prefijo .pdf, es decir, después de la conversión nombre de archivo.md aparecerá en la carpeta. nombre de archivo.md.pdf. Llamemos al guión md2pdf y ponte en camino / usr / bin. Ejecutemos los 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

La cuarta línea en realidad contiene el comando de conversión. prestar atención a --from=markdown_github. La versión GitHub de Markdown es compatible con versiones anteriores del Markdown original, por lo que si su texto está escrito en él, no tiene que preocuparse. Si su archivo MD está escrito en un dialecto de Markdown específico, lea el manual de Pandoc (man pandoc), asegúrese de que su implementación sea compatible con él y modifique /usr/bin/md2pdf si necesario.

Script para instalación más o menos automática

Si realmente no desea configurar nada y tiene una distribución similar a Ubuntu, puede intentar crear un script con los contenidos ocultos debajo del spoiler, y lo más probable es que todo se instale solo, lo único es copiar la plantilla de TeX publicada debajo del spoiler anterior a donde los necesite. Abra la Terminal y ejecute:

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

Luego rellénalo con el siguiente contenido:

El contenido del 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

Ejecutarlo con el comando:

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

No olvides eso /usr/share/texlive/plantilla.tex debe rellenarse como se indica en el apartado "Plantilla LaTeX para conversión md2pdf" contenido.

Usando md2pdf

Simplemente abra la carpeta con el archivo Markdown (algún_archivo.md) en la Terminal y ejecute el comando:

user@hostname:~$ md2pdf some_file.md

Como resultado, aparecerá un archivo en la carpeta. algún_archivo.md.pdf.

Conclusión

Según el método descrito, puede crear cualquier estilo de archivos PDF, también puede convertir otros formatos en lugar de md, cualquier compatible con Pandoc. Me atrevo a esperar que algún día esta instrucción sea útil para 3 personas y media.

Fuente: habr.com

Añadir un comentario