1. 程式人生 > >專業的LaTeX: 在Linux下編寫高質量的文件

專業的LaTeX: 在Linux下編寫高質量的文件

dnf install texlive*

dnf install texworks

dnf install latex*

Linux下的OpenOffice、KWord等字處理軟體雖然在功能上與Microsoft Word類似,但目前在易用性和可用性方面仍然存在許多不足,直接使用它們來生成高質量的文件顯然還不太現實。本文介紹如何用LaTeX這一專業級的排版系統,在Linux下編寫和生成高質量的科技論文。

一、簡介

計算機技術的不斷進步推動了各行各業的飛速發展,使許多行業出現了革命性的變化,傳統的印刷出版業也逐漸告別了鉛與火的時代,開始普遍採用計算機排版系統。目前,大大小小的排版系統非常多,並且都有其自身特點和適用範圍,例如PageMaker比較適合於專業的出版社,而普通使用者在編排要求不高的稿件時使用Word、WPS等也不失為合適的選擇。但如果要用Word這類所見即所得(WYSIWYG)軟體編排學術論文或者科技文獻,那麼一旦遇到複雜的數學公式和特殊字元,即便使出渾身解術,其結果也難以令人十分滿意。在這種場合下使用TeX則是一個不錯的選擇,它是一種使用方便、價格低廉的專業級排版系統,在編排論文、報告和書籍時,其輸出質量並不比價格昂貴的大型計算機專業排版系統遜色,並且在某些方面(如數學公式的編排)仍然是目前排版質量最好的系統。

TeX特別適合於科技論文和書籍的排版,利用它可以在計算機上生成與印刷品幾乎完全一樣的作品,目前在國外已經被廣泛地用於編排書籍、檔案、學位論文和私人信件,以及各種複雜的公式、目錄、索引和參考文獻等。由於使用TeX可以很輕鬆地完成高質量科技文獻的排版工作,並且可以按照作者的要求進行擴充和修改,所以逐漸引起出版界和各國科技工作者的注意,被一致認為是目前國際上排版數學公式能力最強的系統,並且在各種國際會議上被指定為標準的論文編排軟體。

稍有經驗的人都會知道,即使再好的字處理軟體打印出來的效果也都會跟螢幕上看到的有所差異。而TeX系統的輸出是與裝置無關的DVI(DeVice Independent)檔案,因此無論是在針式印表機、噴墨印表機、鐳射印表機或是照排機上,其效果都是完全相同的,僅僅只是文字或者圖形的分辯率因裝置的不同而稍有差異。從某種意義上說,TeX才是真正的"所見即所得"。

二、TeX系統

TeX系統的發明者是美國Stanford大學的Donald E. Knuth教授,他是整個計算機學術界的泰斗級人物,也是享有盛譽的計算機程式設計系列專著《計算機程式設計的藝術》(The Art of Computer Programming)的作者,TeX的出現與這本舉世聞名的計算機理論書籍有著密不可分的聯絡。1977年,當出版社要求Knuth教授對他六十年代的力作《計算機程式設計的藝術》出修訂版時,他感到以手工方式對原稿進行修改存在種種不便,於是便放下手頭的工作,開始設計一套高質量的計算機排版系統。原先計劃只花半年時間來改進排版技術然後繼續寫作的Knuth教授,最後卻整整耗費了十年心血,終於研製成功了聞名於世的TeX系統。

與其它計算機排版系統不同的是,在用TeX編排文件時,除了需要輸入正文內容之外,同時還需要加入一些排版命令,這些命令通常不是由編輯人員新增的,而是要由作者本人自己完成。TeX系統提供的排版命令十分靈活,作者可以直接使用這些命令,也可以利用已有的功能來定義新的排版命令,使之適應特定場合的需要。

TeX與Linux的Kernel一樣,只是一套核心技術,實際應用時往往需要在TeX的基礎上繼續開發。最初的TeX系統提供了300多條基本命令,功能雖然強大,但使用起來卻不那麼方便。為此Knuth教授在這些基本命令的基礎上定義了600多條複合命令,構成了名為Plain TeX的巨集包,只可惜由於無法與普通PC機相容,因此流傳得並不十分廣泛。

Plain Tex雖然比原始的TeX更加方便,但其重點還只放在如何排版的層次上,在排版複雜公式時仍然需要大量命令,並且在挖掘它的深層功能時往往需要相當豐富的排版和程式設計技巧。好在TeX系統提供了非常強大的巨集定義功能,因此很多人開始在TeX之上進行二次開發,產生了一些TeX系統的衍生版本,其中最著名的是由美國數學會(AMS)組織人員開發的AMS-TeX和美國計算機學家Leslie Lamport在二十世紀八十年代初開發的LaTeX,其中前者適合於排版複雜的數學公式,而後者則適合於排版普通文章和書籍。LaTeX提供了一整套生成複雜文件所需的高階命令,這樣即使作者沒有掌握複雜的排版和程式設計知識,也可以充分利用TeX系統提供的強大功能,輕輕鬆鬆地完成標題、章節、表格、目錄、索引、公式、圖表等的編排。

隨著LaTeX的逐漸普及,它在許多原本沒有想到的領域中得到了擴充套件,為了建立一個統一的標準,Leslie Lamport、Frank Mittelbach、Chris Rowley和Rainer Sch?pf在1989年開始了名為LaTeX3的專案,旨在建立一個最優的命令集合。該專案的第一個里程碑是在1994年釋出的LaTeX2e,它是LaTeX3出現之前的現行標準版本。

為了安裝和使用上的方便,有人將TeX基本系統包裝起來並添加了一些實用工具,做成了各種Tex發行版本供別人使用,其中常見的有MikTeX、emTeX、PCTeX32、fpTeX、teTeX等,它們大多為自由軟體,可以從網上免費下載獲得。

三、LaTeX排版流程

在使用LaTeX進行排版時,從輸入文字到最後在印表機上得到輸出結果,通常需要經過如圖1所示的幾個步驟。

圖1 LaTeX排版流程
圖1 LaTeX排版流程
  • 編輯

    用編輯器編寫文稿(原始檔),同時插入排版命令。需要注意的是,原始檔必須是純文字格式的,並且通常以.tex作為其副檔名(如hello.tex)。在Linux下建議使用XEmacs或者VIM編輯器,它們都能夠識別LaTeX語法並且可以高亮顯示LaTeX命令中的關鍵字。

  • 編譯

    生成的LaTeX原始檔中如果沒有語法錯誤,那麼就可以使用latex命令進行編譯,生成DVI檔案:

    [[email protected] latex]$ latex hello.tex

    在處理過程中LaTeX會顯示頁號以及可能會有的錯誤和警告資訊,如果在該過程中出現錯誤,則表明原始檔中的某些排版命令有誤,此時應該重新對原始檔進行修改。當LaTeX成功結束這一處理過程後,將生成一個名為hello.dvi的檔案,該檔案是與裝置無關的,它由格式化後的文字以及所需要的字型資訊組成,但是與要使用的印表機的特徵無關,該檔案通常也稱為元檔案(metafile)。

  • 檢視
    在正式列印輸出或者照排製版之前,可以先在計算機螢幕上顯示DVI檔案,察看檔案內容或者排版結果是否合乎要求,如果有不滿意之外,則應重新對LaTeX原始檔進行修改。在Linux下有許多軟體可以用來檢視DVI檔案,其中最常用的是X-Window環境下的xdvi,下面的命令可以用來檢視hello.dvi:[[email protected] latex]$ xdvi hello.dvi由於DVI檔案是與裝置無關的,因而用xdvi在螢幕上看到的結果是不會受到輸出裝置、作業系統、硬體環境等因素影響的。
  • 列印

    DVI元檔案中的資訊最終要被轉化成可以在特定印表機上輸出的形式,該過程是由一個稱為列印驅動程式來完成的,它是與具體印表機相關的。例如,在Linux下可以用下面的命令將hello.dvi送到惠普鐳射印表機上列印:

    [[email protected] latex]$ dvihp hello.dvi
  • 輸出

    在很多場合下,使用latex得到的DVI檔案並不總是需要打印出來,而是要轉化成更加便於閱讀的格式,如PDF(Portable Document Format)或者PS(PostScript),LaTeX系統提供了相應的工具在這些格式之間進行轉換。要將hello.dvi轉化成hello.pdf和hello.ps,可以分別使用如下的命令:

    [[email protected] latex]$ dvipdf hello.dvi 
    [[email protected] latex]$ dvips hello.dvi -o

四、LaTeX系統安裝

Knuth教授無私地貢獻出了TeX系統的原始碼,使之成為一個免費的自由軟體,目前TeX系統有許多發行版本,每個發行版本都是一整套工具的集合,一般都會包括TeX、LaTeX、dvipdf、dvips、pdfTeX等。TeXLive是TUG(TeX User Group)提供給其會員的一個TeX發行版,包含可以在大多數作業系統下執行的TeX系統,以及配套的字型檔和各種巨集包,在網站http://www.tug.org/texlive/上可以找到TexLive的最新訊息。

TeXLive是以光碟映象(ISO)的形式釋出的,在CTAN的官方網站(http://www.ctan.org)上可以下載到最新的壓縮包texlive7-20020604-cd1.iso.bz2和texlive7-20020604-cd2.iso.bz2,兩者分別適用於不同的作業系統。對於Linux作業系統來講,需要下載檔案texlive7-20020604-cd1.iso.bz2,並使用如下命令對其進行解壓縮:

[[email protected] texlive]# bzip2 -d texlive7-20020604-cd1.iso.bz2

在得到texlive7-20020604-cd1.iso檔案之後,可以將其刻錄成CD,也可以用mount命令將其作為檔案系統載入後使用:

[[email protected] texlive]# $mount -t iso9660 -o ro,loop texlive7-20020604-cd1.iso /mnt/texlive

TeXLive的安裝比較容易,首先是將光碟根目錄下的bin和texmf子目錄整個拷貝到硬碟上:

[[email protected] texlive]# mkdir /usr/local/texlive
[[email protected] texlive]# cp /mnt/texlive/bin/ /usr/local/texlive/ -R
[[email protected] texlive]# cp /mnt/texlive/texmf/ /usr/local/texlive/ -R

然後再將TeX系統可執行程式所在的目錄新增到當前使用者的環境變數PATH中去,就可以完成安裝了:

[[email protected] latex]$ export PATH=/usr/local/texlive/bin/i386-linux/:$PATH

安裝好TexLive之後,在命令列方式下輸入tex命令,如果能夠看到如下的提示資訊,則表明TeX系統已經能夠正常工作了:

[[email protected] latex]$ tex
This is TeX, Version 3.14159 (Web2C 7.3.7x)
**

輸入\relax\bye退出TeX,之後就可以在Linux下使用LaTeX來編排高質量的文件了。

五、LaTeX文件處理

LaTeX文稿(即用於排版的原始檔)包含兩部分內容:一部分是正文,也就是需要排版輸出的內容;另一部分是排版控制命令,用於控制版面樣式、字型字形等格式,它們是用反斜槓"\"所引導的字串。

LaTeX文稿的基本格式如下所示:

\documentclass [選項]{類}

全域性命令和定義

\begin{document}

區域性命令和正文

\end{document}

每一個LaTeX文稿都包含導言(preamble)和正文(body)兩個部分。導言是一組命令的集合,它指定整個文稿的全域性引數,如頁面格式、文字尺寸、頁碼、頁首和頁尾等。導言部分必須包含\documetclass命令,以指定文件的版式型別,LaTeX提供了四種最基本的版式型別:book(書籍型)、article(論文型)、report(報告型)和letter(書信型),作者可以根據自己的需要選擇一種合適的型別。

LaTeX文稿的導言部分必須包含\documentclass命令,它通常是導言中的第一條命令,如果導言中再沒有其他命令,LaTeX就會為行寬、邊距、段落間隔、頁面高度和寬度等選擇標準的設定值。導言是用\begin{document}來結束的,緊接這條命令的所有內容都被解釋為正文,它由文字和混雜在其中的排版命令組成。與導言相比,正文中的命令只能起到區域性的作用,即它們只作用於部分文字,如縮排、公式、字型、字號等。LaTeX文稿中的正文是用\end{documnet}命令來結束的,這通常也是整個文稿的結束。

LaTeX文稿是一種自由格式檔案,輸入原始檔時不必考慮每行的長短,也不必考慮單詞之間空白的多少,LaTeX會自動按照排版命令進行編排。下面是一個簡單的LaTeX文稿:

\documentclass[12 pt]{article}
\begin{document}
Hello, world! {\LaTeX} can typeset equations like
\begin{equation}
\int^{2\pi}_0\sin^2\theta d\theta = \frac{1}{2}
\end{equation}
\begin{equation}
\left[
{\bf X} + {\rm a} \ \geq\
\underline{\hat a} \sum_i^N \lim_{x \rightarrow k} \delta C
\right]
\end{equation}
very cool!
\end{document}

在將上述文稿儲存為hello.tex後,再用latex命令進行處理:

[[email protected] latex]$ latex hello.tex
排版後的結果在Linux下可以用xdvi檢視,其效果如圖2所示:
[[email protected] latex]$ xdvi hello.dvi
圖2 LaTeX排版效果
圖2 LaTeX排版效果

六、小結

LaTeX是一個在學術界享有盛名的專業級排版軟體,特別適合於科技論文和書籍的編排,它使得作者能夠專注於寫作的內容,而不是拘泥在每個字應該如何顯示等具體細節,此外在排版複雜的數學公式時,至今還沒有任何軟體可以與 LaTeX 匹敵。LaTeX和Linux一樣屬於自由軟體,藉助於LaTeX這一專業的排版系統,在Linux下完全可以生成比Word等字處理軟體具有更高質量的文件。

參考資料

  • TeXLive是TUG提供的一個TeX發行版,在其官方網站http://www.tug.org上可以瞭解到TeX和TexLive的相關資訊。
  • http://www.latex-project.org是LaTeX的官方網站,包含大量與LaTeX相關的文章,並且可以從中瞭解LaTeX3專案的最新進展情況。
  • Tobias Oetiker的文章The not so Short Introduction to LaTeX,比較全面地介紹了LaTeX系統,在網站http://www.ctan.org/tex-archive/info/lshort/上可以找到該文章。
  • 陳志傑等編著,LaTeX入門與提高,北京:高等教育出版社,2002

相關推薦

專業LaTeX: 在Linux編寫質量

dnf install texlive* dnf install texworks dnf install latex* Linux下的OpenOffice、KWord等字處理軟體雖然在功能上與Microsoft Word類似,但目前在易用性和可用性方面仍然存在

Linux使用vi新建保存時遇到錯誤:E212: Can't open file for writing

mage images roo .cn logs 分享 思路 操作 新建 出現E212: Can‘t open file for writing的問題是由於權限問題導致的,解決方法有以下思路: 1、使用root進行登錄,然後再操作。 2、在使用命令時,前面加sudo

linux刪除大量小

小文件 刪除 linux1、Linux下怎麽刪除大量的小文件或者以數字開頭的小文件?解答:模擬環境,在/tmp目錄下創建1000000個小文件cd /tmp && touch {1..1000000}方法1:[[email protected]/* */ tmp]# ls|eg

linux使用rzsz實現的上傳和下載

輸入 ssh登錄 usr 終端 啟動 mode 裝包 ftw soft 新搞的雲服務器用SecureCRT不支持上傳和下載,沒有找到rz命令。記錄一下如何安裝rz/sz命令的方法。 一、工具說明 在SecureCRT這樣的ssh登錄軟件裏, 通過在L

LinuxOracle 數據被物理誤刪除的恢復

oracle linux 數據文件被物理誤刪除的恢復 #加深對Linux句柄的理解/緊急情況下Oracle的快速恢復不同於從Oracle中drop掉數據文件,在某些情況下,可能會遇到數據庫在運行時數據文件在操作系統級別被刪除,而此時Oracle實例並未崩潰,仍然處於open狀態。此時就要求盡量在最

Linux解壓分包zip(zip/z01/z02)

.com blank linu clas question multiple 壓縮 linux 方法 分包壓縮的zip文件不能被7z解壓,且這種格式是Windows才能創建出來,在Linux下不會以這種方式去壓包。下面是在Linux下處理這種文件的做法: 方法一:

Linux 的幫助及管理

linux的文件管理1、whatis whatis command 或 man -f command 僅能提供命令基本的介紹。不提具體用法。 基於數據庫的查找,優點:檢索速度快;缺點:缺乏實時性 CentOS6 在文件/var/cache/man/whatis中

LinuxC/C++的操作open、fopen與freopen

open fopen freopen open是linux下的底層系統調用函數,fopen與freopen c/c++下的標準I/O庫函數,帶輸入/輸出緩沖。linxu下的fopen是open的封裝函數,fopen最終還是要調用底層的系統調用open。所以在linux下如果需要對設備進行明確的控制

Linux 分割日誌大

日誌 切分 分割 Linux下分割日誌有兩種常用命令 ddsplit(推薦使用)1.dd:作用是用指定大小的塊拷貝一個文件,並在拷貝的同時進行指定的轉換。參數註釋:if=filename:輸入的文件名of=finename:輸出的文件名bs=bytes:一次讀寫的字節數,默認是512bytessk

LinuxC語言的操作

poi 需要 inux 文件 name fcn flag exc 文件描述符 代碼: 1 #include <stdio.h> 2 #include <string.h> 3 #include <fcntl.h> 4 /****

linux解壓rar

lin src linux ges png tool .tar.gz log com 二、下載並安裝rar軟件 2.1 下載mkdir -p /home/oldboy/toolscd /home/oldboy/toolswget http://www.rarlab.com

Linux系統管理——系統管理

vgexport 模塊 方便 isp 高級 username 容量 磁盤故障 proc 1、設定文件系統配額1.1、要求 在內核中執行 以文件系統為單位啟用 對不同組或者用戶的策略不同 根據塊或者節點進行限制 執行軟限制

關於在linux出現stdio.h不存在等gcc標準庫不能找到的解決的方法

應該 ews con boot1 http 一次 body apt 說明 首先說明一下我的系統配置:ubuntu 12.04 ? ? gcc 4.6.3 有幾天沒有

linux制作ISO

ISO制作linux下制作ISO文件有幾種方法,分別如下: 1,從光盤中制作ISO文件 cp /dev/cdrom 路徑/ISO 文件名 例子:cp /dev/cdrom /opt/mycd.iso,也可以用 dd if=/dev/cdrom of=/opt/mycd.iso 2,使用目錄文件制作ISO文件

linuxfind查找後使用xargs和exec進行刪除、壓縮處理。

find exec xargsmtime 文件內容上次修改時間   atime 文件被讀取或訪問的時間   ctime 文件狀態變化時間   mtime 和 atime 的含義都是很容易理解的,而 ctime 則需要更多的解釋。由於 inode 維護著每個文件上的元數據,因此,如果與文件有關的元數據發生變化,

linux軟鏈接的拷貝

rmi mbo cannot per eat tar.gz span code route 最近在編譯libnl庫準備拷貝到其他機器中使用的時候出現無法拷貝問題,原因是sd卡是fat32文件系統格式,這種文件系統不支持linux下的ln軟鏈接文件, void@void-T

linux實現目錄即的完整刪除

truct remove define limits In continue tin mit ret 功能:   1、刪除目錄   2、刪除文件   3、刪除不為空的目錄即下屬文件 #ifndef _DELETE_FILE #define _DELETE_FILE #in

linuxmysql的配置

-name case mysq inno rac connect server serve lin [client]default-character-set = utf8mb4 [mysql]socket = /var/lib/mysql/mysql.sockdefaul

linux誤刪目錄後恢復神器extundelete

pps 技術 2.4 sdn 命令簡介 倉庫 sda mic white 原文鏈接:https://blog.51cto.com/wzlinux/2052835參考:https://blog.csdn.net/cwg_1992/article/details/4631005

【轉】編寫質量代碼改善C#程序的157個建議——建議17:多數情況使用foreach進行循環遍歷

else enume spa 開閉 next str items tro var 建議17:多數情況下使用foreach進行循環遍歷 由於本建議涉及集合的遍歷,所以在開始講解本建議之前,我們不妨來設想一下如何對結合進行遍歷。假設存在一個數組,其遍歷模式可以采用依據索引來