Prefácio
Markdown é uma ótima maneira de escrever pequenos textos, e às vezes até textos consideráveis, com uma formatação simples em itálico e negrito. Também é bom para redigir artigos que incluam código-fonte. Mas, às vezes, você deseja converter isso para um arquivo PDF bem formatado, sem perdas e sem complicações, como as que enfrentei — não é possível escrever em russo nos comentários do código-fonte, linhas muito longas não são quebradas, mas cortadas, entre outros pequenos problemas. Este guia permitirá que você configure rapidamente o conversor. md2pdf sem precisar entender como isso funciona. O script para uma instalação mais ou menos automática está abaixo na seção correspondente.
Meu exemplo de modelo TeX para conversão utiliza o pacote de fontes PSCyr, que inclui suporte para fontes da Microsoft, nomeadamente Times New Roman. Esses eram os requisitos para o diploma de acordo com o GOST. Se você souber, pode modificar o modelo de acordo com suas necessidades. Na minha instrução, será necessário fazer algumas configurações com o PSCyr no TexLive. A configuração é realizada na distribuição Linux Mint Mate; para outras distribuições, talvez você precise procurar nas pastas padrão do pacote TexLive para o seu sistema.
Instalação do TexLive
Claro, é possível instalar apenas as partes necessárias deste pacote. Mas, pessoalmente, eu estava bastante relutante em procurar a instalação mínima funcional necessária. Para garantir que tudo funcione corretamente, instale o pacote completo TexLive. Ele se chama texlive-full e ocupa um pouco mais de 2 GB, tenha isso em mente. Execute o comando:
user@hostname:~$ sudo apt install texlive-full -yApós uma instalação razoavelmente longa, você pode passar para o próximo ponto.
Instalação do conversor Pandoc
Pandoc é um pacote Linux que permite converter alguns formatos de texto em outros. Ele possui muitas funcionalidades interessantes, que você pode explorar por conta própria na internet. No entanto, estamos interessados apenas na capacidade de converter um arquivo markdown em PDF. Vamos verificar se o Pandoc está instalado e, se não estiver, vamos instalá-lo. Por exemplo:
user@hostname:~$ dpkg -s pandocSe a saída disser que não está instalado — instale:
user@hostname:~$ sudo apt install pandoc -yInstalação do pacote PSCyr para TexLive
Primeiro, você precisa baixar o PSCyr. Ele ainda está disponível neste endereço. , se ao ler este artigo, por algum motivo ele não estiver disponível, não desanime, é fácil encontrá-lo junto com as instruções de instalação, digitando no Google algo como "Instalação PsCyr texlive". Se estiver disponível, é ainda mais fácil, faça o download e vamos considerar que você extraiu o arquivo na pasta inicial e assim o caminho para a pasta contida no arquivo zip é ~/PSCyr. Então, abrimos o Terminal e executamos os comandos sequencialmente:
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.mapEm seguida, vamos descobrir onde está o diretório local texmf. Executamos o comando:
user@hostname:~$ kpsewhich -expand-var='$TEXMFLOCAL'Provavelmente, esse diretório para você é — /usr/local/share/texmf/, e então executamos:
user@hostname:~$ sudo cp -R ./PSCyr/* /usr/local/share/texmf/Ou então, você pode não se incomodar e executar o comando que copia para a pasta texmf onde quer que ela esteja:
user@hostname:~$ sudo cp -R ./PSCyr/* $(kpsewhich -expand-var='$TEXMFLOCAL')As fontes PSCyr estão instaladas, agora conectamos no TexLive:
user@hostname:~$ sudo texhash
user@hostname:~$ updmap --enable Map=pscyr.map
user@hostname:~$ sudo mktexlsrTemplate LaTeX para conversão md2pdf
Não vou descrever como este template está configurado, e apenas o apresentarei no spoiler abaixo sem muitas explicações. Basta dizer que ele está razoavelmente bem configurado, pelo menos no que se refere ao processamento de textos com muitos códigos fonte. Se você não está satisfeito com os tamanhos de recuo, espaçamentos entre linhas, a ausência de numeração de seções e subseções, na minha opinião, é bastante fácil googlar a questão na internet "como fazer… em LaTeX" e a partir daí é com você. Se ficar completamente confuso, escreva nos comentários, eu tentarei revisitar minhas configurações de quatro anos atrás e descrever qual linha do template corresponde ao que. Por enquanto, descreverei como fiz no meu PC, e você está livre para repetir ou modificar ao seu gosto.
Crie o arquivo template.tex no diretório /usr/share/texlive/:
user@hostname:~$ sudo touch /usr/share/texlive/template.texDefinimos permissões de leitura para ele:
user@hostname:~$ sudo chmod 444 /usr/share/texlive/template.texabrimos como root e colamos o conteúdo escondido no spoiler abaixo:
user@hostname:~$ sudo nano /usr/share/texlive/template.texConteúdo do template /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}Salvar o arquivo /usr/share/texlive/template.tex e escrever um script que converterá um arquivo Markdown em PDF, criando na mesma pasta um arquivo com o nome do arquivo Markdown e o sufixo .pdf, ou seja, após a conversão filename.md aparecerá na pasta filename.md.pdf. Nomearemos o script md2pdf e colocaremos no caminho /usr/bin. Executaremos os comandos sequencialmente:
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\/md2pdfNa 4ª linha está, na verdade, o comando de conversão. Preste atenção em —from=markdown_github. A versão Markdown do GitHub é compatível com a versão original do Markdown, então, se seu texto foi escrito nela, você não precisa se preocupar. Se o seu arquivo MD foi escrito em um dialeto específico do Markdown, consulte o manual do Pandoc (man pandoc), verifique se sua implementação é suportada e faça as correções /usr/bin/md2pdf se necessário.
Um script para uma instalação mais ou menos automática
Se você não quer se preocupar em configurar nada, e está usando uma distribuição semelhante ao Ubuntu, você pode tentar criar um script com o conteúdo escondido no spoiler, e provavelmente tudo será instalado automaticamente; a única coisa é que você precisará copiar o modelo TeX, que está no spoiler acima, para o lugar certo. Abra o Terminal e execute:
user@hostname:~$ cd
user@hostname:~$ touch installmd2pdf.shEm seguida, preencha-o com o seguinte conteúdo:
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/md2pdfExecute-o com o comando:
user@hostname:~$ sudo bash $HOME/installmd2pdf.shNão esqueça que /usr/share/texlive/template.tex é necessário preencher com o conteúdo indicado na seção "Template LaTeX para conversão md2pdf".
Uso do md2pdf
Basta abrir a pasta com o arquivo Markdown (some_file.md) no Terminal e executar o comando:
user@hostname:~$ md2pdf some_file.mdComo resultado, um arquivo aparecerá na pasta some_file.md.pdf.
Conclusão
Baseando-se no método descrito, você pode criar qualquer estilo de arquivos PDF, e também pode converter outros formatos além do md, quaisquer suportados pelo Pandoc. Espero que algum dia este guia seja útil para 3 pessoas e meia.
Fonte: habr.com
