美文网首页
Arch Linux下Pandoc将Markdown转换为pdf

Arch Linux下Pandoc将Markdown转换为pdf

作者: catHeart | 来源:发表于2015-05-16 23:21 被阅读836次

    标签:Linux Pandoc Markdown


    准备XeLatex的模版

    参考ArchLinux的XeLatex中文配置配置好XeLatex的中文字体。Pandoc转换Markdown为pdf文件时,准备使用XeLatex作为Latex引擎。这个过程中需要准备一个文档的模版xelatexStyle.tex。模版文件根据pm-template.latex进行了修改,更改了字体,去除了页眉。修改后的模版文件的内容如下:

    \documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$]{$documentclass$}
    \usepackage{geometry}       % 設定邊界
    \geometry{
      top=1in,
      inner=1in,
      outer=1in,
      bottom=1in,
      headheight=3ex,
      headsep=2ex
    }
    \usepackage[T1]{fontenc}
    \usepackage{lmodern}
    \usepackage{amssymb,amsmath}
    \usepackage{ifxetex,ifluatex}
    \usepackage{fixltx2e} % provides \textsubscript
    % use upquote if available, for straight quotes in verbatim environments
    \IfFileExists{upquote.sty}{\usepackage{upquote}}{}
    \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
      \usepackage[utf8]{inputenc}
    $if(euro)$
      \usepackage{eurosym}
    $endif$
    \else % if luatex or xelatex
      \usepackage{fontspec}     % 允許設定字體
      \usepackage{xeCJK}        % 分開設置中英文字型
      \setCJKmainfont[BoldFont=SimHei, ItalicFont=KaiTi]{SimSun}    %配置中文字体
      \setmainfont{Times New Roman}                % 英文衬线字体
      \setmonofont{Courier New}                    % 英文等宽字体
      \setsansfont{Droid Sans}                     % 英文无衬线字体
    
      \linespread{1.2}\selectfont   % 行距
      \XeTeXlinebreaklocale "zh"    % 針對中文自動換行
      \XeTeXlinebreakskip = 0pt plus 1pt % 字與字之間加入0pt至1pt的間距,確保左右對整齊
      \parindent 0em        % 段落縮進
      \setlength{\parskip}{20pt}    % 段落之間的距離
      \ifxetex
        \usepackage{xltxtra,xunicode}
      \fi
      \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}
      \newcommand{\euro}{€}
    $if(mainfont)$
        \setmainfont{$mainfont$}
    $endif$
    $if(sansfont)$
        \setsansfont{$sansfont$}
    $endif$
    $if(monofont)$
        \setmonofont{$monofont$}
    $endif$
    $if(mathfont)$
        \setmathfont{$mathfont$}
    $endif$
    \fi
    % use microtype if available
    \IfFileExists{microtype.sty}{\usepackage{microtype}}{}
    $if(geometry)$
    \usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
    $endif$
    $if(natbib)$
    \usepackage{natbib}
    \bibliographystyle{plainnat}
    $endif$
    $if(biblatex)$
    \usepackage{biblatex}
    $if(biblio-files)$
    \bibliography{$biblio-files$}
    $endif$
    $endif$
    $if(listings)$
    \usepackage{listings}
    $endif$
    $if(lhs)$
    \lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
    $endif$
    $if(highlighting-macros)$
    $highlighting-macros$
    $endif$
    $if(verbatim-in-note)$
    \usepackage{fancyvrb}
    $endif$
    $if(tables)$
    \usepackage{longtable}
    $endif$
    $if(graphics)$
    \usepackage{graphicx}
    % We will generate all images so they have a width \maxwidth. This means
    % that they will get their normal width if they fit onto the page, but
    % are scaled down if they would overflow the margins.
    \makeatletter
    \def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth
    \else\Gin@nat@width\fi}
    \makeatother
    \let\Oldincludegraphics\includegraphics
    \renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}}
    $endif$
    \ifxetex
      \usepackage[setpagesize=false, % page size defined by xetex
                  unicode=false, % unicode breaks when used with xetex
                  xetex]{hyperref}
    \else
      \usepackage[unicode=true]{hyperref}
    \fi
    \hypersetup{breaklinks=true,
                bookmarks=true,
                pdfauthor={$author-meta$},
                pdftitle={$title-meta$},
                colorlinks=true,
                urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
                linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,
                pdfborder={0 0 0}}
    \urlstyle{same}  % don't use monospace font for urls
    $if(links-as-notes)$
    % Make links footnotes instead of hotlinks:
    \renewcommand{\href}[2]{#2\footnote{\url{#1}}}
    $endif$
    $if(strikeout)$
    \usepackage[normalem]{ulem}
    % avoid problems with \sout in headers with hyperref:
    \pdfstringdefDisableCommands{\renewcommand{\sout}{}}
    $endif$
    \setlength{\parindent}{0pt}
    %\setlength{\parskip}{6pt plus 2pt minus 1pt}
    \setlength{\emergencystretch}{3em}  % prevent overfull lines
    
    \title{\huge 在OSX平台上的XeLaTeX中文測試} % 設置標題,使用巨大字體
    \author{FoolEgg.com}        % 設置作者
    \date{February 2013}        % 設置日期
    \usepackage{titling}
    \setlength{\droptitle}{-8em}    % 將標題移動至頁面的上面
    
    \usepackage{fancyhdr}
    \usepackage{lastpage}
    %\pagestyle{fancyplain}         % 取消该行注释,显示页眉             
    
    $if(numbersections)$
    \setcounter{secnumdepth}{5}
    $else$
    \setcounter{secnumdepth}{0}
    $endif$
    $if(verbatim-in-note)$
    \VerbatimFootnotes % allows verbatim text in footnotes
    $endif$
    $if(lang)$
    \ifxetex
      \usepackage{polyglossia}
      \setmainlanguage{$mainlang$}
    \else
      \usepackage[$lang$]{babel}
    \fi
    $endif$
    $for(header-includes)$
    $header-includes$
    $endfor$
    
    $if(title)$
    \title{$title$}
    $endif$
    \author{$for(author)$$author$$sep$ \and $endfor$}
    \date{$date$}
    
    \begin{document}
    $if(title)$
    \maketitle
    $endif$
    
    $for(include-before)$
    $include-before$
    
    $endfor$
    $if(toc)$
    {
    \hypersetup{linkcolor=black}
    \setcounter{tocdepth}{$toc-depth$}
    \tableofcontents
    }
    $endif$
    $body$
    
    $if(natbib)$
    $if(biblio-files)$
    $if(biblio-title)$
    $if(book-class)$
    \renewcommand\bibname{$biblio-title$}
    $else$
    \renewcommand\refname{$biblio-title$}
    $endif$
    $endif$
    \bibliography{$biblio-files$}
    
    $endif$
    $endif$
    $if(biblatex)$
    \printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
    
    $endif$
    $for(include-after)$
    $include-after$
    
    $endfor$
    \end{document}
    

    准备Markdown示例文件

    一个简单的Markdown示例文件example.md:

    # Test 测试
    
    ## 莫迪访上海
    
    5月14日至19日,印度总理莫迪将对中国、蒙古和韩国进行访问。
    这是莫迪上任后首次作为印度总理出访中国,此前他曾多次以古吉拉特邦首席部长的身份来华。
    
    
    
    ## 克里提出对中国南海填海关注 王毅:不要有误判
    克里提出对中国在南海填海的关注,指希望各方采取降低紧张局势的做法。
    而针对美国在南海问题上立场的变化,王毅重申中国维护主权领土是正当行为,
    并指以和平外交手段在直接当事国之间寻求妥善解决的立场不会改变,
    王毅说中美都希望维护南海和平稳定,中国与东盟和美国在这些方面的对话都可以继续,
    重要的是不要有误判。
    
    ## 测试代码
    ```c
    int main()
    {
        printf("hello world.\n");
        return 0;
    }
    

    使用Pandoc将Markdown转换成pdf文件

    执行Pandoc命令:

    $ pandoc example.md -o example.pdf --latex-engine=xelatex --template=xelatexStyle.tex
    

    转换后的pdf文件见下图。

    Pandoc转换Markdown到pdf的示例

    相关文章

      网友评论

          本文标题:Arch Linux下Pandoc将Markdown转换为pdf

          本文链接:https://www.haomeiwen.com/subject/pzekqttx.html