置頂介紹文

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

2016年12月15日 星期四

LaTeX 自訂巨集指令 - 條件式 xifthen 套件

先前說明了自訂巨集指令 (command) 的基本用法, 這篇我們來介紹如何在指令中加上條件式, 讓指令的使用更靈活。

首先我們需要載入 xifthen 這個套件。每個 LaTeX 的套件通常都用一個說明的檔案, 在 google 輸入名稱就找得到。比方說這個連結: xifthen

當然我們還是會介紹用法, 如下例:

......
\usepackage{xifthen}

\newcommand{\AAA}[1]{\ifthenelse{\equal{#1}{a}}{True}{False}}
\newcommand{\BBB}[1]{\ifthenelse{\equal{#1}{a}}{預設文字A}{#1}}
\newcommand{\CCC}[1][a]{\ifthenelse{\equal{#1}{a}}{預設文字B}{#1}}

\begin{document}

\AAA{a}\; \AAA{b}

\BBB{a}\; \BBB{在這裡寫一些字}

\CCC\; \CCC[還可以設定成有預設值的]

\end{document}

結果如下:

xifthen 提供了條件式的語法為 \ifthenelse{判斷式}{真}{假}, 當我們用在定義新的指令時, 就變成上例中(條件式為 \equal{}{}), 當輸入的值與 a 相等時, 就顯示{真}裡面的內容, 否則顯示{假}的內容。

\ifthen 也有其他的條件式像是:
  1. \cnttest 比較數字大小
  2. \dimtest 比較長度
  3. \isempty 判斷是否為空集合
  4. \endswith 判斷結尾是否為某字串
  5. \isin 判斷內容中是否包令某字串
也可以用 \newtest 自行設定比較複雜的條件式, 用法上都是類似的, 說明檔裡也有很清楚的例子, 在這裡就先不一一細說了。

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 裡, 大小寫指的是不同的指令, 可以善加利用。

2016年12月10日 星期六

LaTeX 好用套件 (package) - catchfilebetweentags

這個套件的名稱實在非常直白 (笑), 用途就是在一個 tex 檔中取出某一段文字, 用來合併檔案十分方便。

在這裡我們有三個文件, 分別是 00.tex, 01.tex 和 02.tex, 我們要在 01.tex 和 02.tex 中取出一段文字放在 00.tex 裡。

% 00.tex

......

\usepackage{catchfilebetweentags}

\begin{document}

這個文件可以先有一些文字

\ExecuteMetaData[01]{mytaga}

\ExecuteMetaData[02]{mytagb}

\end{document}

接下來是 01.tex

% 01.tex

......

\begin{document}

%<*mytaga>
這是會被取走的文字 text part1....
%</mytaga>

\end{document}

然後是 02.tex

% 02.tex

......

\begin{document}

%<*mytagb>
這也是會被取走的文字 text part2....
%</mytagb>

\end{document}

那麼編譯 00.tex 就會出現這樣的結果:


這個套件的優點是, 原本把檔案合併只能用 \input 把整個檔案放到另一檔案中, 但用這個套件可以保證每個檔案都是可以獨立編譯的檔案, 然後如果需要合併則只取文字部份合併即可。

一個小缺點就是這個套件可以合併編譯出 PDF 檔, 但是對原始檔案文字沒有合併的功能。

2016年11月24日 星期四

LaTeX 免費編輯器 Texmaker

鑑於 Miktex 的原生編輯器 Texworks 真的很陽春, 對初學者不是很友善,, 對老手也有一些地方不方便, 所以我花了時間研究了較多人推薦的 Texmaker, 真的很好用喔, 來試試吧。

先列一些 Texmaker 的優點
  1. 有數學輸入的按鈕: 這對初學者很重要, 忘記語法時可以直接找到, 當然常用的最後還是背起來比較方便。
  2. 有指令輸入快速完成: 特別用在很長的指令如 \includegraphics, 只要輸入前幾個單字很按 Enter 就會出現 \includegraphics[scale=•]{•} 了。 
  3. 左列會將 \section 各自編列為大綱, 點選就會跳到該節, 方便找到檔案的位置
  4. 會把引入的外部檔案 (\input, \include) 標示出來, 點選後可以直接開啟, 這對檔案的編修非常的有用喔
  5. 可以收起整節或整個環境的文字段落, 保持版面的清爽
這麼方便的編輯器, 因為不是原生編輯器, 所以我們需要加入一些設定, 以下是用可攜的 (Portable) MikTeX 和可攜的 Texmaker 來設定:
  1. 檔案放置的位置: 先要有一個資料夾 (LaTeX), 在這之中開一個資料夾 (MikTeX), 在 MikTeX 裡放入 MikTeX 和 Texmaker 可攜檔的資料夾 (miktex_portable, texmakerwin32usb)
  2. 把要編譯的檔案用一資料夾打包 (xelatex_work) 放在和剛剛的 MikTeX 同一層
  3. 然後去 texmakerwin32usb 資料夾裡找到 texmaker.exe , 按右鍵將其設為桌面捷徑, 再把這個桌面捷徑剪下放在 LaTeX 裡 (和 xelatex_work 同層), 以後開檔案都要先點這個捷徑, 建議可以放在工作列的快速選單中
接下來, 要在 Texmaker 裡設定編譯的方式, 我們這麼設定為 xelatex 編譯, 方法如下:
  1. 點選 [選項] → [設定 Texmaker]
  2. 首先要修改編譯的方式為 xelatex, 所以要把 [命令] 中 LaTeX 的欄位改為 xelatex -interaction=nonstopmode %.tex 
  3. 必須把 xelatex 欄位修改為相對路徑 "../miktex_portable/miktex/bin/latexmk.exe" -e "$pdflatex=q/pdflatex -synctex=1 -interaction=nonstopmode/" -pdf %.tex 
  4. 把快速編譯選為 XeLaTeX + View PDF, 之後只要按 [F1] 就會用 xelatex 編譯了
  5. 到編輯器裡將字型編碼設定為 UTF-8
這樣所有的設定都完成了, 要開啟檔案的話, 先點選剛剛建立的捷徑 (如果有放到工作列就很方便), 然後按 Ctrl+O 開檔案, Texmaker 會自動記得你的資料夾, 用修改日期排序的話就能快速找到檔案了

2016年10月3日 星期一

LaTeX 表格設計

從 Word 轉移到 LaTeX 的過程中, 就屬表格和插入圖片最難以掌握, 因為似乎總不能隨心所欲的想怎樣就怎樣, 不過學會之後, 會發現 LaTeX 的表格很好掌握喔!

這篇會把所有表格常用的語法, 包括基本表格 (tabular) 環境, 表格內水平置中 (center), 垂直置中, 表格手動內換行 (break line) 以及 設定表格樣式 (newcolumntype) 的語法一併說明。

\documentclass[12pt]{article}

\usepackage[CJKnumber]{xeCJK} %讓中英文字體分開設置
\setCJKmainfont[BoldFont={cwTeX Q Hei Bold}]{cwTeX Q Ming Medium} % 設預設中文字型及預設粗體

\usepackage[a4paper, margin=1.5cm]{geometry}%設定紙張及邊界
\renewcommand{\baselinestretch}{1.4}%設定行距{倍數}

\usepackage{tabularx, array, slashbox}%表格
\usepackage{makecell} %表格內換行
\usepackage{multirow}
\renewcommand{\multirowsetup}{\centering} %合併表格後, 內容水平置中

\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\newcolumntype{M}[1]{>{\centering\arraybackslash}m{#1}}
\newcolumntype{B}[1]{>{\centering\arraybackslash}b{#1}}

\begin{document}

\begin{tabular}{|c|p{0.2\textwidth}|p{5cm}|P{0.3\linewidth}|}
\hline
1-1 & 1-2 & 1-3 & 1-4 \\
\hline
2-1& 這是很多字的第二欄, 所以他會自動換行, 一直換一直換一直換......... & 2-3 \par 第一種手動換行 \par 2-3 & \makecell[t]{2-4 \\ 第二種手動換行 \\ 2-4} \\
\hline
3-1 & \multicolumn{2}{c|}{\makecell[t]{雙欄合併 \\ 換行要用 makecell}} & 3-4 \\
\hline
4-1 & \multicolumn{1}{c|}{單格水平置中} & \multicolumn{1}{r|}{單格水平靠右} & 4-4 \\
\hline
5-1 & \multirow{4}{\linewidth}{垂直置中} & 5-3 & \mbox{} \vspace*{2cm} \\
\hline
\end{tabular}


\end{document}

在 tabular 環境中先設定參數, c 表示該欄均水平置中, p{}表示表格頂端對齊, 大括號內則是欄寬, 可以是絕對長度 (5cm), 也可以是相對長度 (0.2\textwidth)。而在 c 和 p 這兩個表格樣式 (columnstyle) 之間用 | 可以畫出表格的鉛直線。

因為每一欄只能有一種表格樣式 (columnstyle), 用 c 置中就無法再用 p 來設定寬度, 反之亦然, 因此若要置中同時設定表格寬度, 就必須先在宣告區定義
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}, 那麼 LaTeX 會在每一欄一開始加入 \centering\arraybackslash 來讓內容水平置中。

由於表格環境裡已經用 \\ 來表示換列, 所以表格單格內換行必須用 \par 或是 \makecell 來處理。\par 可用在一般的換行, 但是有些地方會行不通; \makecell 則是相當的泛用, 其中參數 [t] 是用來設定為頂端對齊, 若用 [c] 則是中間對齊。

若需要雙欄合併可用 \multicolumn 語法, 第一個指令為合併欄數, 第二個指令為合併後水平對齊方式, c 為置中, r 為置右, 第三欄則為表格內文字。也因為 \multicolumn 可以重新定義水平對齊方式, 所以我們可以用合併"一欄" 的語法來讓單欄表格內容水平置中或水平靠右。

若需要設定表格列高則在末欄加上 \vspace 即可, 如果末欄沒有文字時需要用 \mbox{} 假裝文字。

設定了表格列高後, 如希望文字垂直置中, 則用 \multirow 語法, 第一欄為列數, 用來調整文字位置, 第二欄為欄寬, 用 \linewidth 表示與現在欄寬一致, 第三欄為表格內文字。又因為我在宣告區設定了 \renewcommand{\multirowsetup}{\centering}, 所以內容會呈現水平置中, 此設定預設值為靠左 (\raggedright), 如果希望靠右, 則設定為 \renewcommand{\multirowsetup}{\raggedleft} 即可。

在 LaTeX 或是較正式的排版中, 我們不建議用表格來達成排版的目的, 表格主要還是運用於資料的整理及傳達, 而排版應該在文章中讓 LaTeX 自行計算即可。一旦這樣來理解表格, 那麼 LaTeX 的表格不僅更能表現出我們要的效果, 並且在設定好之後完全沒有格式跑掉的疑慮, 其方便性體驗過就能明白了。

article_latex表格基本功.tex
article_latex表格基本功.pdf

2016年7月12日 星期二

用 LaTeX 做數學考卷 (六) : 答案卷與解答篇 -- 文字標籤與解答對應

很重要所以寫在最上面, 用了 label 和 ref,  要編譯兩次文章才會正常顯示喔!

上一篇我們學會了用 iffalse 的語法來編譯出不同的檔案 - 顯示或不顯示解答, 但這些解答都還是在答案卷裡, 一旦改變題序或增刪題目就會全數重做, 即使複製貼上也是要花許多工夫。

因此這篇要來介紹利用 label 和 ref 的功能, 用文字對應的方式, 只要先設定好答案卷格式, 解答直接寫在題目上, 就可以編譯出純題目卷、含解答的題目卷、空白答案卷以及含解答的答案卷四種卷子, 非常好用, 趕快來學。

因為這篇文章幾乎結合了之前的所有語法, 所以語法的理解需要花較多的時間, 若有不懂, 歡迎留言討論。

先介紹 text label 的用法。

一般而言, label 和 ref 大都用在圖、表和文章章節上, 而在這裡, 因為我們想將寫在文章中的某段文字, 重複在文章的其他地方顯示, 並且即使這段文字經過修改, 其他地方的文字也會顯示修改後的最新文字, 我們將此稱為 text label。


......
\usepackage[colorlinks=true, linkcolor=black]{hyperref}

\makeatletter
\newcommand{\textlabel}[2]{%
\protected@write \@auxout {}{\string \newlabel {#1}{{#2}{\thepage}{#2}{#1}{}}}%
\hypertarget{#1}{#2}}

\makeatother
......

\begin{document}

\textlabel{foo}{這段文字想放在哪, 就放在哪}

\ref{foo}

\end{document}


\usepackage[colorlinks=true, linkcolor=black]{hyperref} 這個套件是在 label 和 ref 之間在編譯出來的 PDF 檔上加入超連結, 如果不用的話必須修改 \makeatletter 的整段語法, 有興趣可以留言跟我拿。

語法看不太懂沒關係, 只要知道 \textlabel 的用法是 \textlabel{標籤}{文字}就可以了。要顯示的地方只要加上 \ref{標籤} 即可。

行文至此, 我們可以想像, 在題目卷打上答案之後, 可以把答案直接用 ref 放到答案卷的表格中。而題目卷上的答案和答案卷表格中的答案都可以利用 iffalse 來決定是否要顯示。

這裡衍生出另一個問題是: 如果每個答案都要手動標籤 (label) 再手動對應 (ref), 那麼一旦改變題序, 就要再手動調整, 因此我們結合計數器, 讓 latex 幫我們在每個解答上按著順序自動編上標籤, 並且自動對應到答案卷的表格中。

接下來的語法需結合前面所有的語法, 所以請直接下載範例檔來研究, 這裡只解釋自動編號的做法。


......
%填充題答案, 直接在格子中填入 \ansfis 即可
\newcounter{fillans}\setcounter{fillans}{1}
\newcommand{\ansfis}{\ansis{\ref{fill\thefillans}}\stepcounter{fillans}}

%題目卷上的答案 用\onlyquestiontrue顯示題目卷, 反之顯示答案
\newif\ifonlyquestion

\usepackage[colorlinks=true, linkcolor=black]{hyperref}%

%填充題解答與標籤(自動) \ansf{<answer>} (放在要填入的位置上) 要有hyperref套件
\newcounter{filllabel}\setcounter{filllabel}{1}
\makeatletter
\newcommand{\ansf}[1]{%
\ifonlyquestion
\protected@write \@auxout {}{\string \newlabel {fill\thefilllabel}{{#1}{\thepage}{#1}{fill\thefilllabel}{}}}%
\hypertarget{fill\thefilllabel}{\ansfill} \stepcounter{filllabel}
\else
\protected@write \@auxout {}{\string \newlabel {fill\thefilllabel}{{#1}{\thepage}{#1}{f\thefilllabel}{}}}%
\hypertarget{fill\thefilllabel}{\underline{\hspace{0.2cm}{\bf\boldmath{#1}}\hspace{0.2cm}}} \stepcounter{filllabel}
\fi }

\makeatother
......

\begin{document}
\showanswertrue
\onlyquestiontrue

\題目卷上的題目與答案
\begin{enumerate}

\item 令 $F$ 是抛物線 $\Gamma$: $y^2=4cx$ 的焦點, $A$、$B$ 是 $\Gamma$ 上相異兩點且 $A$、$B$、$F$三點共線。若 $\overline{AF}=8$、$\overline{BF}=6$, 則 $c=$\ansf{$\pm\frac{24}{7}$}。

\item 已知 $P$ 點為雙曲線 $\frac{x^2}{4}-\frac{y^2}{3}=1$ 上的任意點, $F_1$, $F_2$ 為此雙曲線的兩焦點, 若 $\triangle PF_1F_2$ 恰為等腰三角形, 則 $\triangle PF_1F_2$ 的周長為\ansf{$6\sqrt{7}\pm4$}。

\item 設圓 $C$: $(x+4)^2+y^2=16$, 則通過點 $A(2,0)$且與圓 $C$ 相切之圓的圓心所形成的圖形方程式為\ansf{$\frac{(x+1)^2}{4}-\frac{y^2}{5}=1$}。

\item 設 $P$ 為橢圓$\frac{x^2}{16}+\frac{y^2}{9}=1$上一動點, 則當 $(x,y)=$\ansf{$\left(\frac{16}{5}, \frac{9}{5}\right)$} 時, $x+y$ 有最大值\ansf{$5$}。

\end{enumerate}

%答案卷的表格
\begin{tabularx}{\linewidth}{|X|X|X|X|X|}
\hline
(\no) \ansfis &(\no) \ansfis &(\no) \ansfis \rowvs\\
\hline
(\no) \ansfis &(\no) \ansfis &\blank \rowvs\\
\hline
\end{tabularx}

\end{document}


我設定了一個 \ifonlyquestion 來控制題目卷是否顯示解答, 這樣能和答案卷是否顯示解答分開控制, 如果不想分開, 改成之前的 \ifshowanswer 即可。

\newcounter{filllabel}\setcounter{filllabel}{1} 設定新的計數器 filllabel。

{fill\thefilllabel} 這裡的語法就是標籤, 會依 \ansf 的順序自動以 {fill1}{fill2}{fill3}...設定標籤。

\newcounter{fillans}\setcounter{fillans}{1} 設定答案卷 ref 要用的計數器。
\newcommand{\ansfis}{\ansis{\ref{fill\thefillans}}\stepcounter{fillans}} 用 ref 將剛剛的 label 顯示出來。

上述都是填充題的標籤, 因為在題目卷上的解答格式不同, 我把選擇題和填充題的計數器及標籤分開設定。

如範例所示, 題目和答案在打字時直接寫在一起即可。另外只要在答案卷的表格中, 每個打上 \ansfis 就可以了顯示答案了。也就是說, 答案卷只要算好格子, 其他的語法完全不用變動就可以自動編譯出答案卷了。

article_用latex做數學考卷6-3.tex
article_用latex做數學考卷6-3(純題目與空白卷).pdf
article_用latex做數學考卷6-3(題目和含解答的答案卷).pdf
article_用latex做數學考卷6-3(含解答的題目卷和答案卷).pdf

用 LaTeX 做數學考卷 (六) : 答案卷與解答篇 -- iffalse 邏輯判斷

答案卷通常有兩個需要, 一是空白讓學生考試用的, 二是有答案讓老師改考卷用的。我們不想在兩個不同的檔案中畫出同樣的表格, 再把其中一個檔案填入答案, 因為這樣一來, 若題目有增刪, 同一個動作要再做兩次。因此, 我們要用 iffalse 控制 latex 是否印出答案來。

先學 iffalse 的語法

......
\newif\ifshowanswer
......

\begin{document}

\showanswertrue

\ifshowanswer
  A: 如果用 showanswertrue 就顯示這行
\else
  B: 如果用 showanswerfalse 或是都不加, 就顯示這行
\fi

\end{document}



\newif\ifshowanswer 設定新的 if 指令

\showanswertrue 在文章開頭加入這行, 就會顯示出A行, 否則顯示B行。

語法很簡單, 不過因為我們需要的是不印出答案時是只有格子或編號的樣式, 並且要不斷重複使用, 所以我們打包它。

......
\usepackage{multicol}
\usepackage{multirow}
\renewcommand{\multirowsetup}{\centering} %合併表格後, 內容水平且垂直置中
\renewcommand\arraystretch{1.2}%調整表格內行高

\newif\ifshowanswer

\newcommand{\ansis}[1]{
\ifshowanswer
\multirow{3}{\linewidth} {\large #1}
\else
\multirow{3}{\linewidth} {\mbox{}}
\fi }
......

\begin{document}

\showanswertrue

\begin{enumerate}

\item 填充題

%\hspace{-1cm}
\begin{tabularx}{\linewidth}{|X|X|X|X|X|}
\hline
\no. \ansis{ABC} &\no. \ansis{$\frac{3}{2}$} &\no. \ansis{$3$} \vspace*{1.5cm} \\
\hline
\no. \ansis{$2\pi$} &\no. \ansis{$\sqrt[3]{5}$} &\mbox{} \ansis{\mbox{}} \vspace*{1.5cm} \\
\hline
\end{tabularx}

\end{enumerate}

\end{document}


\usepackage{multicol}
\usepackage{multirow}
\renewcommand{\multirowsetup}{\centering} %合併表格後, 內容水平且垂直置中
\renewcommand\arraystretch{1.2}%調整表格內行高

這四行調整表格設定, 為了將答案在表格內水平並垂直置中, 我們要用合併表格的方式處理。

\multirow{3}{\linewidth} {\large #1} 合併表格的語法是 \multirow{列數}{表格寬度}{文字}, \large 用來把文字放大。表格中就用 \ansis{答案} 來填入解答。

所以, \showanswertrue 就會顯示答案, \showanswerfalse 就是顯示空格。

範例檔只是要讓各位看到差別所以複製了兩個同樣的內容, 實際使用當然只要寫一次就可以囉。

article_用latex做數學考卷6-2.tex
article_用latex做數學考卷6-2.pdf

2016年7月11日 星期一

用 LaTeX 做數學考卷 (六) : 答案卷與解答篇 -- 空白答案卷

用 LaTeX 做數學考卷的最後一個系列 - 答案卷篇, 這篇一樣會分成三小篇:
  1. 用表格 tabularx 製作空白答案卷
  2. 用 iffalse 製作答案卷中是否顯示答案 (空白或解答版)
  3. 用 label 和 ref 把寫在題目後的解答連結到答案卷中
首先是製作空白答案卷:

......
\usepackage{tabularx}

\newcommand{\vs}{\vspace*{1.8cm}}

\begin{document}
\testtitle{臺北市立麥斯高級中學104學年度第1學期數學科期末考答案卷}

\begin{enumerate}

\item 複選題

\hspace{-1cm}
\begin{tabularx}{\textwidth}{|X|X|X|X|X|}
\hline
\no. &\no. &\no. &\no. \vs \\
\hline
\no. &\no. &\no. &\no. \vs \\
\hline
\end{tabularx}

\setcounter{nocounter}{1}
\item 填充題

%\hspace{-1cm}
\begin{tabularx}{\linewidth}{|X|X|X|X|X|}
\hline
(\no) &(\no) &(\no) \vs \\
\hline
(\no) &(\no) &(\no) \vs \\
\hline
(\no) &(\no) &(\no) \vs \\
\hline
(\no) & &\mbox{} \vs \\
\hline
\end{tabularx}


\end{enumerate}
\end{document}


\newcommand{\vs}{\vspace*{1.8cm}} 定義新指令, 方便把表格的列高固定及統一調整。

\begin{tabularx}{\textwidth}{|X|X|X|X|X|} 開始表格環境, |X| 定義表格平均分配欄寬, \textwidth 定義表格總寬度為整頁的內文長度。而填充題用的 \linewidth 則是所在行的文字長度, 兩者有一些不同喔。

\hspace{-1cm} 把表格左移 1cm

\hline 畫橫線

\no. &\no. &\no. &\no. \vs \\ 用 & 來分欄, 用 \\ 來分列, 每列末欄加入 \vs 使其行高變成定義的 1.8cm, 如果末欄為空格, 則需用 \mbox{} 來假裝有文字才能使 \vspace 有作用。

article_用latex做數學考卷6-1.tex
article_用latex做數學考卷6-1.pdf

2016年6月29日 星期三

用 LaTeX 做數學考卷 (五) : 填充題與選填題

這篇介紹利用計數器來做填充題的題目, 讓答案欄能自動編號以及製作選填題的題型。

......
%填充題答案欄 \ansfill
\newcounter{fillcounter}
\setcounter{fillcounter}{1}

\newcommand{\ansfill}{\;\underline{\hspace{0.3cm}({\arabic{fillcounter}})\hspace{0.3cm}}\addtocounter{fillcounter}{1} }

\usepackage{tikz}
%選填題圍繞數字設定 \nc
\usepackage{etoolbox}
\newcommand{\circled}[2][]{%
\tikz[baseline=(char.base)]{%
\node[shape = circle, draw, inner sep = 0.5pt]
(char) {\phantom{\ifblank{#1}{#2}{#1}}};%
\node at (char.center) {\makebox[0pt][c]{#2}};}}
\robustify{\circled}
\newcounter{circlecounter}
\setcounter{circlecounter}{1}
\newcommand{\nc}{{\small \circled[00]{%

\arabic{circlecounter}\addtocounter{circlecounter}{1}}}}
......

\begin{document}
\begin{enumerate}
\item 選填題
\begin{enumerate}
\item 請有理化 $\frac{1}{\sqrt{2}-1}=\underline{\sqrt{\nc}+\nc}$
\item 設 $f(x)$ 為一實係數多項式, 若 $f(3+4i)=4-7i$, 則 $f(3-4i)=\underline{\nc+\nc\; i}$。
\end{enumerate}
\item 填充題
\begin{enumerate}
\item 設一二次函數 $f(x)=x^2+4x-1$, 則當 $x=$\ansfill 時, 有最大值 \ansfill。
\item 有一圓方程式為 $x^2+(y-3)^2=9$, 則此圓圓心為 \ansfill, 半徑為 \ansfill。
\end{enumerate}
\end{enumerate}

\end{document}


\newcounter{fillcounter}: 設定新計數器
\setcounter{fillcounter}{1} : 設定這個計數器從 1 開始數

\underline{\hspace{0.3cm}({\arabic{fillcounter}})\hspace{0.3cm}}: 填充題的格子
\underline 底線 
\hspace{0.3cm}留一小段空白 
({\arabic{fillcounter}}) 將 fillcounter 這個計數器用阿拉伯數字顯示, 並放在 () 中間

\addtocounter{fillcounter}{1}: 最後將 fillcounter 這個計數器加 1

然後只要在要問題的空格打上 \ansfill 就可以了。

選填題的圍繞字元基本上用 tikz 畫出圓, 然後用計數器將數字填入, 事實上使用的機會也很少, 這裡只說明這一行: \newcommand{\nc}{{\small \circled[00]{% 這裡的 \small 是改變字體的大小, 如果覺得太大, 一樣可以用 \footnotesize, \scriptsize 甚至是 \tiny 讓字體縮小。

2016年6月25日 星期六

用 LaTeX 做數學考卷 (四) : 畫圖篇 - 浮動環境 (wrapfigure) 與條列環境 (item) 共存

這是畫圖篇的最後一篇了。關於圖片的位置, 雖然我們都喜歡手動調整, 但是在專業的排版上, 為了閱讀上的方便, 圖片是有其固定的位置的。就書本而言, 圖片應該放在每頁的正上方, 置中並佔一整行, 也就是不用文繞圖的方式排版; 而對考卷來說, 我的建議是如果整張卷只有一個圖片, 可以用文繞圖放在題目之後, 如果兩張圖片以上, 應視圖片大小以 minipage 並排放在考卷上方或題與題之間, 並佔一整行。

最後, 針對 wrapfigure 和 item 不能共存的問題, 做以下的手動修正:

..........
%文繞圖 wrapfigure 和 條列式環境 item 並列, 需在 enumerate 環境之中
%\itemwrap{<先用 \begin{wrapfigure} 環境插入圖片, 再接著文字>}
  \newcommand{\itemwrap}[1]{
  \item \parbox[t]{\dimexpr\textwidth-\leftmargin}{
  \vspace{-3.2mm}#1}}


%\itemwraps{<需縮排的行數>}{<圖片寬度(配合上面寬度)>}{<文字>}
\newcommand{\itemwraps}[3]{
  \item \parbox[t]{\dimexpr\textwidth-\leftmargin}{%
  \vspace{-3.2mm}
  \begin{wrapfigure}[#1]{r}{#2}
  \end{wrapfigure}#3}}
...........

\begin{document}


\begin{enumerate}

\itemwrap{這裡放 wrapfigure 和文字}

\itemwraps{第二項也要跟著縮排}

\end{document}

\newcommand{\itemwrap}[1]{ 定義 \itemwrap [1] 代表下列指令中有一個文字輸入欄位 {}
\item \parbox[t]{\dimexpr\textwidth-\leftmargin}{ 自動計算位置和斷行
\vspace{-3.2mm}#1}} 文字上移到與 \item 對齊的位置, 可手動微調

使用上為 \itemwrap{}

\newcommand{\itemwraps}[3]{ : [3] 代表指令中要有三個文字輸入欄位 {}
\item \parbox[t]{\dimexpr\textwidth-\leftmargin}{%
\vspace{-3.2mm}
\begin{wrapfigure}[#1]{r}{#2}

\end{wrapfigure}#3}}
這個指令是指第二項沒有圖片, 但是因為上面的圖片太長, 所以這項也需要縮排

使用上用 \itemwraps{}{}{}
 #1 是要縮排的行數, #2 是圖片所需空間, 要設定和上面的 wrapfigure 的寬度相同, #3是這項目的文字。

article_用latex做數學考卷4-3.tex
article_用latex做數學考卷4-3.pdf

2016年6月24日 星期五

用 LaTeX 做數學考卷 (四) : 畫圖篇 - PGF/TikZ 繪圖

繪圖的部份選用 PGF/TikZ 而不用 PStricks 的原因是因為我個人覺得 PGF/TikZ 的程式碼比較淺顥易懂, 多看看 Geogebra 的程式碼就可以自己修正甚至也可以直接在 LaTeX 裡畫圖。

首先我們先看看如何用 Geogebra 產生 PGF/TikZ 的程式碼

1. 先畫圖, 按右鍵選取要產生的圖

2. 在檔案裡點選「匯出 PGF/TikZ 檔」

3. 點產生 PGF/TikZ 碼, 複製後貼到 LaTeX 裡就可以了

接著是插入圖片的方法, 此法與 \includegraphics 相同, 效果也幾乎一樣, 唯一不同的是這個圖形是 LaTeX 自己畫的。

......
\usepackage{pgf,tikz}
\usepackage{mathrsfs}
\usetikzlibrary{arrows}
......

\begin{document}

\begin{wrapfigure}{r}{6cm}
\centering
%段落A
\definecolor{qqqqff}{rgb}{0.,0.,1.}
\definecolor{uuuuuu}{rgb}{0.26666666666666666,0.26666666666666666,0.26666666666666666}
\definecolor{qqwuqq}{rgb}{0.,0.39215686274509803,0.}
\definecolor{ffqqqq}{rgb}{1.,0.,0.}
%段落B
\begin{tikzpicture}[line cap=round,line join=round,>=triangle 45,x=1.0cm,y=1.0cm,scale=0.6]
\clip(-1.0466666666666662,-0.16) rectangle (8.353333333333339,5.02);
\draw[color=qqwuqq,fill=qqwuqq,fill opacity=0.1] (4.875965060731795,4.003359400001583) -- (5.104630575704624,3.6459911274000394) -- (5.461998848306167,3.8746566423728686) -- (5.233333333333338,4.232024914974412) -- cycle;
\draw (-0.2866666666666664,0.7)-- (7.493333333333337,0.7);
\draw [shift={(3.6033333333333353,0.7)}] plot[domain=0.:3.141592653589793,variable=\t]({1.*3.89*cos(\t r)+0.*3.89*sin(\t r)},{0.*3.89*cos(\t r)+1.*3.89*sin(\t r)});
\draw (-0.2866666666666664,0.7)-- (5.233333333333338,4.232024914974412);
\draw (5.233333333333338,4.232024914974412)-- (7.493333333333337,0.7);
\draw [line width=1.2pt,color=ffqqqq] (5.233333333333338,0.7)-- (5.233333333333338,4.232024914974412);
\draw (-0.2866666666666664,0.7)-- (5.233333333333338,0.7);
\draw (5.233333333333338,0.7)-- (7.493333333333337,0.7);
%段落C
\begin{footnotesize}
\draw (5.233333333333338,2.42) node[anchor=north west] {$\sqrt{ab}$};
\draw [line width=1.2pt,color=qqqqff] (3.6033333333333353,0.7)-- (3.6033333333333353,4.59);
\draw (3.5933333333333364,3.02) node[anchor=north west] {$\frac{a+b}{2}$};
\draw[color=black] (2.533333333333336,0.4) node {$a$};
\draw[color=black] (6.4133333333333375,0.4) node {$b$};
\draw [fill=uuuuuu] (3.6033333333333353,0.7) circle (1.5pt);
\draw[color=black] (-0.3,0.4) node {$A$};
\draw[color=black] (7.6,0.4) node {$B$};
\draw[color=black] (3.8,4.85) node {$C$};
\draw[color=black] (5.3,4.5) node {$Q$};
\draw[color=black] (5.3,0.4) node {$P$};
\draw[color=black] (3.8,0.4) node {$O$};
\end{footnotesize}
%\thefontsize\tiny
%\thefontsize\scriptsize
%\thefontsize\footnotesize
%\thefontsize\small
%\thefontsize\normalsize
%\thefontsize\large
%\thefontsize\Large
%\thefontsize\LARGE
%\thefontsize\huge
%\thefontsize\Huge
\end{tikzpicture}

\caption{算幾不等式}

\end{wrapfigure}

\end{document}


PGF/TikZ 的程式碼分成3個部份:

段落A是設定顏色, 因為是在 GeoGebra 畫的, 所以色彩繽紛, 如果在 Latex 自己畫, 那麼大可不用設定。

段落B是畫圖, 在 \begin{tikzpicture} \end{tikzpicture} 環境之中的是圖形和文字, [line cap=round,line join=round,>=triangle 45,x=1.0cm,y=1.0cm,scale=0.6]是環境設定, 最好用的是 scale, 可以直接改變圖形的大小。x=1.0cm y=1.0cm 用來設置xy軸的比例。

畫圖的方式稍微介紹一下:
  \draw (-0.2866666666666664,0.7)-- (7.493333333333337,0.7) ()內的數字是坐標, 畫出線段
  \draw [shift={(3.6033333333333353,0.7)}] plot[domain=0.:3.141592653589793,variable=\t]({1.*3.89*cos(\t r)+0.*3.89*sin(\t r)},{0.*3.89*cos(\t r)+1.*3.89*sin(\t r)}); 參數式畫半圓

其他圓形與程式碼的關係也是相當直觀易懂

段落C是文字, 在\begin{footnotesize} \end{footnotesize} 環境中設置文字大小, 其他的文字大小由小到大分別是 \tiny \scriptsize \footnotesize \small \normalsize \large \Large \LARGE \huge \Huge。

\draw[color=black] (3.8,4.85) node {$C$} 可以用坐標來調整字的位置
\draw [fill=uuuuuu] (3.6033333333333353,0.7) circle (1.5pt); 畫一個小圓來代表點坐標

article_用latex做數學考卷4-2.tex
article_用latex做數學考卷4-2.pdf

2016年6月17日 星期五

用 LaTeX 做數學考卷 (四) : 畫圖篇 - 插入外部圖片

數學考卷當然有畫圖的需要, 不過插入圖片在 LaTeX 裡是相對複雜的技術, 所以我們要分成三篇來說明, 如下:
  1. 插入圖片 -- 浮動環境 (wrapfigure) 及 圖片並排 (minipage)。
  2. PGF/TikZ 繪圖
  3. 浮動環境 (wrapfigure) 與條列環境 (item) 共存。
在 LaTeX 裡插入圖片一般有兩種方式:
一、引入外部圖片, 舉凡 png, jpg, eps 都可以直接插入
二、直接在 LaTeX 裡用 PGF/TikZ 繪圖。

一的優點是可以放入任何圖片, 二則是只能放幾何圖形; 而二的優點是圖直接畫在 LaTeX 裡, 不需另外使用圖片檔。

這篇我們先介紹用 Geogebra 產生圖片並插入文中的方法。

一、製作 EPS 檔

1. 先畫出你要的圖, 並用右鍵選取要製作的圖片範圍

2. 在檔案裡找到「匯出圖檔」

3. 儲存成 EPS 檔即可 (因 EPS 是向量檔, 不易失真)

二、插入圖片

首先, 要引入 \usepackage{graphicx} 這個套件, 以下介紹四個插入圖片的效果。

1. 普通插入圖片

......
\usepackage{graphicx}
\renewcommand{\figurename}{圖}
......

\begin{document}
一般的做法, \LaTeX 會自動計算擺放圖片的位置, 如圖\ref{ex1}, 而在書籍排版上, 圖片放在每頁最上方是最合適閱讀的。
\begin{figure}
\centering
\includegraphics[scale=1.2]{算幾不等式證明.eps}
\caption{算幾不等式(上)}\label{ex1}
\end{figure}
\end{document}


\renewcommand{\figurename}{圖}: 將圖片編號前方的字改成中文。

\centering: 將圖片置中

\includegraphics[scale=1.2]{算幾不等式證明.eps}: 插入圖片, scale設定圖片的大小 (1.2倍), {}裡放圖片的正負檔名。 (也可用絕對路徑或是子資料夾)

\caption{} 放要顯示的圖片名稱

\label{} 與文章中的 \ref{} 一組, {}中填入相同的文字, 編譯兩次, LaTeX 會自動對應顯示圖片編號。

2. 將圖片置於文章中間。

只要將 \begin{figure} 加入參數 [h] 即可。不過因為 LaTeX 是專業排版軟體, 有時雖然我們希望圖片出現在文章中間, 但是若 LaTeX 經計算後發現放在上方才是最好, 則它會不理 [h] 這個參數把圖片放在頁面最上方。

3. 浮動環境 (文繞圖)

......
\usepackage{graphicx}
\usepackage{wrapfig}
\renewcommand{\figurename}{圖}

......

\begin{document}
\begin{wrapfigure}{r}{6cm}
\centering
\includegraphics[scale=0.6]{算幾不等式證明.eps}
\caption{算幾不等式(右)}\label{ex3}
\end{wrapfigure}
\end{dicument}


如果希望把圖片和文字並列, 也就是文繞圖的方式, 要用 wrapfig 套件, 圖片先放, 再寫文字。接下來所寫的內容都會在圖片的左方, 直到行數超出圖片為止。

\begin{wrapfigure}{r}{6cm}: {r} 是指放在文章最右邊, {6cm} 是所需要的寬度。

雖然這個環境和條列式環境(item)相衝, 但它的自動計算在一般的文章中非常好用, 所以還是要寫在這。但是如果要用來出數學考卷, 我們會在第三篇再介紹如何手動微調。

4. 圖片並排

......
\usepackage{float}
......

\begin{minipage}{\linewidth}
\centering
  \begin{minipage}{0.45\linewidth}
  \begin{figure}[H]
  \includegraphics[width=\linewidth]{算幾不等式證明.eps}
  \caption{算幾不等式(並左)}
  \end{figure}
  \end{minipage}

\hspace{0.05\linewidth}

  \begin{minipage}{0.45\linewidth}
  \begin{figure}[H]
  \includegraphics[width=\linewidth]{算幾不等式證明.eps}
  \caption{算幾不等式(並左)}
  \end{figure}
\end{minipage}

\end{minipage}

\begin{minipage}{0.45\linewidth} 設定為本行的寬度的 0.45 倍
\hspace{0.05\linewidth} 設定兩圖中間有行寬 0.05 倍的小空格
其他用法上和 figure 的環境大致相同。
算幾不等式證明.eps
article_用latex做數學考卷4-1.tex
article_用latex做數學考卷4-1.pdf

2016年6月15日 星期三

用 LaTeX 做數學考卷 (三) : 選擇題篇

如果我們用條列式清單來輸入選擇題的選項, 那麼選項後的空白會相當的多。所以這裡提供一個能自動計算選項長度來修正選項位置的語法。

......
\usepackage{environ}
\newlength{\choiceslen}

% 段落A1 %
\newif\ifshowcorrect
\newcounter{choices}
\newcommand{\choicefinal}[1]{%
\ifnum\value{choices}>0 \hfill\fi\egroup
\hspace{0pt}%
\hbox to\choiceslen
\bgroup
\stepcounter{choices}%
\ifcase#1\relax
(\Alph{choices})%
\else
\ifshowcorrect
\expandafter\underline
\fi
{(\Alph{choices})}%
\fi\space}
\newcommand{\choicetemp}[1]{\stepcounter{choices}\space(\Alph{choices})\cr}
% 段落A1 %

% 段落A2 %
\NewEnviron{choices}
{\setcounter{choices}{0}%
\let\choice\choicetemp
\settowidth{\choiceslen}{\vbox{\halign{##\hfil\cr\BODY\crcr}}}
\ifdim\choiceslen>.5\linewidth
\setlength{\choiceslen}{\linewidth}%一行一選項
\else
\ifdim\choiceslen>.333\linewidth
\setlength{\choiceslen}{.5\linewidth}%一行兩選項
\else
\ifdim\choiceslen>.25\linewidth
\setlength{\choiceslen}{.333\linewidth}%一行三選項
\else
\ifdim\choiceslen>.2\linewidth
\setlength{\choiceslen}{.25\linewidth}%一行四選項
\else
\setlength{\choiceslen}{.2\linewidth}%一行五選項
\fi\fi\fi\fi
\let\choice\choicefinal
\setcounter{choices}{0}%
\begin{flushleft}
\bgroup\BODY\hfill\egroup
\end{flushleft}}
% 段落A2 %

\newcommand\longch{\parbox[t]{0.92\linewidth}}%長選項自動換行
......

\begin{enumerate}
\item 選擇題
\begin{enumerate}[(\hspace{1cm}) 1.]
\item 這裡是選擇題第一題
\begin{choices}
\choice1 短選項
\choice0 短選項
\choice0 短選項
\choice0 短選項
\choice0 短選項
\end{choices}
\item 這裡是選擇題第二題
\begin{choices}
\choice0 長一點的選項
\choice0 長一點的選項
\choice0 長一點的選項
\choice0 長一點的選項
\choice0 長一點的選項
\end{choices}
\item 這裡是選擇題第三題
\begin{choices}
\choice0 再更長一點的選項
\choice0 再更長一點的選項
\choice0 再更長一點的選項
\choice0 再更長一點的選項
\choice0 再更長一點的選項
\end{choices}
\item 這裡是選擇題第四題
\begin{choices}
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\end{choices}
\item 這裡是選擇題第五題
\begin{choices}
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 再更長更長更長一點的選項
\choice0 \longch{這是一個長到不能再長的選項這是一個長到不能再長的選項這是一個長到不能再長的選項這是一個長到不能再長的選項這是一個長到不能再長的選項這是一個長到不能再長的選項}
\end{choices}
\end{enumerate}

\end{enumerate}

\end{document}


「段落A1」是用來設定正確答案的, 一般來說用不到, 但是必須要放著, 而程式碼的細節我也無法看懂。

「段落A2」是用來設定(自動計算)每行要放多少個選項, 我的程式碼中每行並列 1~5 個選項都有, 優點是最省空間, 缺點則是會比較不整齊。若要整齊的話, 建議調整成每行只有 1、2、4 個選項, 如下

\NewEnviron{choices}
{\setcounter{choices}{0}%
\let\choice\choicetemp
\settowidth{\choiceslen}{\vbox{\halign{##\hfil\cr\BODY\crcr}}}
\ifdim\choiceslen>.5\textwidth
\setlength{\choiceslen}{\textwidth}%
\else
\ifdim\choiceslen>.25\textwidth
\setlength{\choiceslen}{.5\textwidth}%
\else
\setlength{\choiceslen}{.25\textwidth}%
\fi
\fi
\let\choice\choicefinal
\setcounter{choices}{0}%
\begin{flushleft}
\bgroup\BODY\hfill\egroup
\end{flushleft}}


比對一下程式碼, 就可以看出運算的邏輯, 可以自行設定要的長度。

\newcommand\longch{\parbox[t]{0.92\linewidth}}%長選項自動換行, 因為這段程式碼無法自動換行, 所以遇到長選項要用這個指令來換行。這裡是定義 \longch 為 \parbox, [t]是對齊上方, {0.92\linewidth} 是設定 \parbox 的長度。使用上只要輸入 \longch{} 即可。

正文區使用 choices 環境, 每項則用 \choice0 分列, 若是用 \choice1, 則上表示這是正確答案, 這部份我們暫不說明。

article_用latex做數學考卷3.tex 
article_用latex做數學考卷3.pdf

2016年6月7日 星期二

用 LaTeX 做數學考卷 (二) : 條列式清單

這篇介紹在任何地方都好用的條列式清單, 條列式清單編號方式有 itemize、enumerate、description 三種, 以下只介紹考卷中最常用的 enumerate, 來看下列的設定:

........

\usepackage{enumerate}
\renewcommand{\labelenumi}{\CJKnumber{\arabic{enumi}}、}
\renewcommand{\labelenumii}{\arabic{enumii}.}
\renewcommand{\labelenumiii}{(\Alph{enumiii})}

........

\begin{document}
\begin{enumerate}
\item 選擇題
  \begin{enumerate}[(\hspace{1cm}) 1.]
  \item 這裡是選擇題第一題
    \begin{enumerate}
    \item 第一個選項
    \item 第二個選項
    \item 第三個選項
    \item 第四個選項
    \end{enumerate}
  \item 這裡是選擇題第二題
  \item 這裡是選擇題第三題
  \end{enumerate}

\item 填充題
  \begin{enumerate}
  \item 這裡是填充題第一題
  \item 這裡是填充題第二題
  \item 這裡是填充題第三題
  \end{enumerate}

\item 計算題
  \begin{enumerate}\itemsep=2cm
  \item 這裡是計算題第一題
  \item 這裡是計算題第二題
  \item 這裡是計算題第三題
  \end{enumerate}

\end{enumerate}
\end{document}


\usepackage{enumerate} 加了這個套件, 在修改清單標籤時會相當方便。

\renewcommand{\labelenumi}{\CJKnumber{\arabic{enumi}}、}
\renewcommand{\labelenumii}{\arabic{enumii}.}
\renewcommand{\labelenumiii}{(\Alph{enumiii})}
這三行用來修改預設的標籤

第一層標籤是 \labelenumi , 第二層是 \labelenumii , 以此類推。

\CJKnumber{\arabic{enumi}} 為中文的標籤, {enumi} 是使其依第一層標籤編號, \arabic 是阿拉伯數字, \Alph 是大寫英文字母, \alph 則是小寫, 另外還有 \Roman 是大寫羅馬數字, \roman 則是小寫羅馬數字。

\begin{enumerate} 是清單的環境, 可以層層相疊

\item 每一個項目開始時都要用這個指令

\begin{enumerate}[(\hspace{1cm}) 1.] 加上 [] 可以手動改變清單的標籤 (這就是 enumerate 這個套件的功能了), 1 是指阿拉伯數字, 一樣可用 A, a, I, i, 來使用英文字母及羅馬數字。如果放上這些以外的文字, 則每個標籤都會重複顯示相同的文字。

\begin{enumerate}\itemsep=2cm 加上 \itemsep, 用來調整各項之間的距離。

article_用latex做數學考卷2.tex article_用latex做數學考卷2.pdf

2016年6月6日 星期一

用 LaTeX 做數學考卷 (一) : 版面設定篇

開一個新系列來說說怎麼用 LaTeX 做一份數學考卷。

一、初始設定


\documentclass[12pt]{article}

\usepackage[CJKnumber]{xeCJK}
\setCJKmainfont[BoldFont={cwTeX Q Hei Bold}]{cwTeX Q Ming Medium}
\usepackage[a4paper, margin=1.5cm]{geometry}%設定紙張及邊界
\usepackage{amsmath, amsfonts, amssymb}%數學符號


\usepackage[a4paper, margin=1.5cm]{geometry} 能讓我們設定紙張的邊界, 我的設定是 A4 紙, 留白 (margin) 1.5cm。

\usepackage{amsmath, amsfonts, amssymb} 這行一定要加, 才會有足夠多的數學符號可以用。

二、標題

一般而言, 考卷都有標題和讓學生寫班級姓名座號的地方, 除了標題內容, 我們希望每張考卷的設定都是一致而且不用重複輸入,  那麼我們可用 \newcommand 來設定。


\newcommand{\testtitle}[1]{
\begin{center}{\large\bf #1}\end{center} \hfill 班級:\underline{\hspace{2cm}}座號:\underline{\hspace{1cm}}姓名:\underline{\hspace{3cm}} \\[2pt]
}

\begin{document}

\testtitle{臺北市立麥斯高級中學107學年度第1學期第一次期中考數學科測驗卷}

之後是考卷的內容...

\end{document}


\newcommand{\testtitle}[1]{} 語法很簡單, \testtitle 是我們設定的新指令, [1] 則是和 #1 對應, #1 是輸入的內容。

\begin{center}{\large\bf #1}\end{center} 設定標題格式, 可以看到, 我們在正文中輸入的標題會以 置中(center)、粗體(\bf)、放大(\large) 顯示出來

\hfill 班級:\underline{\hspace{2cm}}座號:\underline{\hspace{1cm}}姓名:\underline{\hspace{3cm}} \\[2pt] 
緊接著出現班級姓名座號的欄位, \hfill 是置右, \underline{\hspace{2cm}} 則是畫底線, 2cm 是底線長度。

三、頁碼

如果要刪除頁碼, 可以在宣告區 (\begin{document} 之前) 加入 \pagestyle{empty} 。

article_用Latex做數學考卷1.tex article_用Latex做數學考卷1.pdf

2016年3月21日 星期一

刪除資料夾內相同副檔名的檔案

因為 LaTeX 在編譯之後, 經常會產生許多用不到的檔案, 如果不刪, 檔案就很容易看起來相當雜亂, 又因為我用 MikTeX+XeLaTeX, 所以編譯產生的所有檔案都會被放在同一個資料夾, 因此我們要用有效率的方式刪掉他們。

步驟如下:

1. 把以下的文字貼到記事本裡

@echo off
rem 設定要搜尋的目錄
if _%1_ == __ (
  set now_folder=%1
) else (
  set now_folder=.
)

rem 在要搜尋的目錄,搜尋每一個檔案
for /r %now_folder% %%F in (*.*) do (

del *.aux
del *.log
del *.gz
del *.out
del *.nav
del *.snm
del *.toc
del *.vrb
del answer.tex
del *.synctex.gz*

2. 將記事本存成「檔名.cmd」檔

3. 將這個檔案放在 LaTeX 編譯的資料夾, 點擊就可以刪檔案囉

再不然, 你可以直接下載我正在用的 Deletefiles.cmd

2016年3月7日 星期一

空間中四點共平面的充要條件

眾所皆知, 無論在平面或空間中, 若$O$, $A$, $B$不為共線三點, 則「點$P$在直線$\overline{AB}$上」的充要條件是「存在一組實數$x$, $y$, 使得$\vec{OP}=x\vec{OA}+y\vec{OB}$, 且$x+y=1$」。 

我們從一題小考考卷的題目中延伸出這個想法, 來看看在空間中, 若$O$, $A$, $B$, $C$為不共平面四點, 則「點$P$在平面$ABC$上」的充要條件是「存在一組實數$x$, $y$, $z$使得$\vec{OP}=x\vec{OA}+y\vec{OB}+z\vec{OC}$, 且$x+y+z=1$」。 

證明出奇的簡單, 請參考附件囉。

article_空間中四點共面的充要條件.tex

article_空間中四點共面的充要條件.pdf

2016年1月8日 星期五

在網頁中用 LaTeX 語法寫出數學式 - MathJax

本文參考 http://blogger.gtwang.org/2013/06/mathjax-latex-mathml.html 完成。

先看一個例子:

微積分基本定理:
若實函數 $f(x)$ 在 $[a,b]$ 連續, 則 $\displaystyle F(x)=\int_a^x f(t)dt$ 在 $[a,b]$ 連續、在 $(a,b)$ 可微且
\begin{equation*}
F'(x)=\frac{d}{dx}\int_a^x f(t)dt=f(x), \forall x\in(a,b)
\end{equation*}

原始碼如下:

微積分基本定理:
若實函數 $f(x)$ 在 $[a,b]$ 連續, 則 $\displaystyle F(x)=\int_a^x f(t)dt$ 在 $[a,b]$ 連續、在 $(a,b)$ 可微且
\begin{equation*}
F'(x)=\frac{d}{dx}\int_a^x f(t)dt=f(x), \forall x\in(a,b)
\end{equation*}


是不是方便又漂亮呢? 我們來看看如何在 google blogger 裡設定使用。

首先, 我們要先嵌入 MathJax: 在 blogger 後臺「版面配置」中新增小工具「HTML/JavaScript」, 在內容中將下列語法貼上即可(標題可用 MathJax 或是自己習慣的標題)。

<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>
<script src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript">
</script>

到這裡, 基本上的 LaTeX 語法都可以使用了。

其他使用上的注意事項寫在下面
  1. 因為 LaTeX 的語法會被自動轉成數學式, 如果想顯示語法本身如 $\displaystyle F(x)=\int_a^x f(t)dt$ 而不是 $\displaystyle F(x)=\int_a^x f(t)dt$ 的話, 需用 HTML 的指令 <code>...</code> 夾住。
  2. 自己定義的 LaTeX 語法將無法使用。
  3. 環境指令 \begin{}...\end{} 的指令無法使用。
在網頁上顯示 LaTeX 數學式雖然無法像真正的 LaTeX 一樣完整, 但是使用上還是非常的方便好用。

2016年1月6日 星期三

求銳角平分線-2

請先讀過求銳(鈍)角平分線(面)一文, 本文是這兩天因應學生的問題, 在一個清早靈光一現得到的結果。

先前我們提到, 要求兩直線之角平分線, 可用兩單位法向量相加後得到角平分線之法向量, 再將兩直線交點代入以法向量為係數的方程式中即可。然而這方法在交點的數字難處理的情況下會花費相對多的時間, 因此我們將方法進化成「當兩直線的係數平方和相等時(兩法向量等長), 兩直線相加即為角平分線方程式。」

例題和詳細說明請見附檔

求銳角平分線2.tex

求銳角平分線2.pdf