置頂介紹文

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

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