日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Linux中使用Pandoc來轉(zhuǎn)換文件

Pandoc 是一個命令行工具,用于將文件從一種標記語言轉(zhuǎn)換為另一種標記語言。標記語言使用標簽來標記文檔的各個部分。常用的標記語言包括 Markdown、ReStructuredText、HTML、LaTex、ePub 和 Microsoft Word DOCX。

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名注冊、雅安服務器托管、營銷軟件、網(wǎng)站建設(shè)、新洲網(wǎng)站維護、網(wǎng)站推廣。

Pandoc 安裝和要求

Pandoc 默認安裝在大多數(shù) Linux 發(fā)行版中。本教程使用 pandoc-2.2.3.2 和 pandoc-citeproc-0.14.3。如果不打算生成 PDF,那么這兩個包就足夠了。但是,我建議也安裝 texlive,這樣就可以選擇生成 PDF 了。

通過以下命令在 Linux 上安裝這些程序:

sudo apt-get install pandoc pandoc-citeproc texlive

您可以在 Pandoc 的網(wǎng)站上找到其他平臺的 安裝說明。

我強烈建議安裝 pandoc-crossref,這是一個“用于對圖表,方程式,表格和交叉引用進行編號的過濾器”。最簡單的安裝方式是下載 預構(gòu)建的可執(zhí)行文件,但也可以通過以下命令從 Haskell 的軟件包管理器 cabal 安裝它:

cabal update
cabal install pandoc-crossref

如果需要額外的 Haskell 安裝信息,請參考 pandoc-crossref 的 GitHub 倉庫。

幾個例子

我將通過解釋如何生成三種類型的文檔來演示 Pandoc 的工作原理:

  • 由包含數(shù)學公式的 LaTeX 文件創(chuàng)建的網(wǎng)頁
  • 由 Markdown 文件生成的 Reveal.js 幻燈片
  • 混合 Markdown 和 LaTeX 的合同文件

創(chuàng)建一個包含數(shù)學公式的網(wǎng)站

Pandoc 的優(yōu)勢之一是以不同的輸出文件格式顯示數(shù)學公式。例如,我們可以從包含一些數(shù)學符號(用 LaTeX 編寫)的 LaTeX 文檔(名為 math.tex)生成一個網(wǎng)頁。

math.tex 文檔如下所示:

% Pandoc math demos
$a^2 + b^2 = c^2$
$v(t) = v_0 + \frac{1}{2}at^2$
$\gamma = \frac{1}{\sqrt{1 - v^2/c^2}}$
$\exists x \forall y (Rxy \equiv Ryx)$
$p \wedge q \models p$
$\Box\diamond p\equiv\diamond p$
$\int_{0}^{1} x dx = \left[ \frac{1}{2}x^2 \right]_{0}^{1} = \frac{1}{2}$
$e^x = \sum_{n=0}^\infty \frac{x^n}{n!} = \lim_{n\rightarrow\infty} (1+x/n)^n$

通過輸入以下命令將 LaTeX 文檔轉(zhuǎn)換為名為 mathMathML.html 的網(wǎng)站:

pandoc math.tex -s --mathml  -o mathMathML.html

參數(shù) -s 告訴 Pandoc 生成一個獨立的網(wǎng)頁(而不是網(wǎng)頁片段,因此它將包括 HTML 中的 head 和 body 標簽),-mathml 參數(shù)強制 Pandoc 將 LaTeX 中的數(shù)學公式轉(zhuǎn)換成 MathML,從而可以由現(xiàn)代瀏覽器進行渲染。

看一下 網(wǎng)頁效果 和 代碼,代碼倉庫中的 Makefile 使得運行更加簡單。

制作一個 Reveal.js 幻燈片

使用 Pandoc 從 Markdown 文件生成簡單的演示文稿很容易。幻燈片包含頂級幻燈片和下面的嵌套幻燈片。可以通過鍵盤控制演示文稿,從一個頂級幻燈片跳轉(zhuǎn)到下一個頂級幻燈片,或者顯示頂級幻燈片下面的嵌套幻燈片。 這種結(jié)構(gòu)在基于 HTML 的演示文稿框架中很常見。

創(chuàng)建一個名為 SLIDES 的幻燈片文檔(參見 代碼倉庫)。首先,在 % 后面添加幻燈片的元信息(例如,標題、作者和日期):

% Case Study
% Kiko Fernandez Reyes
% Sept 27, 2017

這些元信息同時也創(chuàng)建了第一張幻燈片。要添加更多幻燈片,使用 Markdown 的一級標題(在下面例子中的第5行,參考 Markdown 的一級標題 )生成頂級幻燈片。

例如,可以通過以下命令創(chuàng)建一個標題為 “Case Study”、頂級幻燈片名為 “Wine Management System” 的演示文稿:

% Case Study
% Kiko Fernandez Reyes
% Sept 27, 2017
# Wine Management System

使用 Markdown 的二級標題將內(nèi)容(比如包含一個新管理系統(tǒng)的說明和實現(xiàn)的幻燈片)放入剛剛創(chuàng)建的頂級幻燈片。下面添加另外兩張幻燈片(在下面例子中的第 7 行和 14 行 ,參考 Markdown 的二級標題 )。

  • 第一個二級幻燈片的標題為 “Idea”,并顯示瑞士國旗的圖像
  • 第二個二級幻燈片的標題為 “Implementation”
[cc]% Case Study
% Kiko Fernandez Reyes
% Sept 27, 2017
# Wine Management System
##  Idea
## Implementation[/cc]

我們現(xiàn)在有一個頂級幻燈片(#Wine Management System),其中包含兩張幻燈片(## Idea 和 ## Implementation)。

通過創(chuàng)建一個由符號 > 開頭的 Markdown 列表,在這兩張幻燈片中添加一些內(nèi)容。在上面代碼的基礎(chǔ)上,在第一張幻燈片中添加兩個項目(第 9-10 行),第二張幻燈片中添加五個項目(第 16-20 行):

[cc]% Case Study
% Kiko Fernandez Reyes
% Sept 27, 2017
# Wine Management System
##  Idea
>- Swiss love their **wine** and cheese
>- Create a *simple* wine tracker system
![](img/matterhorn.jpg)
## Implementation
>- Bottles have a RFID tag
>- RFID reader (emits and read signal)
>- **Raspberry Pi**
>- **Server (online shop)**
>- Mobile app[/cc]

上面的代碼添加了馬特洪峰的圖像,也可以使用純 Markdown 語法或添加 HTML 標簽來改進幻燈片。

要生成幻燈片,Pandoc 需要引用 Reveal.js 庫,因此它必須與 SLIDES 文件位于同一文件夾中。生成幻燈片的命令如下所示:

pandoc -t revealjs -s --self-contained SLIDES \
-V theme=white -V slideNumber=true -o index.html

上面的 Pandoc 命令使用了以下參數(shù):

-t revealjs 表示將輸出一個 revealjs 演示文稿 -s 告訴 Pandoc 生成一個獨立的文檔 –self-contained 生成沒有外部依賴關(guān)系的 HTML 文件 -V 設(shè)置以下變量: theme=white 將幻燈片的主題設(shè)為白色 slideNumber=true 顯示幻燈片編號 -o index.html 在名為 index.html 的文件中生成幻燈片 為了簡化操作并避免鍵入如此長的命令,創(chuàng)建以下 Makefile:

all: generate
generate:
   pandoc -t revealjs -s --self-contained SLIDES \
   -V theme=white -V slideNumber=true -o index.html
clean: index.html
   rm index.html
.PHONY: all clean generate

可以在 這個倉庫 中找到所有代碼。

制作一份多種格式的合同

假設(shè)你正在準備一份文件,并且(這樣的情況現(xiàn)在很常見)有些人想用 Microsoft Word 格式,其他人使用自由軟件,想要 ODT 格式,而另外一些人則需要 PDF。你不必使用 OpenOffice 或 LibreOffice 來生成 DOCX 或 PDF 格式的文件,可以用 Markdown 創(chuàng)建一份文檔(如果需要高級格式,可以使用一些 LaTeX 語法),并生成任何這些文件類型。

和以前一樣,首先聲明文檔的元信息(標題、作者和日期):

% Contract Agreement for Software X % Kiko Fernandez-Reyes % August 28th, 2018 然后在 Markdown 中編寫文檔(如果需要高級格式,則添加 LaTeX)。例如,創(chuàng)建一個固定間隔的表格(在 LaTeX 中用 \hspace{3cm} 聲明)以及客戶端和承包商應填寫的行(在 LaTeX 中用 \hrulefill 聲明)。之后,添加一個用 Markdown 編寫的表格。

創(chuàng)建的文檔如下所示:

創(chuàng)建此文檔的代碼如下:

% Contract Agreement for Software X
% Kiko Fernandez-Reyes
% August 28th, 2018
...
### Work Order
\begin{table}[h]
\begin{tabular}{ccc}
The Contractor & \hspace{3cm} & The Customer \\
& & \\
& & \\
\hrulefill & \hspace{3cm} & \hrulefill \\
%
Name & \hspace{3cm} & Name \\
& & \\
& & \\
\hrulefill & \hspace{3cm} & \hrulefill \\
...
\end{tabular}
\end{table}
\vspace{1cm}
+--------------------------------------------|----------|-------------+
| Type of Service                            | Cost     |     Total   |
+:===========================================+=========:+:===========:+
| Game Engine                                | 70.0     | 70.0        |
|                                            |          |             |
+--------------------------------------------|----------|-------------+
|                                            |          |             |
+--------------------------------------------|----------|-------------+
| Extra: Comply with defined API functions   | 10.0     | 10.0        |
|        and expected returned format        |          |             |
+--------------------------------------------|----------|-------------+
|                                            |          |             |
+--------------------------------------------|----------|-------------+
| **Total Cost**                             |          | **80.0**    |
+--------------------------------------------|----------|-------------+

要生成此文檔所需的三種不同輸出格式,編寫如下的 Makefile:

DOCS=contract-agreement.md
all: $(DOCS)
   pandoc -s $(DOCS) -o $(DOCS:md=pdf)
   pandoc -s $(DOCS) -o $(DOCS:md=docx)
   pandoc -s $(DOCS) -o $(DOCS:md=odt)
clean:
   rm *.pdf *.docx *.odt
.PHONY: all clean

4 到 7 行是生成三種不同輸出格式的具體命令:

如果有多個 Markdown 文件并想將它們合并到一個文檔中,需要按照希望它們出現(xiàn)的順序編寫命令。例如,在撰寫本文時,我創(chuàng)建了三個文檔:一個介紹文檔、三個示例和一些高級用法。以下命令告訴 Pandoc 按指定的順序?qū)⑦@些文件合并在一起,并生成一個名為 document.pdf 的 PDF 文件。

pandoc -s introduction.md examples.md advanced-uses.md -o document.pdf

模板和元信息

編寫復雜的文檔并非易事,你需要遵循一系列獨立于內(nèi)容的規(guī)則,例如使用特定的模板、編寫摘要、嵌入特定字體,甚至可能要聲明關(guān)鍵字。所有這些都與內(nèi)容無關(guān):簡單地說,它就是元信息。

Pandoc 使用模板生成不同的輸出格式。例如,有一個 LaTeX 的模板,還有一個 ePub 的模板,等等。這些模板的元信息中有未賦值的變量。使用以下命令找出 Pandoc 模板中可用的元信息:

pandoc -D FORMAT

例如,LaTex 的模版是:

pandoc -D latex

按照以下格式輸出:

$if(title)$
\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
$endif$
$if(subtitle)$
\providecommand{\subtitle}[1]{}
\subtitle{$subtitle$}
$endif$
$if(author)$
\author{$for(author)$$author$$sep$ \and $endfor$}
$endif$
$if(institute)$
\providecommand{\institute}[1]{}
\institute{$for(institute)$$institute$$sep$ \and $endfor$}
$endif$
\date{$date$}
$if(beamer)$
$if(titlegraphic)$
\titlegraphic{\includegraphics{$titlegraphic$}}
$endif$
$if(logo)$
\logo{\includegraphics{$logo$}}
$endif$
$endif$
\begin{document}

如你所見,輸出的內(nèi)容中有標題、致謝、作者、副標題和機構(gòu)模板變量(還有許多其他可用的變量)??梢允褂?YAML 元區(qū)塊輕松設(shè)置這些內(nèi)容。 在下面例子的第 1-5 行中,我們聲明了一個 YAML 元區(qū)塊并設(shè)置了一些變量(使用上面合同協(xié)議的例子):

---
title: Contract Agreement for Software X
author: Kiko Fernandez-Reyes
date: August 28th, 2018
---
(continue writing document as in the previous example)

這樣做非常奏效,相當于以前的代碼:

% Contract Agreement for Software X
% Kiko Fernandez-Reyes
% August 28th, 2018

然而,這樣做將元信息與內(nèi)容聯(lián)系起來,也即 Pandoc 將始終使用此信息以新格式輸出文件。如果你將要生成多種文件格式,最好要小心一點。例如,如果你需要以 ePub 和 HTML 的格式生成合同,并且 ePub 和 HTML 需要不同的樣式規(guī)則,該怎么辦?

考慮一下這些情況:

如果你只是嘗試嵌入 YAML 變量 css:style-epub.css,那么將從 HTML 版本中移除該變量。這不起作用。 復制文檔顯然也不是一個好的解決方案,因為一個版本的更改不會與另一個版本同步。 你也可以像下面這樣將變量添加到 Pandoc 命令中:

pandoc -s -V css=style-epub.css document.md document.epub
pandoc -s -V css=style-html.css document.md document.html

我的觀點是,這樣做很容易從命令行忽略這些變量,特別是當你需要設(shè)置數(shù)十個變量時(這可能出現(xiàn)在編寫復雜文檔的情況中)?,F(xiàn)在,如果將它們放在同一文件中(meta.yaml 文件),則只需更新或創(chuàng)建新的元信息文件即可生成所需的輸出格式。然后你會編寫這樣的命令:

pandoc -s meta-pub.yaml document.md document.epub
pandoc -s meta-html.yaml document.md document.html

這是一個更簡潔的版本,你可以從單個文件更新所有元信息,而無需更新文檔的內(nèi)容。

結(jié)語

通過以上的基本示例,我展示了 Pandoc 在將 Markdown 文檔轉(zhuǎn)換為其他格式方面是多么出色。


網(wǎng)頁名稱:Linux中使用Pandoc來轉(zhuǎn)換文件
分享地址:http://www.dlmjj.cn/article/dpcipco.html