置頂介紹文

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

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