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

предговорот

Markdown е одличен начин да се напише кратка статија, а понекогаш и доста текст, со едноставно закосено и задебелено форматирање. Markdown е исто така добар за пишување статии со вклучен изворен код. Но, понекогаш сакате без загуба да танцувате со тамбура за да го престигнете во обична, добро формирана PDF-датотека и за да нема проблеми при конверзијата, што, на пример, ги имав - не можете да пишувате на руски во коментарите на изворниот код, премногу долги редови не се пренесуваат, туку се сечат и други помали проблеми. Упатството ќе ви овозможи брзо да го поставите конверторот md2pdf без навистина разбирање како функционира. Скриптата за повеќе или помалку автоматска инсталација е подолу во соодветниот дел.

Мојот примерок TeX шаблон за конверзија го користи пакетот фонтови PSCyr, кој вклучува поддршка за фонтови на Microsoft, имено Times New Roman. Имаше такви барања за диплома според ГОСТ. Ако знаете како, можете да го измените шаблонот за да одговара на вашите потреби. Во моите упатства, прво ќе треба да се залажувате со поставката PSCyr во TexLive. Поставувањето е направено во дистрибуцијата Linux Mint Mate, за други дистрибуции можеби ќе треба да ги пребарувате стандардните папки на пакети TexLive за вашиот систем.

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

Се разбира, можете да ги инсталирате само потребните делови од овој пакет. Но, лично, искрено бев премногу мрзлив да ја барам минималната потребна работна инсталација. За да бидете сигурни дека сè работи, инсталирајте го целиот пакет TexLive. Тоа се нарекува текстуално-полн и тежи малку повеќе од 2 гигабајти, имајте го овој факт на ум. Ја извршуваме командата:

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

По доволно долга инсталација, можете да продолжите на следната ставка.

Инсталирање на конверторот Pandoc

Pandoc е пакет на Линукс кој ви овозможува да конвертирате некои текстуални формати во други. Има многу интересни карактеристики кои можете да ги најдете на Интернет. Ние сме заинтересирани само за можноста за конвертирање на датотека за означување во 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

Следно, дознајте каде се наоѓа локалниот директориум textmf. Ја извршуваме командата:

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

Најверојатно го имате овој директориум - /usr/local/share/texmf/, а потоа правиме:

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

Па, или не можете да се мачите и да извршите команда што ќе се копира во папка textmf каде и да е:

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

Нема да опишам точно како е конфигуриран овој шаблон, и едноставно ќе го дадам под спојлер без многу објаснување. Доволно е да се каже дека е добро конфигуриран, барем во однос на тоа како се справува со текстови со многу изворен код. Ако не сте задоволни со големината на вовлекувањата, растојанието помеѓу линиите, недостатокот на нумерирање на делови и потсекции, тогаш според мое мислење е прилично лесно да се прегугла прашањето на Интернет „како да го направите тоа во Латекс ...“ и тогаш вашата потреба. Ако воопшто не е јасно, пишете во коментарите, ќе се обидам да навлезам во моите поставки пред 4 години и да опишам која линија од шаблонот е одговорна за што. Во меѓувреме, ќе напишам како го направив тоа на мојот компјутер, а вие можете слободно да го повторите или измените сами.

Направете датотека шаблон.текс во каталогот /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 и стави на пат / usr / корпа за отпадоци. Ајде да ги извршиме командите во низа:

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

Четвртата линија всушност ја содржи командата за конверзија. Обрни внимание на --од=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 (some_file.md) во терминалот и извршете ја командата:

user@hostname:~$ md2pdf some_file.md

Како резултат на тоа, датотеката ќе се појави во папката some_file.md.pdf.

Заклучок

Врз основа на опишаниот метод, можете да изградите кој било стил на PDF-датотеки, исто така можете да конвертирате други формати наместо md, кој било поддржан од Pandoc. Се осмелувам да се надевам дека еден ден оваа инструкција ќе биде корисна за 3 и пол луѓе.

Извор: www.habr.com

Додадете коментар