Linux 用のソース コードを含む既製の markdown2pdf ソリューション

序文

Markdown は、単純な斜体と太字の書式設定で短い記事、場合によっては大量のテキストを作成するのに最適な方法です。 Markdown はソースコードを含めた記事を書くのにも適しています。 しかし、場合によっては、タンバリンで踊って、通常の整形式の PDF ファイルに変換し、変換中に問題が発生しないようにしたい場合があります。たとえば、私はそうしました。ロシア語で書くことはできません。ソースコードのコメント、長すぎる行は転送されませんが、カットされるなどの小さな問題があります。 この説明書により、コンバータを素早くセットアップできます。 md2pdf それがどのように機能するのかをよく理解せずに。 多かれ少なかれ自動インストールのスクリプトは、以下の適切なセクションにあります。

変換用のサンプル TeX テンプレートは、Microsoft フォントのサポートを含む PSCyr フォント パッケージを使用しています。 はTimes New Roman。 GOSTによると、卒業証書にはそのような要件がありました。 方法がわかっていれば、ニーズに合わせてテンプレートを変更できます。 私自身の手順では、まず TexLive の PSCyr 設定をいじる必要があります。 セットアップは Linux Mint Mate ディストリビューションで行われますが、他のディストリビューションの場合は、システムの標準 TexLive パッケージ フォルダーを Google で検索する必要がある場合があります。

TexLive のインストール

もちろん、このパッケージの必要な部分だけをインストールすることもできます。 しかし、個人的には、正直に言って、最低限必要な動作するインストールを探すのが面倒でした。 すべてが動作することを確認するには、TexLive パッケージ全体をインストールします。 いわゆる テックスライブフル 重さは 2 GB を少し超えるため、この事実に留意してください。 次のコマンドを実行します。

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

十分に長いインストールが完了したら、次の項目に進むことができます。

Pandocコンバータのインストール

Pandoc は、一部のテキスト形式を他の形式に変換できる Linux パッケージです。 インターネット上で見つけられる興味深い機能がたくさんあります。 ここで注目しているのは、マークダウン ファイルを PDF に変換できるかどうかだけです。 Pandoc がインストールされているかどうかを確認し、インストールされていない場合はインストールします。 たとえば次のようになります。

user@hostname:~$ dpkg -s pandoc

出力にインストールされていないことが示されている場合は、以下をインストールします。

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

TexLive 用の PSCyr パッケージのインストール

まず、PSCyrをダウンロードする必要があります。 今のところまだこちらで入手可能です リンク記事を読んだ時点で何らかの理由で利用できない場合でも、絶望しないでください。Google で「PsCyr texlive のインストール」などと入力すると、インストール手順とともに簡単に見つけることができます。 利用可能な場合は、ダウンロードするのが簡単です。アーカイブをホーム フォルダーに解凍したと仮定します。そのため、アーカイブに含まれるフォルダーへのパスは次のようになります。 ~/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

次に、ローカル ディレクトリがどこにあるかを確認します。 テクムフ。 次のコマンドを実行します。

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

おそらくこのディレクトリがあるでしょう - /usr/local/share/texmf/そして、次のようにします。

user@hostname:~$ sudo cp -R ./PSCyr/* /usr/local/share/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

md2pdf 変換用の LaTeX テンプレート

このテンプレートがどのように構成されているかを正確に説明することはせず、あまり説明せずにネタバレとして説明します。 少なくとも、多くのソースコードを含むテキストを処理する方法に関しては、適切に構成されていると言えば十分でしょう。 インデントのサイズ、行間隔、セクションやサブセクションの番号付けの欠如に満足できない場合は、インターネットで「Latex でどうやって行うか...」という質問をグーグルで検索するのが非常に簡単だと思います。それからあなたのニーズ。 まったく明確でない場合は、コメントに書いてください。4 年前の私自身の設定を掘り下げて、テンプレートのどの行が何を担当しているかを説明してみます。 それまでの間、私が PC でどのように実行したかを書き留めておきます。自由に繰り返したり、自分で修正したりできます。

ファイルを作成する 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 に変換するスクリプトを作成し、同じフォルダーに接頭辞 .pdf が付いた Markdown ファイルというファイルを作成します。つまり、変換後です。 ファイル名.md フォルダ内に表示されます。 ファイル名.md.pdf。 スクリプトを呼び出してみましょう md2pdf そして途中に置きます / usr / bin。 コマンドを順番に実行してみましょう。

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

4行目には実際に変換コマンドが含まれています。 注意を払う --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 セクションに示されているように入力する必要があります。md2pdf 変換用の LaTeX テンプレート" コンテンツ。

md2pdfの使用

Markdown ファイルのあるフォルダーを開くだけです (some_file.md) ターミナルで次のコマンドを実行します。

user@hostname:~$ md2pdf some_file.md

その結果、フォルダー内にファイルが表示されます some_file.md.pdf.

まとめ

説明した方法に基づいて、任意のスタイルの PDF ファイルを作成でき、md の代わりに他の形式 (Pandoc でサポートされている形式) に変換することもできます。 私は、いつかこの指導が 3 人半の人に役立つことを願っています。

出所: habr.com

コメントを追加します