基本上是從[這個網站](https://www.overleaf.com/learn/latex/Learn_LaTeX_in_30_minutes)中,挑出我最一開始接觸 Latex 有用到的部分。 裡面涵蓋的東西更詳細,推薦! 其他參考資料: - Princeton 的一個非常短的 [latex beginner's guide](https://www.cs.princeton.edu/courses/archive/spr10/cos433/Latex/latex-guide.pdf) - [TEX for the Impatient](https://ctan.mirror.twds.com.tw/tex-archive/info/impatient/book.pdf) > 在查 Knuth 寫的 *The TeXbook* 是否值得看時,別人推薦這本 *TEX for the Impatient*,說是比較簡短、只是要用的話比較適合,但我看了還是覺得內容很多就是了。 >> Knuth 是 Latex 的創造者,也是演算法常聽到(如 KMP algorithm)的那個 Knuth。 - Note: Latex is ++not sensitive to indention++,所以以下的各種 command 排版都可以按照自己喜歡的方式任意 indent。 # 下載、基礎設定 到[這個地方](https://www.latex-project.org/get/)根據自己的電腦選擇下載: ![image](https://hackmd.io/_uploads/HktBXLDGA.png) 下載完,因為我是用 vscode 寫,所以可以根據這個[超詳細的步驟](https://mathjiajia.github.io/vscode-and-latex/)做完所有基礎設定。 > $\rightarrow$ 下載完 Latex 的話,就可以從 Step 3 開始。 # 文字 ## 大小 - 本節內容參考自[這篇文章](https://latex-tutorial.com/changing-font-size/#:~:text=Change%20the%20font%20size%20of,option%20to%20the%20%5Cdocumentclass%20command.) 在我們選定我們的 document class 時,一開始的文字大小就是該類型的預設大小,大部分會是 10pt。 > $\rightarrow$ 這個大小也就是之後我們如果用 `\normalsize` command 會產生的大小。 ### 調整整個文件文字大小 在 standard classes 如 document, book, letter, report 中,我們有三種大小可選擇: ++10, 11, 12 pt++ 如果要更改整個文件的文字大小,可以在一開始宣告 `\documentclass{article}` 時寫成這樣: ``` \documentclass[11pt]{article} ``` > $\rightarrow$ 11 可以替換成 10(預設)或 12 - Note:在調整整篇文章的文字大小時,也就同時改變了 `\normalsize` 的基準,因此其他設定大小的 command,對應到的大小也會跟著改變。 > 可參考下方下一小節的表格 ### 調整特定文字大小 ![image](https://hackmd.io/_uploads/r10BUNjfR.png) > 最上方一排的 size 為預設大小設定為多少 > > $\rightarrow$ 如果這些大小不夠用,可到上面「文字 -> 大小」開頭處,點選文章連結,有加入額外的 package 來設定其他大小的介紹。 簡易調節特定一行文字大小的方式: $\rightarrow$ 在要更改大小的那行前面++插入上方表格最左那排的 command,與要更改大小的文字一起用 `{}` 包起來++,就能更改成對應的大小。例子如下: ![image](https://hackmd.io/_uploads/r1nItVszR.png) > 我想將 "Why modulation is used, 3 reasons:" 這句話加大,因此前面加上 `\large` 之後,再用 `{}` 包住,變成 `{\large Why modulation is used, 3 reasons:}`。 結果會變成這樣: ![image](https://hackmd.io/_uploads/BymQ5VsGA.png) > 雖然對比起來有點不明顯 XD 不過確實有稍微大一點,變成 `\large` 的 12 pt ## 色彩 加入 `\usepackage[dvipsnames]{xcolor}` 例子: ``` \documentclass{article} \usepackage[dvipsnames]{xcolor} \begin{document} ... \end{document} ``` 色彩名稱: ![image](https://hackmd.io/_uploads/SkqRIBPzR.png) ### 文字本身顏色 - 記得先加入 package `\usepackage[dvipsnames]{xcolor}` ``` \documentclass{article} \usepackage[dvipsnames]{xcolor} \begin{document} \textcolor{red}{想變成紅色的字} \end{document} ``` $\rightarrow$ 如果要把紅色改成其他顏色,只要把顏色名稱按照上方色彩名稱的表更改即可。 ### 螢光筆 - 記得先加入 package `\usepackage[dvipsnames]{xcolor}` ``` \documentclass{article} \usepackage[dvipsnames]{xcolor} \begin{document} \colorbox{yellow}{想畫黃色螢光筆的字} \end{document} ``` ## 底線/粗體/斜體 - `\underline{要畫底線的字}` - `\textbf{要使用粗體的字}` - `\emph{要使用斜體的字}` # 排版 ## 插入空格 ### 插入一個空格 如果是在文字之間插入一個空格,只需單純按一個空白鍵即可;但是如果是在數學式(被兩個 `$` 或 `$$` 包住的地方)中需要空一格,需手動在要空格的地方插入 <font color = "green">`\`</font> ### 插入多個空格 不管是在寫數學式的情況下,還是一般的文字,插入多個空格都可以輸入煆列幾種指令來插入不同大小的空格: - <font color = "green">`\quad`</font>:空 1eM (一個字母 M 的寬度) - <font color = "green">`\qquad`</font>:空 2eM (兩個字母 M 的寬度) - <font color = "green">`\hspace{自填空格大小}`</font> / <font color = "green">`\hspace*{自填空格大小}`</font>:空一個自訂大小的空格(例如可在 `{}` 內填入 2cm) > 有沒有 `*` 的差別在於++有`*` 的會強制空格,沒有 `*` 的則不會++,意思也就是如果剛好在一行最後面的加入空格,遇到換行時 `\hspace{自填空格大小}` 會縮小成只空一格, `\hspace*{自填空格大小}` 則是即使遇到換行,仍然會空指定的大小。 Note:<font color = "red">在 hackmd 中如果要使用上述指令,需用 `$$` 包住指令,但 Latex 不用。</font> ## 分行 / 取消分行 ### 分行 在想分行的地方加入 <font color = "green">`\\`</font> 即可。 例子: ``` 這是第一行 \\ 這是第二行 \\ 這是第三行 \\ ``` ### 取消分行 如果設定每段的開頭自動分行,但突然有一段不想這麼做,或是任何不想要 indent 的情況,可以在不想分行的文字前面加入 <font color = "green">`\noindent`</font> ![image](https://hackmd.io/_uploads/BJspJVjfA.png) 這樣一來,長得就會像這樣子: ![image](https://hackmd.io/_uploads/r1axgEjGR.png) 原本如果沒有在 `Q:...` 前面加 `\noindent` 時,如下: ![image](https://hackmd.io/_uploads/BkArlEsMR.png) 會長這樣: ![image](https://hackmd.io/_uploads/r128xNjzR.png) ## 分段 方法:在要第一段後面,第二段之前加入 <font color = "green">`\par`</font> 例子: ```= 這是第一段... 這是第一段... 這是第一段 \par 這是第二段... 這是第二段... 這是第二段... ``` > 這樣寫的話,line 4 的第二段開頭會縮排。 ## 換頁 換頁有兩種方式,一種是插入 <font color = "green">`\pagebreak`</font> 另一種是插入 <font color = "green">`\newpage`</font>,差異在於手動換頁前的那一頁中的文字排版: `\pagebreak`:手動換頁前的那一頁會++自動分散++,讓版面下方不會有太多空白。 `\newpage`:手動換頁前的那一頁文字排版++照舊,不會自動分散++,版面下方會保留空白。 可參考 stackechange 上[網友回答](https://tex.stackexchange.com/questions/9852/what-is-the-difference-between-page-break-and-new-page)兩者差異的圖: ![image](https://hackmd.io/_uploads/r1wQmIOzC.png) ## 章節標題 Note: 如果是用 `article` (即 `\documentclass{article}`),就不能用 `chapter`(要 `books`、`reports` 才能)。 其中一種使用 `article` 的章節標示為: <font color = "green">`\section{章節名稱}`</font> 或 <font color = "green">`\section*{章節名稱(前面會自動有標號)}`</font> $\rightarrow$ 差異在於有加 `*` 的++不會++在前面自動加 index 如果要在這個章節底下再加小節,再多加一個 <font color = "green">`sub`</font> 即可,再一層同理,例子如下: ``` \section*{Chap 1} \subsection*{1.1} \subsubsection*{1.1.1} ``` 顯示出來的樣子: ![image](https://hackmd.io/_uploads/rJRqSUOMA.png) # 數學式 ## package: amssymb, amsmath 首先第一件事是要加入兩個 package,分別是 `usepackage{amssymb}` 和 `\usepackage{amsmath}`,如下: ``` \documentclass{article} \usepackage{amssymb} \usepackage{amsmath} \begin{document} ... \end{document} ``` 即使有些數學符號沒有加入這兩個 package 也可以用(像是我很常用的 $\rightarrow$ `$\rightarrow$`),但是舉例來說像是 $\therefore$ `$\therefore$` 就必須有 `amssymb` 才能正確顯示。 可以參考[這篇文章](https://milde.users.sourceforge.net/LUCR/Math/mathpackages/amssymb-symbols.pdf)來決定要加入哪個 package,裡面眾多符號對應的 requirements 欄就是說明該符號需要什麼 package。 > 另外 Macro 欄說明要在 `$$` 符號間打什麼才能顯示該符號。 ## 表示方式 數學式會被包在 `$$` 或 `$$$$` 裡,例如 `$F=ma$` 或 `$$F=ma$$`,兩者的差異是 `$$$$` 會讓式子自動縮到中間(像課本裡面的數學式那樣),可以參考下方例子: ![image](https://hackmd.io/_uploads/Hk0dirvfR.png) > 箭頭後面那個 $\frac{high-risk customers}{customer base}$ 就是用前後只用一個 `$` 包住。 > > 跑到中間去的 $P(C=0) + P(C=1) = 1$ 則是前後各用兩個 `$$` 包住。 - 其實大部分的數學表示方式都和 hackmd 是通用的,除了 hackmd 沒有 `$$$$` - [這篇文章](https://hackmd.io/@CynthiaChuang/Basic-LaTeX-Commands) 整理了許多常用的符號,非常方便! ## 各種數學式 ### 多行對齊 當一個式子不斷地算下去,有多個等號時,就可以用下方例子的方式,例子: ```= \begin{equation*} \begin{split} R(\alpha_i|x) & = \sum_{k=1}^K \lambda_{ik}P(C_k|x) \\ & = \sum_{k\not=i}P(C_k|x) \\ & = 1 - P(C_i|x) \end{split} \end{equation*} ``` > 在整個方程式前後分別用 <font color = "green">`\begin{equation*}`</font> 和 <font color = "green">`\end{equation*}`</font> 包住 >> 如果用++沒有 `*`++ 的 <font color = "green">`\begin{equation}`</font> 和 <font color = "green">`\end{equation}`</font>,在式子的右側會根據有出現過的 equation 數自動標號,如下圖右方的 $(1)$ >> ![image](https://hackmd.io/_uploads/Bkh7ZwOGA.png) >> > 中間的第二、六行第二個包住我們的式子的是 <font color = "green">`\begin{split}`</font> 和 <font color = "green">`\end{split}`</font>,這是為了切割多個等號的部分 > > 第三、四行最後的 `\\` 是為了分隔下個等號到下一行去 > > 第四、五行的 `&` 會使後面的等號對齊前一行的 `&` 的位置 > - Note:<font color = "red"> 前後不需要用 `$$` 包住!</font> 表示出來會長這樣: ![image](https://hackmd.io/_uploads/S1VyNOPfR.png) ### 分不同 cases 例子: ```= $$ \lambda_{ik} = \begin{cases} 0 & \text{if} \ i =k \\ 1 & \text{if} \ i \not = k \end{cases} $$ ``` > 一樣前後需要各由 `$$` 包住 > > 中間因為 $\lambda_{ik} =$ 是寫在兩個不同 cases 前,所以先寫 > > 接著再用 <font color = "green">`\begin{cases}`</font> 和 <font color = "green">`\end{cases}`</font> 包住我們的兩種 cases,每個不同的 cases 間像分行一樣用 `\\` 隔開 > > 第四、五行的 `&` 是用於對齊,把 `if` 包起來的 `\text{}` 則是希望單純把 `if` 以英文顯示(如果不這麼做,`if` 會是斜體的數學表示方式) 表示出來會長這樣: ![image](https://hackmd.io/_uploads/S1gFtPwzA.png) # 其餘功能 ## 加入清單 ### 點 把要列的清單前後分別用 <font color = "green">`\begin{itemize}`</font> 和 <font color = "green">`\end{itemize}`</font> 包住,中間則是清單中的各個事項,每個前面加入 `\item` 如下: ``` \begin{itemize} \item 某樣東西 \item 另一樣東西 \item 最後一樣東西 \end{itemize} ``` 這樣的結果就會是像: > - 某樣東西 > - 另一樣東西 > - 最後一樣東西 ### 數字 如果是要列以數字標注的清單的話,清單前後分別用 <font color = "green">`\begin{enumerate}`</font> 和 <font color = "green">`\end{enumerate}`</font> 包住,中間一樣是清單中的各個事項,每個前面加入 `\item` 如下: ``` \begin{enumerate} \item 第一個東西 \item 第二個東西 \item 第三個東西 \end{enumerate} ``` 這樣的結果就會是像: > 1. 第一個東西 > 2. 第二個東西 > 3. 第三個東西 ### 其他標示 如果要使用其他種標示來列清單,需要加入額外的 package <font color = "green">`\usepackage{enumitem}`</font>,接著就是按照原本產生有序清單的方式,再額外加上 label,範例如下: 假設我要用羅馬數字作為清單編號,則在 `{enumerate}` 後面補上 <font color = "green">`[label=\Roman*.]`</font>: ![image](https://hackmd.io/_uploads/Bygl7riGC.png) 這樣清單就會長得像這樣: ![image](https://hackmd.io/_uploads/HJNPmBsGC.png) 其中,`[label=\Roman*.]` 的 `Roman` 還能替換成其他如: - roman $\Rightarrow$ <font color = "green">`[label=\roman*.]`</font> ![roman](https://hackmd.io/_uploads/BJ09EBifR.png) - Alph $\Rightarrow$ <font color = "green">`[label=\Alph*.]`</font> ![Alph](https://hackmd.io/_uploads/rk2H4HozA.png) - alph $\Rightarrow$ <font color = "green">`[label=\alph*.]`</font> ![alph](https://hackmd.io/_uploads/BJxNf4roGR.png) 也可以對這些符號做一點自己的修改,如: ![image](https://hackmd.io/_uploads/rymL8Bjf0.png) > 加上 `()` 結果會是: ![(Roman)](https://hackmd.io/_uploads/ryRY8BszC.png) ## 加入超連結 首先加入 package `\usepackage{hyperref}` - Note:通常 `hyperref` 需要是最後一個被 import 的 package。 加入 package 和一些超連結樣式的設定如下: ```= \documentclass{document} \usepackage{hyperref} \hypersetup{ colorlinks=true, linkcolor=LimeGreen, filecolor=Green, urlcolor=Periwinkle, } \begin{document} ... \end{document} ``` > 其中: > > line 4(`colorlinks=true`):將 link 的地方顯示特殊顏色(預設是紅色) > line 5(`linkcolor=LimeGreen`):設定連結到 cross-referenced elements 產生的 ++internal links++ 的顏色。 >> 舉例來說,連到你的 pdf 裡面的某個 equation、某張圖或某個 section... >> > line 6(`filecolor=Green`):設定連結到 ++local files++ 的顏色。 > line 7(`urlcolor=Periwinkle`):設定連結到++網頁++的顏色。 > > $\rightarrow$ `\hypersetup{}` 裡的這些 parameters 彼此之間要由 `,` 區隔。 > $\rightarrow$ 可將我挑的顏色替換成其他顏色的名稱(可參上方「文字 -> 顏色」中的表。) > $\rightarrow$ 除了上面列出的 parameters,其他還有一些字型、書籤、pdf 資訊等的 parameters 可設定。 ### 連結到網頁 上述設定都完成了以後,在內文中加入連到網頁的超連結有兩種方式 1. <font color = "green">`\href{網址}{這串網址要顯示的文字}`</font> 2. <font color = "green">`\url{網址}`</font> 兩者的差異在於第一種 `\href{}{}` 可以在文章中顯示特定文字,點下去則連到某個網站;第二種 `\url{}` 則是適合用在將文件印下來時可以直接顯示網址。 例子: ![image](https://hackmd.io/_uploads/ByGTVGiMA.png) 顯示出來會長這樣: ![image](https://hackmd.io/_uploads/SklySGoMA.png) ### 連結到 local file 一樣是用 `\href{}{}`,只是括弧內的內容改為: <font color = "green">`\href{file:(你的檔案的path)}{檔案名稱}`</font> 例子: ![108B7504-5891-49C6-BF22-8860637CB998_4_5005_c](https://hackmd.io/_uploads/HJyVtUsG0.jpg) > (灰色框框部分是我的名字) 顯示出來會長這樣: ![image](https://hackmd.io/_uploads/rJgoYIiGC.png)