Solução markdown2pdf pronta com código-fonte para Linux

Prefácio

Markdown é uma ótima maneira de escrever um artigo curto e, às vezes, bastante texto, com formatação simples em itálico e negrito. Markdown também é bom para escrever artigos com código-fonte incluído. Mas às vezes você quer dançar sem perder com um pandeiro para ultrapassá-lo em um arquivo PDF regular e bem formado, e para que não haja problemas durante a conversão, o que, por exemplo, eu tive - você não pode escrever em russo em os comentários do código-fonte, linhas muito longas não são transferidas, mas cortadas e outros problemas menores. A instrução permitirá que você configure rapidamente o conversor md2pdf sem realmente entender como funciona. O script para uma instalação mais ou menos automática está abaixo na seção apropriada.

Meu modelo TeX de amostra para conversão usa o pacote de fontes PSCyr, que inclui suporte para fontes da Microsoft, ou seja, Times New Roman. Existiam tais requisitos para um diploma de acordo com o GOST. Se você souber como, poderá modificar o modelo para atender às suas necessidades. Em minhas próprias instruções, primeiro você terá que brincar com a configuração PSCyr no TexLive. A configuração é feita na distribuição Linux Mint Mate, para outras distribuições você pode ter que pesquisar no Google as pastas de pacotes TexLive padrão para o seu sistema.

Instalando o TexLive

Claro, você pode instalar apenas as partes necessárias deste pacote. Mas, pessoalmente, eu estava francamente com preguiça de procurar a instalação de trabalho mínima necessária. Para garantir que tudo funcione, instale todo o pacote TexLive. é chamado texlive-completo e pesa um pouco mais de 2 gigabytes, lembre-se disso. Executamos o comando:

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

Após uma instalação suficientemente longa, você pode prosseguir para o próximo item.

Instalando o Conversor Pandoc

Pandoc é um pacote Linux que permite converter alguns formatos de texto para outros. Tem muitos recursos interessantes que você pode encontrar na Internet. Estamos interessados ​​apenas na possibilidade de converter um arquivo markdown em PDF. Verifique se o Pandoc está instalado e, se não, instale-o. Por exemplo assim:

user@hostname:~$ dpkg -s pandoc

Se a saída disser que não está instalado, instale:

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

Instalando o pacote PSCyr para TexLive

Primeiro você precisa baixar o PSCyr. Por enquanto ainda está disponível neste link, se por algum motivo não estiver disponível no momento da leitura do artigo, não se desespere, é fácil encontrá-lo junto com as instruções de instalação digitando algo como “Instalando o PsCyr texlive” no Google. Se estiver disponível, é mais fácil para você, faça o download e assumiremos que você descompactou o arquivo em sua pasta pessoal e, portanto, o caminho para a pasta contida no arquivo se parece com ~/PSCyr. Em seguida, vá para o Terminal e execute os seguintes comandos em sequê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

Em seguida, descubra onde o diretório local está localizado texto. Executamos o comando:

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

Provavelmente você tem este diretório - /usr/local/share/texmf/, e então fazemos:

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

Bem, ou você não pode se incomodar e executar um comando que irá copiar para uma pasta texto onde quer que ela esteja:

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

Fontes PSCyr instaladas, conecte-se ao TexLive:

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

Modelo LaTeX para conversão md2pdf

Não vou descrever exatamente como este modelo está configurado, e simplesmente vou dar no spoiler sem muita explicação. Basta dizer que está bem configurado, pelo menos no que diz respeito à forma como lida com textos com muito código-fonte. Se você não está satisfeito com o tamanho dos recuos, espaçamento entre linhas, falta de numeração de seções e subseções, então, na minha opinião, é muito fácil pesquisar no Google a pergunta “como fazer isso em látex ...” e então sua necessidade. Se não estiver claro, escreva nos comentários, tentarei me aprofundar em minhas próprias configurações há 4 anos e descrever qual linha do modelo é responsável por quê. Nesse ínterim, escreverei como fiz isso no meu PC e você poderá repetir ou modificar por si mesmo.

Criar um arquivo modelo.tex no catálogo /usr/share/texlive/:

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

Dê permissões de leitura:

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

abra-o na raiz e cole o conteúdo oculto no spoiler abaixo:

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

Conteúdo 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}

Salvando o arquivo /usr/share/texlive/template.tex e escreva um script que irá converter o arquivo Makrdown para PDF, criando na mesma pasta um arquivo chamado arquivo Markdown com o prefixo .pdf, ou seja, após a conversão nome do arquivo.md aparecerá na pasta. nome do arquivo.md.pdf. Vamos chamar o script md2pdf e colocar no caminho / usr / bin. Vamos executar os comandos em sequê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

A quarta linha realmente contém o comando de conversão. prestar atenção em --from=markdown_github. A versão do GitHub do Markdown é compatível com o Markdown original, portanto, se o seu texto estiver escrito nele, você não precisa se preocupar. Se o seu arquivo MD estiver escrito em um dialeto Markdown específico, leia o manual do Pandoc (man pandoc), certifique-se de que sua implementação seja suportada por ele e ajuste /usr/bin/md2pdf se necessário.

Script para instalação mais ou menos automática

Se você realmente não deseja configurar nada e possui uma distribuição semelhante ao Ubuntu, pode tentar criar um script com o conteúdo oculto sob o spoiler e, provavelmente, tudo será instalado sozinho, a única coisa é copiar o modelo TeX postado no spoiler acima, quando necessário. Abra o Terminal e execute:

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

Em seguida, preencha-o com o seguinte conteúdo:

O conteúdo 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

Execute-o com o comando:

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

Não esqueça isto /usr/share/texlive/template.tex deve ser preenchido conforme indicado na seção "Modelo LaTeX para conversão md2pdf" contente.

Usando md2pdf

Basta abrir a pasta com o arquivo Markdown (algum_arquivo.md) no Terminal e execute o comando:

user@hostname:~$ md2pdf some_file.md

Como resultado, um arquivo aparecerá na pasta algum_arquivo.md.pdf.

Conclusão

Com base no método descrito, você pode criar qualquer estilo de arquivo PDF, também pode converter outros formatos em vez de md, qualquer um suportado pelo Pandoc. Atrevo-me a esperar que um dia esta instrução seja útil para 3 pessoas e meia.

Fonte: habr.com

Adicionar um comentário