王爽 趙會(huì)洋
摘 要:LaTex是國際公認(rèn)的一個(gè)非常出色的排版工具,對(duì)各類科技工作者的研究發(fā)表起著非常重要的輔助作用。不同于Word排版的所見即所得,LaTex是基于不同的命令實(shí)現(xiàn)排版的,因此對(duì)于初學(xué)者來說有一定的難度。本文基于程序員的思維,研究編程中的變量、函數(shù)等重要內(nèi)容與LaTex排版的關(guān)系。這對(duì)快速學(xué)習(xí)與掌握LaTex具有重要的作用,對(duì)靈活運(yùn)用LaTex進(jìn)行排版具有實(shí)際意義。
關(guān)鍵詞: LaTex;編程;排版;變量;函數(shù)
文章編號(hào): 2095-2163(2019)03-0199-03 中圖分類號(hào): TP317.2 文獻(xiàn)標(biāo)志碼: A
0 引 言
TEX 是高德納 (Donald E.Knuth) 開發(fā)的、以排版文字和數(shù)學(xué)公式為目的的一個(gè)計(jì)算機(jī)軟件[1]。LaTeX是對(duì)TEX的封裝和拓展,擁有比原來TEX格式(Plain TEX)更為規(guī)范的命令和一整套預(yù)定義的格式,隱藏了不少排版方面的細(xì)節(jié),可以讓使用者相對(duì)容易地以較高質(zhì)量排版和印刷擬發(fā)表的作品。LaTeX 的最初開發(fā)者為 Lamport 博士[2]。目前,LaTeX已成為國際學(xué)術(shù)界熱門流行的排版系統(tǒng)之一 許多國際著名的出版機(jī)構(gòu)和期刊編輯部都要求或推薦其作者使用 LaTeX 投稿[3]。關(guān)于LaTex 的基礎(chǔ)知識(shí)和在科技論文寫作中的應(yīng)用 在國內(nèi)外的文獻(xiàn)中也可見到相關(guān)報(bào)道及探討[4-7]。對(duì)于初學(xué)者而言,LaTeX讓人望而卻步[3]??紤]到時(shí)下有數(shù)量頗為可觀的科技工作者具備編程的基礎(chǔ),因此,本文將以程序員的思維研究LaTex學(xué)習(xí),通過對(duì)比學(xué)習(xí)的方法及通俗易懂的案例使讀者能夠達(dá)到LaTex的快速入門。
1 變量的定義與使用
變量是用來存儲(chǔ)各類數(shù)據(jù)的符號(hào)。在變量定義之后,就可以在其它位置使用該變量名代替其所要表達(dá)的值。如果要改變變量的值,也只需要在定義的位置修改,所有使用該變量的地方都會(huì)用新的值代替。這就是設(shè)置變量的好處。下面將Java中的變量定義和LaTex中的變量定義格式進(jìn)行對(duì)比。
在Java中自定義變量的格式如下:
變量類型 變量名=變量值
在LaTex中自定義變量的格式如下:
\\newcommand{變量名}{變量值}
通過上面的定義對(duì)比可以看出,LaTex中定義變量不需要類型,但需要一個(gè)關(guān)鍵字newcommand。LaTex中的自定義變量名和系統(tǒng)內(nèi)置的命令一樣,必須以反斜杠開頭,一般由若干個(gè)字母組成。LaTex中的變量值可以是字符串、數(shù)值、布爾值等內(nèi)容,但由于沒有不同的類型符,所以格式是統(tǒng)一的。另外,LaTex中的變量名和變量值之間沒有賦值符號(hào),而是通過括號(hào)來區(qū)分二者。文中將通過實(shí)驗(yàn)來說明變量如何定義與使用,主要包含2個(gè)步驟。對(duì)此可做解析分述如下。
(1)變量定義。LaTex中定義變量是在導(dǎo)言區(qū)進(jìn)行的,下一節(jié)要討論的函數(shù)也在此區(qū)域定義。本實(shí)驗(yàn)中定義3個(gè)類型的變量,分別是字符串型、數(shù)值型和布爾型,如圖1所示。
需要注意的是,LaTex是將用戶想呈現(xiàn)的內(nèi)容經(jīng)過排版之后進(jìn)行輸出,是一個(gè)科技文獻(xiàn)排版工具,而不是一種軟件開發(fā)語言。因此,從本例中可以看出3個(gè)變量的值在定義時(shí)沒有太大的區(qū)別,都是直接書寫。特別是第一個(gè)字符串并沒有雙引號(hào)或單引號(hào),第三個(gè)布爾型只是根據(jù)其值判斷的,從形式上看與字符串并沒有什么區(qū)別。
(2)變量使用。LaTex中使用變量的方法是直接使用變量名,使用變量的位置可以在導(dǎo)言區(qū)、也可以在文檔區(qū)。如果是需要直接輸出的變量,一般放在文檔區(qū)。如果是中間變量,根據(jù)使用場(chǎng)合可能出現(xiàn)在文檔區(qū)或?qū)а詤^(qū)。在圖2中即顯示了上述3個(gè)變量的使用。
由圖2看出,變量在使用時(shí)的格式和定義時(shí)是一樣的,也需要以反斜杠開頭,然后是變量名。變量名后的\\par是另起一段的標(biāo)志,是為了輸出效果而添加的。
(3)結(jié)果輸出。LaTex中所有要輸出的內(nèi)容都要放在文檔區(qū),經(jīng)過編譯之后會(huì)輸出在pdf文檔中。本節(jié)中的實(shí)驗(yàn)輸出結(jié)果如圖3所示。將圖3和圖1對(duì)比后可以看出,輸出的變量值和定義時(shí)是一樣的。
2 函數(shù)
函數(shù)是用來完成特定功能的若干代碼的封裝。因此,相較于變量值是直接給出具體值,函數(shù)體會(huì)有長(zhǎng)有短,具體由函數(shù)的功能復(fù)雜程度決定。另外,函數(shù)需要滿足傳參數(shù)的需要。這里即將Java中和LaTex中函數(shù)的定義與使用進(jìn)行對(duì)比,研究?jī)?nèi)容詳見如下。
2.1 函數(shù)的定義
Java中定義函數(shù)的格式:
[權(quán)限標(biāo)識(shí)符] 返回值 函數(shù)名(參數(shù)列表){函數(shù)體}
LaTex中定義函數(shù)的格式:
\\newcommand{函數(shù)名}[參數(shù)個(gè)數(shù)]{函數(shù)體}
通過對(duì)比發(fā)現(xiàn),首先,LaTex中定義函數(shù)也需要newcommand 關(guān)鍵字。其次,LaTex中沒有權(quán)限標(biāo)識(shí)符,在tex文件的導(dǎo)言區(qū)定義的函數(shù),其作用范圍是整個(gè)tex文件。LaTex中也沒有返回值標(biāo)識(shí),是否有返回值取決于函數(shù)體是否有輸出。再者,形式上兩者之間也有相似的地方,即函數(shù)名、參數(shù)和函數(shù)體。但是在運(yùn)行實(shí)施中,這些相似的地方還是有些區(qū)別的。LaTex的函數(shù)名與變量名一樣,也需要以反斜杠開頭。Java中的參數(shù)部分用的是以圓括號(hào)包括起來的參數(shù)列表,包括若干參數(shù)類型和參數(shù)名,當(dāng)然也可以為空,即沒有任何參數(shù)。而LaTex中的參數(shù)部分用的是以中括號(hào)包括起來的參數(shù)個(gè)數(shù),即只定義了參數(shù)的個(gè)數(shù)而沒有參數(shù)名。最后要比較的是函數(shù)體。Java中的函數(shù)體內(nèi)容非常豐富,而LaTex則相對(duì)簡(jiǎn)單,因?yàn)長(zhǎng)aTex函數(shù)體僅服務(wù)于要排版的內(nèi)容及其格式。
在此基礎(chǔ)上,下面將通過3個(gè)函數(shù)來說明LaTex中函數(shù)的使用,其中分別定義了0個(gè)參數(shù)、1個(gè)參數(shù)和2個(gè)參數(shù)。研究中的案例描述如圖4所示。
在圖4中,函數(shù)\\noparfunction沒有參數(shù),函數(shù)體是輸出一個(gè)字符串,證明該函數(shù)被調(diào)用。函數(shù)\\oneparfunction具有一個(gè)參數(shù),函數(shù)體是輸出字符串和該函數(shù)的參數(shù)值。函數(shù)\\twoparfunction具有2個(gè)參數(shù),函數(shù)體的功能是直接執(zhí)行2個(gè)參數(shù)。
2.2 函數(shù)的使用
接下來調(diào)用上面定義的3個(gè)函數(shù),來說明各函數(shù)的使用方式。案例描述如圖5所示。
在圖5中,第一行調(diào)用了無參的函數(shù)noparfunction;第二行調(diào)用了一個(gè)參數(shù)的函數(shù)oneparfunction,參數(shù)值為3;第三行調(diào)用了2個(gè)參數(shù)的函數(shù)twoparfunction,其中2個(gè)參數(shù)都是字符串;第四行同樣調(diào)用了2個(gè)參數(shù)的函數(shù),但是其中的2個(gè)參數(shù)不再是字符串和數(shù)值,而是分別調(diào)用了無參的函數(shù)和一個(gè)參數(shù)的函數(shù)。因此,在LaTex中,一個(gè)函數(shù)可以作為另一個(gè)函數(shù)的參數(shù)。
2.3 函數(shù)的輸出
綜合前文研究后,就是對(duì)LaTex源文件進(jìn)行編譯,然后輸出到pdf文檔。最終輸出結(jié)果如圖6所示。
在圖6中,第一行是noparfunction的輸出,第二行是oneparfunction的輸出。第三行是twoparfunction函數(shù)的輸出,且參數(shù)是2個(gè)字符串。第四行也是twoparfunction函數(shù)的輸出,但是2個(gè)參數(shù)分別是noparfunction和oneparfunction。由圖6看到,第三行和第四行的輸出是一樣的,因此,通過函數(shù)的嵌套調(diào)用可以實(shí)現(xiàn)復(fù)雜的功能。
3 結(jié)束語
本文立足于程序員的思維角度來討論LaTex的學(xué)習(xí),以編程中最重要的2個(gè)概念—變量和函數(shù),作為本文的研究?jī)?nèi)容,采用對(duì)比的方法,闡明了在LaTex中這2個(gè)概念與Java語言的異同點(diǎn),并通過案例說明了程序員如何高效地做出LaTex的入門學(xué)習(xí)。下一步將繼續(xù)按照該方法的思路,深入探究LaTex中其它知識(shí)的學(xué)習(xí),為更多的科技工作者快速掌握該知識(shí)提供借鑒。
參考文獻(xiàn)
[1]KNUTH D E. The TEXbook, volume A of computers and typesetting[M]. Massachusetts: Addison-Wesley Publishing Company, 1984.
[2] LAMPORT L. LATeX: A document preparation system (user's guide and reference manual)[M]. 2nd ed. USA:Addison-Wesley Professional, 1994.
[3] 龍靜, 尚嬋妤, 孫云志. 定制科技期刊LaTeX論文模板的思路和實(shí)踐[J]. 中國科技期刊研究, 2015, 26(9): 975-980.
[4] 劉海洋. LATEX 入門[M]. 北京: 電子工業(yè)出版社, 2013.
[5] 馬加佳. LaTeX與Word文件的相互轉(zhuǎn)換[J]. 中國科技期刊研究, 2014, 25(3): 378-382.
[6] 俞依玲, 張林琳. LaTeX軟件在學(xué)術(shù)論文排版中的應(yīng)用[J]. 價(jià)值工程, 2012, 31(35): 209-210.
[7] 趙新科. 淺析LaTex在科技期刊與哲社期刊排版上的應(yīng)用[J]. 大眾科技, 2016, 18(1): 131-132.