Готово решение markdown2pdf със сорс код за Linux

предговор

Markdown е чудесен начин да напишете кратка статия, а понякога и доста текст, с просто курсивно и удебелено форматиране. Markdown също е добър за писане на статии с включен изходен код. Но понякога искате да танцувате без загуба, да танцувате с тамбура, за да го изпреварите в обикновен, добре оформен PDF файл и така че да няма проблеми по време на конвертирането, което например имах - не можете да пишете на руски на коментарите на изходния код, твърде дългите редове не се прехвърлят, но се изрязват и други дребни проблеми. Инструкцията ще ви позволи бързо да настроите конвертора md2pdf без наистина да разбира как работи. Скриптът за повече или по-малко автоматична инсталация е по-долу в съответния раздел.

Моят примерен TeX шаблон за преобразуване използва PSCyr пакета шрифтове, който включва поддръжка за шрифтове на Microsoft, а именно Times New Roman. Имаше такива изисквания за диплома според GOST. Ако знаете как, можете да промените шаблона, за да отговаря на вашите нужди. В моите собствени инструкции първо ще трябва да се заблуждавате с настройката PSCyr в TexLive. Настройката се извършва в дистрибуцията на Linux Mint Mate, за други дистрибуции може да се наложи да търсите в Google стандартните папки на пакета TexLive за вашата система.

Инсталиране на TexLive

Разбира се, можете да инсталирате само необходимите части от този пакет. Но лично мен ме мързеше откровено да търся минимално необходимата работеща инсталация. За да сте сигурни, че всичко работи, инсталирайте целия пакет TexLive. Нарича се texlive-пълен и тежи малко повече от 2 гигабайта, имайте предвид този факт. Изпълняваме командата:

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

След достатъчно дълга инсталация можете да продължите към следващия елемент.

Инсталиране на Pandoc Converter

Pandoc е Linux пакет, който ви позволява да конвертирате някои текстови формати в други. Има много интересни функции, които можете да намерите сами в интернет. Интересуваме се само от възможността за конвертиране на файл с маркдаун в PDF. Проверете дали Pandoc е инсталиран и ако не, инсталирайте го. Например така:

user@hostname:~$ dpkg -s pandoc

Ако изходът казва, че не е инсталиран, инсталирайте:

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

Инсталиране на пакета PSCyr за TexLive

Първо трябва да изтеглите PSCyr. Засега все още е наличен в това връзка, ако в момента на четене на статията не е наличен по някаква причина, не се отчайвайте, лесно е да го намерите заедно с инструкциите за инсталиране, като напишете нещо като „Инсталиране на PsCyr texlive“ в Google. Ако е наличен, тогава е по-лесно за вас, изтеглете и ние ще приемем, че сте разопаковали архива във вашата домашна папка и по този начин пътят до папката, съдържаща се в архива, изглежда така ~/PSCyr. След това отидете на терминала и изпълнете следните команди последователно:

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

След това разберете къде се намира локалната директория texmf. Изпълняваме командата:

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

Най-вероятно имате тази директория - /usr/local/share/texmf/, и след това правим:

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

Е, или можете да не се притеснявате и да изпълните команда, която ще копира в папка texmf където и да е тя:

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

Инсталирани PSCyr шрифтове, свържете се с TexLive:

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

LaTeX шаблон за преобразуване в md2pdf

Няма да описвам точно как е конфигуриран този шаблон и просто ще го дам под спойлера без много обяснения. Достатъчно е да се каже, че е добре конфигуриран, поне по отношение на това как обработва текстове с много изходен код. Ако не сте доволни от размера на отстъпите, разстоянието между редовете, липсата на номериране на секции и подсекции, тогава според мен е доста лесно да потърсите в Google въпроса в Интернет „как да го направя в латекс ...“ и тогава вашата нужда. Ако изобщо не е ясно, пишете в коментарите, ще се опитам да се поровя в собствените си настройки преди 4 години и да опиша кой ред от шаблона отговаря за какво. Междувременно ще напиша как го направих на моя компютър и вие сте свободни да го повторите или промените за себе си.

Създайте файл template.tex в каталога /usr/share/texlive/:

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

Дайте му разрешения за четене:

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

отворете го под корена и поставете в него съдържанието, скрито под спойлера по-долу:

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

Съдържание на шаблона /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}

Запишете файла /usr/share/texlive/template.tex и напишете скрипт, който ще преобразува файла Makrdown в PDF, създавайки в същата папка файл, наречен файл Markdown с префикс .pdf, т.е. след преобразуването име на файл.md ще се появи в папката. име на файл.md.pdf. Нека извикаме сценария md2pdf и пуснати на път / ЮЕсАр / хамбар. Нека изпълним последователно командите:

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

Четвъртият ред всъщност съдържа командата за преобразуване. обръщам внимание на --from=markdown_github. GitHub версията на Markdown е обратно съвместима с оригиналния Markdown, така че ако вашият текст е написан в нея, не е нужно да се притеснявате. Ако вашият MD файл е написан на специфичен диалект на Markdown, прочетете ръководството на Pandoc (man pandoc), уверете се, че внедряването ви се поддържа от него и настройте /usr/bin/md2pdf ако е необходимо.

Скрипт за повече или по-малко автоматична инсталация

Ако изобщо не искате да конфигурирате нищо и имате дистрибуция, подобна на Ubuntu, можете да опитате да създадете скрипт със съдържанието, скрито под спойлера, и най-вероятно всичко ще се инсталира само, единственото нещо е, копирайте шаблона на TeX, публикуван под спойлера по-горе, до мястото, където имате нужда. Отворете терминала и стартирайте:

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

След това го попълнете със следното съдържание:

Съдържанието на скрипта $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

Стартирайте го с командата:

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

Не забравяй това /usr/share/texlive/template.tex трябва да се попълни, както е посочено в раздел "LaTeX шаблон за преобразуване в md2pdf» съдържание.

Използване на md2pdf

Просто отворете папката с файла Markdown (някакъв_файл.md) в терминала и изпълнете командата:

user@hostname:~$ md2pdf some_file.md

В резултат на това в папката ще се появи файл някакъв_файл.md.pdf.

Заключение

Въз основа на описания метод можете да създавате всеки стил на PDF файлове, можете също така да конвертирате други формати вместо md, всеки поддържан от Pandoc. Смея да се надявам, че един ден тази инструкция ще бъде полезна на 3 човека и половина.

Източник: www.habr.com

Добавяне на нов коментар