置頂介紹文

這裡主要放一些關於數學和 LaTeX 的文章, 文章內的檔案一律用 xelatex 編譯而成。
如果你想下載我的 tex 檔回去修改編譯, 請將 preamble.7z 解壓縮後和 tex 檔放在同一個資料夾中即可編譯。
部落格內的文章也有部份是網路或書籍中的資料經過統整編輯而成, 如有侵權請告知。
有任何問題也歡迎留言或 E-mail 給我。

2016年12月11日 星期日

LaTeX 自訂指令 (command) 基礎篇

LaTeX 裡有一大堆的指令, 不過用久了還是覺得不夠用或是常用的一直輸入很煩, 所以我們來談談如何自訂指令 (又或者稱為巨集指令)。

雖然在本文中我們用指令一詞, 不過事實上這就是巨集 (macro) 了, 只是好像一看到巨集大家都會覺得是高端使用者的玩意兒, 事實上在 LaTeX 裡, 巨集指令是相當常用, 也是用 LaTeX 的人一定要學會的技能。

先來定義一個新的指令 (command), 如下例, 我們可以把常用的字串包在一起成為一個新的指令, 那麼將來只要輸入這個指令就可以了。

......
\newcommand{\stuinf}{\hfill 班級:\underline{\hspace{2cm}}座號:\underline{\hspace{1cm}}姓名:\underline{\hspace{3cm}} \\}

\begin{document}

\stuinf

\end{document}

不過只是這樣還不夠, 我們希望能定義出像 LaTeX 一樣能輸入其他文字 (也就是帶有參數) 的指令, 如下例:

......
\newcommand{\by}[1]{\hfill【#1】}

\begin{document}

這可能是一個考題。\by{108學測}

\end{document}

接在新指令後的 [1] 表示可以"必須"有一個大括號, 對應到指令裡的 #1, 如果想要更多的變量, 可以這麼做:

......
\newcommand{\testtitle}[3]{臺北市立麥斯高中 #1學年度第#2學期數學科#考卷}

\begin{document}

\testtitle{105}{2}{期末}

\end{document}

有時候我們不想要每次都輸入所有的參數, 可以選擇性的輸入(未輸入的參數就留白或忽略); 又希望未輸入時, 參數能有預設值, 輸入後又能改變參數, 那麼我們再來看最後這個例子:

......
\newlength{\fillspace}
\setlength{\fillspace}{1cm}
\newcommand{\exf}[2][]{\underline{\hspace{#1\fillspace}#2}}
\newcommand{\exff}[2][3.5]{\underline{\hspace{#1\fillspace}#2}}

\begin{document}

\exf{test1}

\exf[2]{test1}

\exff{test2}

\exff[4.5]{test2}

\end{document}

我在這個例子裡定義了一個長度 (length), 有機會再另外談。另外我定義了兩個新的指令, \exf, \exff, 這兩個指令在 [2] 之後都還有另一個 [], 用來表示第一個參數 #1 為選擇性輸入(要輸入時需用中括號), \exf 的 [] 裡沒有任何預設值, 而 \exff 的 [3.5] 則表示未輸入參數時就自動代入參數 3.5, 來看看結果是什麼:


結果分別是留白底線 1cm, 2cm, 3.5cm 和 4.5cm。

要自訂指令有兩點需要注意的是, 第一, 新的指令不能是 LaTeX 裡已經有的指令; 第二, 在 LaTeX 裡, 大小寫指的是不同的指令, 可以善加利用。

沒有留言:

張貼留言