置頂介紹文

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

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