一份其实很短的 LaTeX 入门文档
一份其實很短的 LaTeX 入門文檔
優雅的 LaTeX
有很多 Geeks 或者 LaTeX’s Fanatical Fans 過分地強調了 LaTeX 的一些并非重點的特性,以至于很多初學者會覺得 LaTeX 很神秘很復雜,從而引發了初學者的畏難情緒甚至是負面情緒。盡管這些 Fans 說得并沒有錯,我是說在事實上,但是他們的表達方式和內心態度卻間接阻礙了 LaTeX 的發展,我想這也是和他們的初衷相悖的。
我曾經也受到過這些言論的影響,但幸運的事,至今為止我已經越過了這些障礙,并更加堅信了他們所言(LaTeX 的優點)的正確性。因此我想以我自己的方式,向更多的人介紹 LaTeX —— 這個優雅,但有著自己高傲,卻絕不復雜甚至神秘的東西。
歡迎從校內轉移過來的同學們,因為校內的技術原因,文章無法在校內繼續更新。盡管非我之故,但還是給各位同學說聲抱歉。同時,歡迎各位來到我的博客。: )
ps, 來自 楠哥 的吐槽:“這篇小文的例子因為要兼容中文,變得太復雜了,可以先看這篇文章,再回來看這篇小文”。
你將從這里看到
你不會從這里看到
你應當如何閱讀本文
事實上本文在行文過程中,會有相當多的提示幫助你以正確的方式閱讀。因此有必要在此先介紹一下最常用的一些標記。
表明這些文字在你第一次閱讀本文的時候不需要 了解,其中的內容可能過于深奧,或者過于瑣碎。對于第一次接觸 TeX 的你(如果你是 TeX 資深使用者當然不在此列),如果了解到這些內容可能會使你困惑,并且不會從實際上增加你對 TeX 的領悟以及對 TeX 的好感。
關于編輯器的簡單介紹
流行的 TeX 發行,比如 CTeX 和 TeX Live, 都自帶有一些用于編輯文檔的編輯器。這些編輯器差異還是很大的,從簡單的 TeXworks 到復雜的 WinEdt, 各種各樣。但是不管是什么樣的編輯器,他們都是用來編輯純文本的而已(.tex 就是純文本),換言之他們只是 Windows 自帶的記事本程序的加強版而已,他們本身并不是 TeX 系統的一部分。
所謂 TeX 發行,指的是包括 TeX 系統的各種可執行程序,以及他們執行時需要的一些輔助程序和宏包文檔的集合。
國內的同學安裝 CTeX 的比較多,CTeX 自帶的編輯器,除了大家熟知的 WinEdt,還有 TeXworks。而 TeX Live 則只是自帶了 TeXworks 而已。
本文只介紹 TeXworks 編輯器的使用。原因有二:
- WinEdt 過于繁瑣,很多功能用不上,反而給新手增加學習成本;
- TeXworks 是 TeX Live 自帶的編輯器,而 TeX Live 是跨平臺的,各個操作系統都可以使用。
啟動 TeXworks
啟動 TeXworks 很簡單,不論你安裝的是 CTeX 還是 TeX Live, 你都可以在 Windows 啟動對話框中輸入 texworks 按回車。具體步驟是:
- 按下鍵盤上的 Windows 徽標鍵,同時按下 R 鍵 —— <Win> + R;
- 鍵入 texworks;
- 回車。
如果安裝的是 CTeX,也可以進入開始菜單,從 CTeX - MiKTeX - TeXworks 打開。
啟動之后,TeXworks 的界面,會默認占據你屏幕的左半邊,右半邊留空。效果如下圖:
圖中空白的部分,就是輸入編輯文本的編輯框;在編輯框的右下角,顯示有三個按鈕,最左邊的是換行符模式,中間是編碼模式,右邊標示當前光標所在位置;編輯框的上方是工具欄,工具欄的右半部分使大家熟悉的功能(新建、打開、保存、撤消、恢復、剪切、復制、黏貼、查找、替換),工具欄的左邊則是編譯按鈕 (TeXworks 也稱其為“排版工具”);工具欄在往上,則是菜單欄,此處按下不表。
Windows,Unix 等操作系統對待“換行符”是有不同的。索性 TeXworks 為我們做了足夠的提示,方面我們的選擇(點擊一下那個按鈕就知道了)。一般而言,保持默認即可。
字符(包括英文字符和中文字符)在計算機中,經過編碼以二進制的形式存儲在計算機中。如果編輯器編碼和計算機內部編碼不一致,則會導致所謂“亂碼”的現象。TeXworks 默認使用 UTF8 編碼,在我們的文檔中不需要進行任何更改,而對于一些其他的文檔可能需要按照要求更改編碼。
排版工具
TeXworks 為我們預設了若干排版工具(pdfTeX, pdfLaTeX, XeTeX, XeLaTeX 等),他們分別代表什么實在太過復雜并且也不是當前需要講明白的。本文中需要用到的排版工具主要是 XeLaTeX,關于這些工具的介紹,可以參看后文。當你對 TeX 系統相當熟悉之后,也可以不適用 TeXworks 預設的工具,自己配置排版工具。
TeXworks 默認的排版工具是 pdfLaTeX,如果你希望更改這個默認值,可以在編輯 - 首選項 - 排版 - 處理工具 - 默認 中修改。
Hello, world!
在編輯框中,輸入如下內容:
\documentclass{article} % 這里是導言區 \begin{document} Hello, world! \end{document}將文檔保存在你希望的位置,然后在排版工具的下拉選框中選中 XeLaTeX 后,按下綠色的編譯按鈕。一會兒,如果沒有意外,屏幕的右邊就會出現編譯之后結果。如下圖:
很容易發現,輸入進編輯框的五行文字,在最終輸出的 pdf 檔中只顯示了 1 行。事實上,交付 TeX 處理的文檔內容,并不會全部輸出。
此處的第一行\documentclass{article}中包含了一個控制序列(或稱命令 / 標記)。所謂控制序列,是以反斜杠\開頭,以第一個空格或非字母 的字符結束的一串文字,他們并不被輸出,但是他們會影響輸出文檔的效果。這里的控制序列是documentclass,它后面緊跟著的{article}代表這個控制序列有一個必要的參數,該參數的值為article. 這個控制序列的作用,是調用名為 “article” 的文檔類。
部分控制序列還有被方括號[]包括的可選參數。
所謂文檔類,即是 TeX 系統預設的(或是用戶自定的)一些格式的集合。不同的文檔類在輸出效果上會有差別。
此處的第二行以%開頭。在 TeX 風格的文檔中,從 “%” 開始,到該行末尾的所有字符,都會被 TeX 系統無視,只作為供人類閱讀的注釋。除非在 “%” 前加上反斜杠來取消這一特性,例如
今年的凈利潤為 20\%, 比去年高。此處 “%” 被當做正常的百分號處理,其后的文字也將被正常輸出。
其后出現了控制序列begin,這個控制序列總是與end成對出現。這兩個控制序列以及他們中間的內容被稱為“環境”;他們之后的第一個必要參數總是一致的,被稱為環境名。
只有在 “document” 環境中的內容,才會被正常輸出到文檔中去或是作為控制序列對文檔產生影響。因此,在\end{document}之后插入任何內容都是無效的。
\begin{document}與\documentclass{article}之間的部分被稱為導言區。導言區中的控制序列,通常會影響到整個輸出文檔。
實現中英文混排
除掉成功生成第一個文檔,實現中文輸出(或者說是中英文混排)恐怕是困擾中國的 TeX 使用者的第二個普遍問題。眾所周知,TeX 系統是高教授開發的,當初并沒有考慮到亞洲文字的問題。因此早期的 TeX 系統并不能直接支持中文,必須要用其他工具先處理一下(或者是一些宏包之類的)。
但是現在,XeTeX 原生支持 Unicode,并且可以方便地調用系統字體。可以說解決了困擾中國 TeX 使用者多年的大問題。
此外,除去中文支持,中文的版式處理和標點禁則也是不小的挑戰。好在由吳凌云和江疆牽頭,現在主要由劉海洋和李清(還有我打個醬油)維護的 ctex 宏包 / 文檔類一次性解決了這些問題。ctex 宏包和文檔類的優勢在于,它適用于多種編譯方式;在內部處理好了中文和中文版式的支持,隱藏了這些細節;并且,提供了不少中文用戶需要的功能接口。
為了和原有的日志對接,這里分別用兩種方法來介紹中英文混排。當然,老方法只是為了「兼容性」存在的,推薦使用新方法。
新方法——使用 ctex 文檔類
在 TeXworks 編輯框中輸入以下內容,保存,使用 XeLaTeX 編譯:
\documentclass[UTF8]{ctexart} \begin{document} 你好,world! \end{document}如果沒有意外,你將會看到類似下圖的輸出結果。
相較于之前的例子,這份代碼只有細微的差異:
新版 ctex 宏包和文檔類的默認能夠自動檢測用戶的操作系統,并為之配置合適的字庫。對于 Windows 用戶、Mac OS X 用戶和 Linux 用戶,都無需做任何配置,就能使用 ctex 宏包和文檔類來排版中文。[2015-05-20 更新]
老方法——直接調用 xeCJK 宏包
在 TeXworks 編輯框中輸入以下內容,保存,使用 XeLaTeX 編譯:
\documentclass{article} \usepackage{xeCJK}% 調用 xeCJK 宏包 \setCJKmainfont{SimSun}% 設置 CJK 主字體為 SimSun (宋體) \begin{document} 你好,world! \end{document}如果一切順利,你將會在屏幕右邊的窗口,看見類似下圖的輸出結果。
如果你的 TeX 系統提示找不到字體,請換用你的操作系統中可用的中文字體。關于如何尋找你的操作系統中可用的中文字體,請參考本章最后一小節。
除了 “document” 環境中同時出現了中文和英文,和最原始的 Hello, world! 不同點在于,導言區中多出了兩條控制序列。他們的作用我已經用注釋標出了。
所謂的宏包,就是一系列控制序列的合集。這些控制序列太常用,以至于人們會覺得每次將他們寫在導言區太過繁瑣,于是將他們打包放在同一個文件中,成為所謂的宏包(臺灣方面稱之為“巨集套件”)。\usepackage{·}可以用來調用宏包。
\setCJKmainfont{·}是定義在 “xeCJK” 宏包中的控制序列,它可以用來設置 CJK 主字體。
請注意,TeX 系統對宏包名稱和控制序列的大小寫是敏感的
查看當前操作系統中的字體
Mac OS X 用戶
請參照 這篇博客 中的方法,使用系統自帶的字體冊程序來查看系統字體。
非 Mac OS X 用戶
按照如下步驟打開系統命令行(*nix 系統請打開終端):
- 按下<win> + R;
- 鍵入cmd, 回車。
在系統命令行中輸入如下命令:
fc-list :lang=zh-cn > C:\font_zh-cn.txt(相信使用 *nix 的你,一定知道如何修改上述命令達到你想要的效果)
打開 C 盤根目錄下的 C:\font_zh-cn.txt 純文本文檔,里面的內容就是你當前系統可用的全部中文字體,形如:
每一個小黑框之間的內容,就對應著一個可用的字體。這些小黑框實際上是換行符,但是由于 Windows 系統的原因,他們沒有被正常顯示。如果看著不爽,你可以嘗試用 TeXworks 打開這個文件查看(放心,能夠打開的)。以下是我用 gVim 打開的效果:
其中的每一行,都代表著一個可用的字體。其形式如下:
<字體文件路徑>: <字體標示名 1>, <字體表示名 2>:Style=<字體類型>我們可以看到圖中的倒數第四行
C:/WINDOWS/fonts/simsun.ttc: 宋體,SimSun:style=Regular出現了之前文檔里調用的字體SimSun,此處表明該字體有兩個表示名:宋體和SimSun,我們在\setCJKmainfont{·}中填入任意一個都有同樣的效果。
因此,如果之前的文檔無法編譯通過,請在你的操作系統字體中,選取一個自己喜歡的,將它的字體表示名填入到\setCJKmainfont{·}中去。
組織你的文章
由于新的中英混排方法的引入,這里對于每一個效果提供兩份代碼(如果有必要)。如果沒有特別的需求,應當使用新方法。
作者、標題、日期
保存并用 XeLaTeX 編譯如下文檔,查看效果:
新方法:
\documentclass[UTF8]{ctexart} \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle 你好,world! \end{document}舊方法:
\documentclass{article} % % 設置中文字體 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[SlantFont,BoldFont,CJKchecksingle,CJKnumber]{xeCJK} \newcommand\fontnamehei{SimHei}% 黑體 \newcommand\fontnamesong{SimSun}% 宋體 \newcommand\fontnamekai{KaiTi_GB2312}% 楷體 \newcommand\fontnameyahei{Yahei Mono}% 雅黑 \defaultfontfeatures{Mapping=tex-text} \setCJKmainfont[BoldFont=\fontnamehei,ItalicFont=\fontnamekai]{\fontnamesong} \setCJKmonofont{\fontnameyahei} \setCJKsansfont[BoldFont=\fontnamehei]{\fontnameyahei} % % 設置標題、作者、日期 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle 你好,world! \end{document}導言區復雜了很多,但和之前的文檔主要的區別只有兩處(新方法只有一處,此處第 2 條)。
- 調用xeCJK宏包的時候,添加了一些可選參數;
- 使用\newcommand命令,將系統字體名映射為相應的命令,方便維護;
- 在定義主字體的時候,用[]添加了一些可選參數,增強功能。
在document環境中,除了原本的你好,world!,還多了一個控制序列maketitle。這個控制序列能將在導言區中定義的 標題、作者、日期 按照預定的格式展現出來。
使用titling宏包可以修改上述默認格式。參考TeXdoc.
章節和段落
保存并用 XeLaTeX 編譯如下文檔,查看效果:
新方法:
\documentclass[UTF8]{ctexart} \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle \section{你好中國} 中國在 East Asia. \subsection{Hello Beijing} 北京是 capital of China. \subsubsection{Hello Dongcheng District} \paragraph{Tian'anmen Square} is in the center of Beijing \subparagraph{Chairman Mao} is in the center of 天安門廣場。 \subsection{Hello 山東} \paragraph{山東大學} is one of the best university in 山東。 \end{document}舊方法:
\documentclass{article} % % 設置中文字體 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[SlantFont,BoldFont,CJKchecksingle,CJKnumber]{xeCJK} \newcommand\fontnamehei{SimHei} \newcommand\fontnamesong{SimSun} \newcommand\fontnamekai{KaiTi_GB2312}%KaiTi \newcommand\fontnameyahei{Yahei Mono} \defaultfontfeatures{Mapping=tex-text} \setCJKmainfont[BoldFont=\fontnamehei,ItalicFont=\fontnamekai]{\fontnamesong} \setCJKmonofont{\fontnameyahei} \setCJKsansfont[BoldFont=\fontnamehei]{\fontnameyahei} % % 設置標題、作者、日期 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle \section{你好中國} 中國在East Asia. \subsection{Hello Beijing} 北京是 capital of China. \subsubsection{Hello Dongcheng District} \paragraph{Tian'anmen Square} is in the center of Beijing \subparagraph{Chairman Mao} is in the center of 天安門廣場。 \subsection{Hello 山東} \paragraph{山東大學} is one of the best university in 山東。 \end{document}在文檔類 article/ctexart 中,定義了五個控制序列來調整行文組織結構。他們分別是
- \section{·}
- \subsection{·}
- \subsubsection{·}
- \paragraph{·}
- \subparagraph{·}
在report/ctexrep中,還有\chapter{·};在文檔類book/ctexbook中,還定義了\part{·}。
插入目錄
在上一節的文檔中,找到\maketitle,在它的下面插入控制序列\tableofcontents,保存并用 XeLaTeX 編譯兩次,觀察效果:
新方法:
\documentclass[UTF8]{ctexart} \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle \tableofcontents \section{你好中國} 中國在 East Asia. \subsection{Hello Beijing} 北京是 capital of China. \subsubsection{Hello Dongcheng District} \paragraph{Tian'anmen Square} is in the center of Beijing \subparagraph{Chairman Mao} is in the center of 天安門廣場。 \subsection{Hello 山東} \paragraph{山東大學} is one of the best university in 山東。 \end{document}舊方法:
\documentclass{article} % % 設置中文字體 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage[SlantFont,BoldFont,CJKchecksingle,CJKnumber]{xeCJK} \newcommand\fontnamehei{SimHei} \newcommand\fontnamesong{SimSun} \newcommand\fontnamekai{KaiTi_GB2312}%KaiTi \newcommand\fontnameyahei{Yahei Mono} \defaultfontfeatures{Mapping=tex-text} \setCJKmainfont[BoldFont=\fontnamehei,ItalicFont=\fontnamekai]{\fontnamesong} \setCJKmonofont{\fontnameyahei} \setCJKsansfont[BoldFont=\fontnamehei]{\fontnameyahei} % % 設置標題、作者、日期 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \title{你好,world!} \author{Liam} \date{\today} \begin{document} \maketitle \tableofcontents \section{你好中國} 中國在East Asia.中國在East Asia. \subsection{Hello Beijing} 北京是 capital of China. \subsubsection{Hello Dongcheng District} \paragraph{Tian'anmen Square} is in the center of Beijing \subparagraph{Chairman Mao} is in the center of 天安門廣場。 \subsection{Hello 山東} \paragraph{山東大學} is one of the best university in 山東。 \end{document}試試交換\maketitle和\tableofcontents的順序,看看會發生什么。
請注意,在“你好中國”這一節中,兩次“中國在 East Asia.”中夾有一個空行,但輸出卻只有一個換行并沒有空行。這是因為 LaTeX 將一個換行當做是一個簡單的空格來處理,如果需要換行另起一段,則需要用兩個換行(一個空行)來實現。
插入數學公式
首先恭喜你看到這里。如果前面的幾個文檔你都認真編譯過了,那么你已經可以勝任許多文檔的排版工作。下面我們進入 LaTeX 最為犀利的部分。
這部分的演示中,為了節省篇幅,將取消導言區中中文支持的部分。在實際使用中,你只需要將導言區中的相關部分加上,就可以同時使用中文,并編寫數學公式了——這并不沖突。
為了使用 AMS-LaTeX 提供的數學功能,我們需要在導言區加載amsmath宏包:
\usepackage{amsmath}數學模式
LaTeX 的數學模式有兩種:行內模式 (inline) 和行間模式 (display)。前者在正文的行文中,插入數學公式;后者獨立排列單獨成行。
在行文中,使用$ ... $可以插入行內公式,使用\[ ... \]可以插入行間公式,如果需要對行間公式進行編號,可以使用equation環境:
\begin{equation}
…
\end{equation}
行內公式也可以使用\(...\)來插入,略嫌麻煩。無編號的行間公式也可以使用$$ ... $$來插入,但是這樣做會改變行文的默認行間距,不推薦。
上下標
示例代碼(請保存后,使用 XeLaTeX 編譯,查看效果):
\documentclass{article} % % 數學環境支持 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{amsmath} \begin{document} Einstein 's $E=mc^2$.\[ E=mc^2. \]\begin{equation} E=mc^2. \end{equation} \end{document}值得一提的是,行內公式和行間公式對標點的要求是不同的。行內公式的標點,應該放在數學模式的限定符之外,而行間公式則應該放在數學模式限定符之內。
在數學模式中,需要表示上標,可以使用^來實現(下標則是_)。它默認只作用于之后的一個字符,如果想對連續的幾個字符起作用,請將這些字符用花括號{}括起來,例如:
\[ z = r\cdot e^{2\pi i}. \]根式與分式
根式用\sqrt{·}來表示,分式用\frac{·}{·}來表示(第一個參數為分子,第二個為分母)。
示例代碼(請保存后,使用 XeLaTeX 編譯,查看效果):
\documentclass{article} % % 數學環境支持 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \usepackage{amsmath} \begin{document} $\sqrt{x}$, $\frac{1}{2}$.\[ \sqrt{x}, \]\[ \frac{1}{2}. \] \end{document}可以發現,在行間公式和行內公式中,分式的輸出效果是有差異的。如果要強制行內模式的分式顯示為行間模式的大小,可以使用\dfrac, 反之可以使用\tfrac。
運算符
一些小的運算符,可以在數學模式下直接輸入;另一些需要用控制序列生成,如
\[ \pm\; \times \; \div\; \cdot\; \cap\; \cup\; \geq\; \leq\; \neq\; \approx \; \equiv \]連加、連乘、極限、積分等大型運算符分別用\sum, \prod, \lim, \int生成。他們的上下標在行內公式中被壓縮,以適應行高。我們可以用\limits和\nolimits來強制顯式地指定是否壓縮這些上下標。例如:
$ \sum_{i=1}^n i\quad \prod_{i=1}^n $ $ \sum\limits _{i=1}^n i\quad \prod\limits _{i=1}^n $ \[ \lim_{x\to0}x^2 \quad \int_a^b x^2 dx \] \[ \lim\nolimits _{x\to0}x^2\quad \int\nolimits_a^b x^2 dx \]多重積分可以使用\iint, \iiint, \iiiint, \idotsint 等命令輸入。
\[ \iint\quad \iiint\quad \iiiint\quad \idotsint \]分隔符
各種括號用(), [], \{\}, \langle\rangle 等命令表示;注意花括號通常用來輸入命令和環境的參數,所以在數學公式中它們前面要加\。因為 LaTeX 中|和\|的應用過于隨意,amsmath 宏包推薦用\lvert\rvert和\lVert\rVert取而代之。
為了調整這些分隔符的大小,amsmath 宏包推薦使用\big, \Big, \bigg, \Bigg放在上述括號前面調整大小。
\[ \Bigg(\bigg(\Big(\big((x)\big)\Big)\bigg)\Bigg) \] \[ \Bigg[\bigg[\Big[\big[[x]\big]\Big]\bigg]\Bigg] \] \[ \Bigg \{\bigg \{\Big \{\big \{\{x\}\big \}\Big \}\bigg \}\Bigg\} \] \[ \Bigg\langle\bigg\langle\Big\langle\big\langle\langle x \rangle\big\rangle\Big\rangle\bigg\rangle\Bigg\rangle \] \[ \Bigg\lvert\bigg\lvert\Big\lvert\big\lvert\lvert x \rvert\big\rvert\Big\rvert\bigg\rvert\Bigg\rvert \] \[ \Bigg\lVert\bigg\lVert\Big\lVert\big\lVert\lVert x \rVert\big\rVert\Big\rVert\bigg\rVert\Bigg\rVert \]省略號
省略號用\dots, \cdots, \vdots, \ddots 等命令表示。\dots 和\cdots的縱向位置不同,前者一般用于有下標的序列。
\[ x_1,x_2,\dots ,x_n\quad 1,2,\cdots ,n\quad \vdots\quad \ddots \]矩陣
amsmath 的pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix 等環境可以在矩陣兩邊加上各種分隔符。
\[ \begin{pmatrix} a&b\\c&d \end{pmatrix} \quad \begin{bmatrix} a&b\\c&d \end{bmatrix} \quad \begin{Bmatrix} a&b\\c&d \end{Bmatrix} \quad \begin{vmatrix} a&b\\c&d \end{vmatrix} \quad \begin{Vmatrix} a&b\\c&d \end{Vmatrix} \]效果圖:
使用smallmatrix環境,可以生成行內公式的小矩陣。
Marry has a little matrix $ ( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} ) $.效果圖:
多行公式
有的公式特別長,我們需要手動為他們換行;有幾個公式是一組,我們需要將他們放在一起;還有些類似分段函數,我們需要給它加上一個左邊的花括號。
長公式
不對齊
無須對齊的長公式可以使用multline環境。
\begin{multline} x = a+b+c+{} \\ d+e+f+g \end{multline}效果:
如果不需要編號,可以使用multiline*環境代替。
對齊
需要對齊的公式,可以使用aligned次環境來實現,它必須包含在數學環境之內。
\[\begin{aligned} x ={}& a+b+c+{} \\ &d+e+f+g \end{aligned}\]效果圖:
公式組
無需對齊的公式組可以使用gather環境,需要對齊的公式組可以使用align環境。他們都帶有編號,如果不需要編號可以使用帶星花的版本。
\begin{gather} a = b+c+d \\ x = y+z \end{gather} \begin{align} a &= b+c+d \\ x &= y+z \end{align}效果:
分段函數
分段函數可以用cases次環境來實現,它必須包含在數學環境之內。
\[ y=\ begin{cases} -x,\quad x\leq 0 \\ x,\quad x>0 \end{cases} \]效果圖:
插入圖片和表格
圖片
在 LaTeX 中插入圖片,有很多種方式。最好用的應當屬利用graphicx宏包提供的\includegraphics命令。比如你在你的 TeX 源文件同目錄下,有名為 a.jpg 的圖片,你可以用這樣的方式將它插入到輸出文檔中:
\documentclass{article} \usepackage{graphicx} \begin{document} \includegraphics{a.jpg} \end{document}圖片可能很大,超過了輸出文件的紙張大小,或者干脆就是你自己覺得輸出的效果不爽。這時候你可以用\includegraphics控制序列的可選參數來控制。比如
\includegraphics[width = .8\textwidth]{a.jpg}這樣圖片的寬度會被縮放至頁面寬度的百分之八十,圖片的總高度會按比例縮放。
\includegraphics控制序列還有若干其他的可選參數可供使用,一般并用不到。感興趣的話,可以去查看該宏包的文檔。
表格
tabular環境提供了最簡單的表格功能。它用\hline命令表示橫線,|表示豎線;用&來分列,用\\來換行;每列可以采用居中、居左、居右等橫向對齊方式,分別用l、c、r 來表示。
\begin{tabular}{|l|c|r|}\hline 操作系統& 發行版& 編輯器\\\hline Windows & MikTeX & TexMakerX \\\hline Unix/Linux & teTeX & Kile \\\hline Mac OS & MacTeX & TeXShop \\\hline 通用& TeX Live & TeXworks \\\hline \end{tabular}效果:
浮動體
插圖和表格通常需要占據大塊空間,所以在文字處理軟件中我們經常需要調整他們的位置。figure和table環境可以自動完成這樣的任務;這種自動調整位置的環境稱作浮動體 (float)。我們以figure為例。
\begin{figure}[htbp] \centering \includegraphics{a.jpg} \caption{有圖有真相} \label{fig:myphoto} \end{figure}“htbp” 選項用來指定插圖的理想位置,這幾個字母分別代表 here, top, bottom, float page,也就是就這里、頁頂、頁尾、浮動頁 (專門放浮動體的單獨頁面) 。\centering用來使插圖居中;\caption命令設置插圖標題,LaTeX 會自動給浮動體的標題加上編號。注意\label應該放在標題之后。
圖片和表格的各種特殊效果,限于篇幅此處無法詳敘。請查看最后一章推薦的文檔。
版面設置
頁邊距
設置頁邊距,推薦使用geometry宏包。可以在這里查看它的說明文檔。
比如我希望,將紙張的長度設置為 20cm、寬度設置為 15cm、左邊距 1cm、右邊距 2cm、上邊距 3cm、下邊距 4cm,可以在導言區加上這樣幾行:
\usepackage{geometry} \geometry{papersize={20cm,15cm}} \geometry{left=1cm,right=2cm,top=3cm,bottom=4cm}頁眉頁腳
設置頁眉頁腳,推薦使用fancyhdr宏包。可以在這里查看它的說明文檔。
比如我希望,在頁眉左邊寫上我的名字,中間寫上今天的日期,右邊寫上我的電話;頁腳的正中寫上頁碼;頁眉和正文直接有一道寬為 0.4pt 的橫線分割,可以在導言區加上如下幾行:
\usepackage{fancyhdr} \pagestyle{fancy} \lhead{\author} \chead{\date} \rhead{152xxxxxxxx} \lfoot{} \cfoot{\thepage} \rfoot{} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\headwidth}{\textwidth} \renewcommand{\footrulewidth}{0pt}首行縮進
中國人寫文章,習慣每一段的段首都空出兩個中文漢字的長度。美國人沒有這個習慣,他們每一小節的段首都頂格。為了解決這個問題,我們可以在導言區調用\usepackage{indentfirst}.
就算是這樣,首行縮進的長度,仍然不符合中國人的習慣。我們可以在導言區添加這樣的控制序列\setlength{\parindent}{2.45em}來調整首行縮進的大小。這里的 2.45em 是中文小四號字大小兩個中文字的長度。
行間距
我們可以通過setspace宏包提供的命令來調整行間距。比如在導言區添加如下內容,可以將行距設置為 1.5 倍:
\usepackage{setspace} \onehalfspacing具體可以查看該宏包的文檔。
段間距
我們可以通過修改計數器\parskip的值來調整段間距。例如在導言區添加以下內容
\addtolength{\parskip}{.4em}則可以在原有的基礎上,增加段間距 0.4em. 如果需要減小段間距,只需將該數值改為負值即可。
TeX 家族
恭喜你終于看到了這里。如果你認真完成了上面所有的練習,并琢磨了其中的意義,相信你已經可以用 LaTeX 排版出漂亮的文檔了。現在我們說一點歷史,幫助你更好地理解 TeX 這個系統。
帶有 TeX 的詞,僅僅是本文就已經提到了 TeX, LaTeX, XeLaTeX. 通常中國學生面對不了解意思的一群形近單詞,都會有一種“本能的恐懼”(笑~)。
因此,“大神們”在為新手介紹 TeX 的時候,如果互相爭論 “XXTeX 比 YYTeX 好”或者是“XXTeX 的 YYTeX 如何如何”,往往會蹦出下面這些帶有 TeX 的詞匯:
TeX, pdfTeX, XeTeX, LuaTeX, LaTeX, pdfLaTeX, XeLaTeX …
事實上,這部分的內容太過復雜,我自己的了解也實在有限。所以下面這部分的內容也只能是對我了解到的知識的一個概括,甚至可能有些許謬誤。所以大家只需要將這部分的內容當做是一個參考就可以了。
TeX - LaTeX
TeX 是高德納(Donald Ervin Knuth,1938 年 1 月 10 日 —)教授憤世嫉俗(大霧;追求完美)做出來的排版引擎,同時也是該引擎使用的標記語言(Markup Lang)的名稱。這里所謂的引擎,是指能夠實現斷行、分頁等操作的程序(請注意這并不是定義);這里的標記語言,是指一種將控制命令和文本結合起來的格式,它的主體是其中的文本而控制命令則實現一些特殊效果(同樣請注意這并不是定義)。
你可以在這里找到關于 TeX 引擎的具體描述;
你可以在這里找到關于標記語言的具體描述。
而 LaTeX 則是 L. Lamport (1941 年 2 月 7 日 — ) 教授開發的基于 TeX 的排版系統。實際上 LaTeX 利用 TeX 的控制命令,定義了許多新的控制命令并封裝成一個可執行文件。這個可執行文件會去解釋 LaTeX 新定義的命令成為 TeX 的控制命令,并最終交由 TeX 引擎進行排版。
實際上,LaTeX 是基于一個叫做 plain TeX 的格式的。plain TeX 是高德納教授為了方便用戶,自己基于原始的 TeX 定義的格式,但實際上 plain TeX 的命令仍然十分晦澀。至于原始的 TeX 直接使用的人就更少了,因此 plain TeX 格式逐漸就成為了 TeX 格式的同義詞,盡管他們事實上是不同的。
因此在 TeX - LaTeX 組合中,
pdfTeX - pdfLaTeX
TeX 系統生成的文件是 dvi 格式,雖然可以用其他程序將其轉換為例如 pdf 等更為常見的格式,但是畢竟不方便。
dvi 格式是為了排版而產生的,它本身并不支持所謂的“交叉引用”,pdfTeX 直接輸出 pdf 格式的文檔,這也是 pdfTeX 相對 TeX 進步(易用性方面)的地方。
為了解決這個問題,Hàn Th? Thành 博士在他的博士論文中提出了 pdfTeX 這個對 TeX 引擎的擴展。二者最主要的差別就是 pdfTeX 直接輸出 pdf 格式文檔,而 TeX 引擎則輸出 dvi 格式的文檔。
pdfTeX 的信息可以查看wiki.
pdfLaTeX 這個程序的主要工作依舊是將 LaTeX 格式的文檔進行解釋,不過此次是將解釋之后的結果交付給 pdfTeX 引擎處理。
XeTeX - XeLaTeX
高德納教授在實現 TeX 的當初并沒有考慮到中日韓等字符的處理,而只支持 ASCII 字符。這并不是說中日韓字符就無法使用 TeX 引擎排版了,事實上 TeX 將每個字符用一個框包括起來(這被稱為盒子)然后將一個個的盒子按照一定規則排列起來,因而 TeX 的算法理論上適用于任何字符。ASCII 字符簡單理解,就是在半角模式下你的鍵盤能直接輸出的字符。
在 XeTeX 出現之前,為了能讓 TeX 系統排版中文,國人曾使用了 天元、CCT、CJK 等手段處理中文。其中 天元和 CCT 現在已經基本不用,CJK 因為使用時間長且效果相對較好,現在還有人使用。
不同于 CJK 等方式使用 TeX 和 pdfTeX 這兩個不直接支持 Unicode 字符的引擎,XeTeX 引擎直接支持 Unicode 字符。也就是說現在不使用 CJK 也能排版中日韓文的文檔了,并且這種方式要比之前的方式更加優秀。
XeLaTeX 和 XeTeX 的關系與 pdfLaTeX 和 pdfTeX 的關系類似,這里不再贅述。
使用 XeTeX 引擎需要使用 UTF-8 編碼。
所謂編碼就是字符在計算機儲存時候的對應關系。例如,假設有一種編碼,將漢字“你”對應為數字“1”;“好”對應為數字“2”,則含有“你好”的純文本文件,在計算機中儲存為“12”(讀取文件的時候,將“12”再轉換為“你好”顯示在屏幕上或打印出來)。
UTF-8 編碼是 Unicode 編碼的一種,可以參考它的 wiki.
LuaTeX
LuaTeX 是正在開發完善的一個 TeX 引擎,相對它的前輩們還相當的不完善,這里不贅述。
CTeX - MiKTeX - TeX Live
之前介紹了 TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX 等,他們都是 TeX 家族的一部分。但是作為一個能夠使用的 TeX 系統,僅僅有他們還是不夠的。CTeX, MiKTeX, TeX Live 都是被稱為“發行”的軟件合集。他們包括了上述各種引擎的可執行程序,以及一些文檔類、模板、字體文件、輔助程序等等。其中 CTeX 是建立在 MiKTeX 的基礎之上的。
總結
TeX - pdfTeX - XeTeX - LuaTeX 都是排版引擎,按照先進程度遞增(LuaTeX 尚未完善)。
LaTeX 是一種格式,基于 TeX 格式定義了很多更方便使用的控制命令。上述四個引擎都有對應的程序將 LaTeX 格式解釋成引擎能處理的內容。
CTeX, MiKTeX, TeX Live 都是 TeX 的發行,他們是許許多多東西的集合。
出現問題應當如何處理 / 怎樣聰明地提出你的問題——怎樣從這里畢業
這篇文章原來的名字叫做慢慢愛上 LaTeX,后來行文的過程中發覺 LaTeX 實在是有太多的內容可以講述,越發地沒有把握讓大家僅僅通過這一篇短小的文章就喜歡上 LaTeX,于是改成了現在這個名字。
限于篇幅,還有我的精力,這篇文章事實上還有許多的問題沒有講明白。它僅僅是提供了一些,在你學習使用 LaTeX 可能遇到的問題的解決方案,并不完全,而且沒有教會你如何處理編譯過程中可能遇到的形形色色的錯誤。
所以這最終只能是一篇小文,而不可能成為一篇正式的文檔。
因此,如果通過我這篇小文,體驗到了 LaTeX 帶給你的一些樂趣,有了對 LaTeX 的興趣(如果是這樣,我就已經能夠無比開心了~),請務必去閱讀一些正式的 LaTeX 文檔。
去讀文檔
關于 LaTeX 的文檔有很多,其中有些內容過時地很快。所以有必要告訴大家,哪些文檔應該看,那些文檔不應該看。
索性,這個問題,劉海洋 (milksea) 前輩已經敘述得很清楚了。前段時間,我和幾個朋友,將現在看起來還未過時的文檔打包上傳到了我的博客。參考:
http://liam0205.me/attachment/LaTeX-useful-tools/LaTeX_Docs_2014.rar
遇到問題怎么辦
參考:http://www.wapm.cn/smart-questions/smart-questions-zh.html。
CTeX 論壇提問版:http://bbs.ctex.org/forum.php?mod=forumdisplay&fid=6&page=1
提供一個交流 QQ 群:141877998
出處:http://liam0205.me/2014/09/08/latex-introduction/
總結
以上是生活随笔為你收集整理的一份其实很短的 LaTeX 入门文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 编程之美-数字哑谜和回文方法整理
- 下一篇: 注水抽水问题