1. 程式人生 > >【持續更新】一個簡潔、易用的美賽LaTeX模板:easyMCM

【持續更新】一個簡潔、易用的美賽LaTeX模板:easyMCM

若您無意閱讀下面的這番引入性介紹,想直接下載模板,請點這裡

1 當前美賽模板通行情況的概述

美賽是許多大學生第一次接觸\(\LaTeX\)的機會,但是由於時間安排上的原因,很多人都是在賽前幾天匆匆拾起\(\LaTeX\)編譯器決定用其排版論文。花了一下午安裝編譯器,又花了一晚上琢磨命令列裡彈出來的各種莫名其妙的警告和錯誤……最終,一些隊伍把美賽的時間浪費在對付“難用”的\(\LaTeX\)系統上,失去了許多寶貴的時間。除此以外,網上流傳的各種參差不齊的美賽\(\LaTeX\)模板、\(\LaTeX\)入門教程1,也常常弄得為美賽做準備的初學者們暈頭轉向,無所適從。

目前網際網路上最通行的美賽\(\LaTeX\)

模板是mcmthesis,由王昭禮[email protected])和黃晨成[email protected])先後開發,並上傳到CTAN而成為一個標準的巨集包/文件類,可直接在\(\LaTeX\)中下載使用。這是一個比較專業、精良的模板,結構完整,介面也很完備。作者之一的黃晨成也非常耐心的撰寫了一份優質的模板使用指南:如何使用美賽模板 mcmthesis。但是,該模板對於新手而言還有一定的問題(以下僅僅是我自己的觀點,可能有所偏頗):

  • 該巨集包已經有三年以上沒有更新;最新的釋出版本是v6.2,時間為2016年1月29號。當然,可以說,這幾年來美賽組委會要求的摘要頁和正文格式都沒有太大的調整,但是從mcmthesis
    文件類提供的樣例文件就可以看出其中有若干多餘的成分——標題、作者名、定理證明、程式碼附錄等。這些部分在目前絕大多數的美賽論文中是不需要——甚至是不應該出現的。由此導致的結果是:初學者接觸到的第一份\(\LaTeX\)排出來的美賽論文,並不是標準格式的美賽論文。
  • mcmthesis文件類提供了完備的介面(setup命令)來修改具體的引數,例如在該巨集包下的控制序列
\mcmsetup{tcn = 12345, problem = B, titlepage = true, abstract = true}

就能夠將該份論文的隊伍控制號設定為12345、選題設定為B、標題頁單獨顯示、多顯示一次摘要,等等。但是,對於一般的參賽隊伍而言,許多介面可能是非必需的,因為似乎目前所有的美賽論文都有著一致

的頁面設定要求,不太允許個性化的調整。這可能是由於mcmthesis的作者不太熟悉近幾年來的一般美賽論文格式,也有可能是原作者認為應當將巨集包的功能設定的更加完備一些。

  • 就我去年以來接觸到的一些參賽隊伍來看,許多打算使用\(\LaTeX\)撰寫論文的隊伍實際上還沒有弄清楚\(\LaTeX\)中的一些基本概念。例如,很多隊伍可能就不清楚文件類和巨集包有何差異,或者以為\maketitle命令是所有\(\LaTeX\)文件中都必須的(但在諸如mcmthesis這樣的模板中,就並不需要這個系統預定的命令,文件中將自動實現標題的顯示)。而對於巨集包的設計者而言,這些問題顯然不在考慮之列——巨集包作者已經明確表明,\(\LaTeX\)的學習需要一定時間,因此“不推薦毫無 LaTeX 使用經驗的參賽者使用”。事實上,前面所提到的很多問題,不是由於參賽者“毫無經驗”造成的,而是由於他們沒能接觸到比較好的\(\LaTeX\)入門教材,因此對於這個工具只是一知半解,遇到問題毫無手段。這個問題,主要是由於國內\(\LaTeX\)教材相對“匱乏2\(\LaTeX\)使用者較少所造成的。這是一個客觀存在的問題,短期之內似乎難以解決。美賽的參賽人數還在逐年增加,但似乎無法指望大部分參賽者都能較早的開始學習\(\LaTeX\),並且還能用對教材(以免於片面的理解)。

總體而言,我的觀點是:由於當前國內的\(\LaTeX\)文化仍不深厚,導致許多初學者無法以正確的方式入門\(\LaTeX\),由此導致的結果便是參賽者的\(\LaTeX\)平均水準不夠,即使是使用mcmthesis這樣相當完備的巨集包仍然感到困難3、錯誤頻出(且還不論mcmthesis巨集包在功能上的一些冗餘)。這不僅是我去年參賽時的親身體會,也是我瀏覽網上各種關於\(\LaTeX\)美賽模板使用中之問題時的一個總體觀感。至於網上流傳的其他各種修改自該巨集包的模板,或愛好者自制的模板,就更不值得一提了——至少在最近兩年,我沒有搜到比較合用的其他模板檔案。

2 easymcm巨集包說明

2.1 與mcmthesis的關係之說明

我本人是去年國慶期間開始學習\(\LaTeX\)的。到2018年賽前時,我仍感自己的\(\LaTeX\)水準不足,為此開始尋找合適的美賽\(\LaTeX\)模板。當時我搜到的是mcmthesisv5.0版本,在LaTeXStudio網站上(該網站的維護者就是巨集包作者之一的王昭禮)。下載下來後,發現其許多設定不完全符合當年組委會的要求,為此做了大量修改,同時也將模板中的mcmthesis.sty巨集包檔案進行了細緻的檢查和修改。最後,我將這個經過修改的檔案隨手丟在自己的部落格頁面上,起初也並沒有預料到會有許多人下載使用。這就是之前那個所謂5.0y版本的巨集包的來歷。

比賽結束幾個月後,我才在網際網路上搜到mcmthesis原來是一個已經持續維護到v6.2版本的文件類,而我下載到和用於改進的那個v5.0版本只是2013年的一個比較原始的巨集包。因此,我的部落格上所給出的模板,事實上是從mcmthesis的老版本上偶然修改出來的一個比較粗糙的巨集包檔案。

2.2 easymcm巨集包的簡介

2019年美賽又即將到來。本人作為一個曾經的美賽參賽者,希望自己部落格上所釋出的美賽模板能夠繼續幫助到新一年(乃至以後)的參賽者;為此,重新檢查了v5.0y版本的巨集包檔案,加以完善和改進,並最終制成了一個新的巨集包檔案easymcm.sty(不是文件類)。該巨集包相對於前面所介紹的mcmthesis有以下的獨特之處:

  1. easymcm是由mcmthesis的老版本直接改進過來的,沒有做標準化的處理,總體比較簡單——因此,其沒有太多的介面,基本功能都已具備,不需要使用者做個性化的調整。
  2. easymcm經改進後同時支援pdflatexxelatex等多種編譯方式。考慮到目前許多參賽隊伍仍然習慣於使用\(\mathbb{C}\TeX\)套裝下的pdfTexify模式(本質就是pdflatex)進行編譯,這一改進是有一定意義的。
  3. easymcm.sty檔案中有完備詳細的中文註釋。對於\(\LaTeX\)巨集包的設計而言,這一做法是不必要的(甚至可能是愚蠢的,因為這顯得不專業),但我認為美賽恰是許多大學生學習\(\LaTeX\)的最佳機會——因此,這一安排使得初學者自己檢視修改巨集包內的若干引數成為可能。
  4. 由於作者我本人蔘加了2018年的美賽,因此可以保證easymcm巨集包提供的頁面設計是符合近幾年來美賽組委會的規範要求的。同時,我也會持續關注之後幾年美賽的情況,及時的改進頁面設計以符合組委會的規範。
  5. 巨集包檔案的結構非常簡單,實現的功能也並不繁複,因此容錯率較高(經得起各位初學者以亂七八糟的命令來折騰)。

本人制作和改進easymcm這個美賽模板檔案,並無任何功利企圖,純粹是為了分享給需要的人。我的想法僅僅是:目前中文網際網路上的相關內容仍顯缺乏,倘我的這一點點工作能夠起到一定幫助,則其意義便已達成。(mcmthesis作者之一黃晨成在部落格中提到將巨集包分享出來提供了一定的成就感,而對於我這個業餘的學生而言甚至連這一點也提不上了。我僅認為是舉手之勞。)同時,鑑於本模板檔案的性質比較特殊(偶然的二次開發),因此我將和原來一樣,僅將這個模板檔案扔在網上,供大家自行取用(而沒有更多打算)。僅此。

2.3 美賽模板下載地址

注:釋出版中附帶有一篇樣例論文,是我們隊賽前做的2017年MCM的A題論文,排版樣式、程式碼結構僅供參考和學習。(論文內容就別在意了……

最新版本:v5.01(2018.10.3釋出)

作者將持續關注比賽動態,若出現問題將及時更新。也歡迎各位讀者直接聯絡我反映問題!

3 常見問題 Q&A

原則上我似乎應該把這些內容整合為一個說明文件,但是由於時間和精力有限,所以暫時無法做到。希望在有餘力時可以把這件事情做好。

Q1: 如何將頁首頂部的MCM改成ICM?或者,如何修改\刪除頂部的那兩句話?

Answer: 這兩部分內容在easymcm巨集包中分別有兩個簡易介面來修改:\content\notes。若要將MCM的題頭改為ICM的題頭,請在主程式碼檔案PAPER.tex中的導言區4(具體是\begin{document}命令之前)加入以下命令:

\renewcommand{\contest}{Interdisciplinary Contest in Modeling (ICM) Summary Sheet}

就能夠將上面的MCM題頭改為ICM的題頭。類似地,如果需要將其改為其他類似的內容,替換上面的引數即可。下方的括號說明則可由\notes引數修改,例如在導言區加入命令

\renewcommand{\notes}{}

就能夠將summary sheet頂部的說明(Attach a copy of this page to each copy of your solution paper.)去掉。

Q2: 如何縮小summary sheet頂部的空白?

Answer: 原來我是建議使用者去把巨集包裡面的間距引數修改一下。現在,我的建議是:沒必要改,用巨集包就不要關注這種細枝末節,內容比格式更重要。Summary sheet上的字型大小和行距我都已經設定的很小了,如果還嫌頂部空大,估計是摘要寫太多了。自己再刪減一下。

Q3: 我在PAPER.tex檔案中應用了geometry巨集包修改頁邊距,結果頁面上的佈局出現了混亂。這是怎麼一會事?

Answer: 因為easymcm巨集包中已經應用geometry巨集包設定過頁邊距了,再用一次當然會出錯。一般情況下,這個引數沒有必要再改了,這對論文的評審沒有任何影響;實在需要修改,請到easymcm.sty巨集包檔案中修改(不推薦)。其他巨集包類似,我個人認為easymcm中已經集成了絕大多數的基礎常用巨集包,請使用者不要在原始碼中再增加巨集包了。

其他問題將陸續更新。最後,祝各位美賽大捷,保M衝O~

  1. 一些仍然是以\(\mathbb{C}\TeX\)套裝作為基礎的,而這個系統已經不再被推薦了。

  2. 所謂的“匱乏”是相對的。雖然確實已經有好幾本非常不錯的中文入門書,但是這類書籍的總體規模卻遠遠不足以讓任何一個初學者都能找到門道——他們首先能搜到的可能是網上各種業餘的“LaTeX入門指南”,而非這些較好的入門書籍。大部分圖書館或書店中關於\(\LaTeX\)的書籍存量都很低,至於國外的經典專著(諸如“原本”The TeXBook之類的)則甚至無法在國內直接獲取到。這可能是一個歷史性問題。

  3. 因此我的看法是,mcmthesis是很不錯的,但是(1)許多參賽隊伍的水準仍不足以使用;(2)很多人甚至搜不到有這樣一個模板,因為其釋出主頁是在CTAN這樣的官方網站,或者GitHub這樣的程式設計師專用平臺上,在百度這樣的“大眾”搜尋引擎上恐怕是搜不到的。

  4. 要是你不知道導言區在哪兒……請再好好檢查一下自己\(\LaTeX\)的姿勢水平。