103年度獎助教師編製教材及教學參考資料|微

pdf
3.2 MB
127 頁
侵權投訴
加載中. ..
PDF
background image

103

background image

103年

年度

度獎

獎助

助教

教師

師編

編製

製教

教材

材及

及教

教學

學參

參考

考資

資料

微積

積分

分出

出題

題糸

糸統

統及

及題

題庫

庫與

與解

解答

系所:資訊工程系

授課教師:王德譽

華民國 103 年 10 月 2 日

background image

目錄

圖錄

ii

1 前

前言

2

2 作

作業

業環

環境

5

2.1 環境建立

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5

2.2 L

A

TEX排版程式語言 . . . . . . . . . . . . . . . . . . . . . . . .

7

2.3 Shell 腳本程式語言 . . . . . . . . . . . . . . . . . . . . . . . .

12

2.4 出題系統規劃 . . . . . . . . . . . . . . . . . . . . . . . . . . .

14

3 出

出題

題系

系統

統設

設計

16

3.1 微積分出題系統 . . . . . . . . . . . . . . . . . . . . . . . . . .

16

3.2 考題講義同步系統 . . . . . . . . . . . . . . . . . . . . . . . .

33

4 結

結果

果展

展示

44

4.1 微積分出題系統 . . . . . . . . . . . . . . . . . . . . . . . . . .

44

4.2 考題講義同步系統 . . . . . . . . . . . . . . . . . . . . . . . .

51

5 結

結論

65

參考

考文

文獻

66

附錄

錄:

:微

微積

積分

分題

題庫

68

i

background image

圖錄

2.1 L

A

TEX編譯結果檔案 cjktest.pdf 。 . . . . . . . . . . . . . . . .

8

2.2 項目編號環境 L

A

TEX編譯結果。 . . . . . . . . . . . . . . . . .

9

2.3 align 數學環境 L

A

TEX編譯結果。 . . . . . . . . . . . . . . . . 11

3.1 微積分出題腳本

流程。 . . . . . . . . . . . . . . . . . . . . . . 18

3.2 微積分出題 makePaper 函式結構圖。 . . . . . . . . . . . . .

20

3.3 考題講義同步 makePaper 函式結構圖。 . . . . . . . . . . . .

34

4.1 作業

cal1aHw11_20120502.pdf

。 . . . . . . . . . . . . . . . . . . 46

4.2 作業解答

cal1aHw11_Sol1_20120502.pdf

第 1 頁。 . . . . . . . . 47

4.3 作業解答

cal1aHw11_Sol2_20120502.pdf

第 2 頁。 . . . . . . . . 48

4.4 考卷

cal1aEx11_20120502.pdf

。 . . . . . . . . . . . . . . . . . . 49

4.5 答案卷

cal1aEx11_20120502.pdf

。 . . . . . . . . . . . . . . . . . 50

4.6 期中考練習題

cal1aHwMidter_20120418.pdf

。 . . . . . . . . . . . 54

4.7 期中考練習題答案卷

cal1aHwMidter_Sol14_20120418.pdf

第 1 至

4 頁。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

55

4.8 期中考練習題答案卷

cal1aHwMidter_Sol56_20120418.pdf

第 5 至

6 頁。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

56

4.9 期中考考卷

cal1aMidter_20120418.pdf

。 . . . . . . . . . . . . . 57

4.10 期中考答案卷

cal1aMidter_Sol_20120418.pdf

。 . . . . . . . . . . 58

4.11 Linux System 考卷

linuxSystemExam6_20120330.pdf

。 . . . . . . 60

4.12 Linux System 答案卷

linuxSystemExam6_Sol_20120330.pdf

。 . . . 61

4.13 Linux System 期中考考卷

linuxSystemiMidterm9_20120420.pdf

63

ii

background image

4.14 Linux System 期中考答案卷

linuxSystemiMidterm9_Sol_20120420

.pdf

。 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

iii

background image

朝陽科技大學103年度「獎助教師編製教材及教學參考資料」教材成果說明表

 

教 材 內 容

簡介

微積分自動出題系統先將所有章節的題目以 L

A

TEX文稿格式建立試

題題庫,題庫中設定章節、題型及難易度標記,供自動出題腳本判

讀。再將授課班級、授課教師、班級人數、考試範圍、考試日期、

難中易題數、考卷頁數等相關參數,以自訂格式編輯成授課班級參

數檔。最後,撰寫 shell 腳本讀取參數檔中的考試相關參數,從題

庫中隨機抽取不同類型題目,分別建立完整的 L

A

TEX考卷及解答文

稿,並調整版面以符合要求頁數,最後再依答案或難易度自動配

分,達到完全自動出題的目的。

教 材 架 構

說明

微積分出題系統先建立考題題庫,題庫中自訂章節、題型及難易度

標記,出題時依據設定章節及難易度從題庫中隨機選擇題目。相同

題型的題目會在同題型標記內,系統對於同題型的題目最多只選取

一題,不會出現多題同題型題目的現象,以增加測驗之實用性。

 

課程名稱

微積分(I)、微積分(II)

授課系所

資工系

學分數

3,3

班級

日1A,日1B

教學大綱

1. 極限與連續性
2. 微分
3. 微分的應用
4. 積分
5. 積分的技巧
6. 一次微分方程式

8. 函數與無窮級數的轉換
9. 參數方程式及極座標

10. 向量及向量函數
11. 偏微分
12. 多重積分

評 量 方 式

說明

除期中、期末考外,幾乎每週都有作業及小考。作業從題庫中依進

度產生,小考再依作業相同題型產生題目,同時亦自動產生答案

卷,方便教師及助教批改。

 

微積分題庫包含上課講義中所有題型,足以測驗學生學習成效。

由每週上課進度及內容,產生作業供學生下課後練習,下週上課前再從作業

題型中產生,相同題型但題目不同的小考考卷測驗學生,可以鼓勵學生課後

馬上復習。依此方式進行,並計算成績,大部分的學生學期成績都在 60 分
以上,不太需要另外加分或調整分數,可證明此題庫及出題系統之成效。

1

background image

1

前言

文書排版幾乎是每個使用電腦工作的人,必須具備的技術。排版軟體或工具的選擇

將大大的影響文書作業的工作效率。如果你需要撰寫期刊論文、上課講義、工程計畫

書、技術報告、專書或碩博士論文,你的文件可能相當大,文件中可能會有章節、方程

式、圖表及參考文獻,而且文章中會引用這些文獻,交互參考圖表或章節,也可能要目

錄、圖表目錄或附錄。當圖表、章節更改,文章的引用、目錄,圖表目錄也都要一併

更改。雖然商業排版軟體像 Microsoft Word 可以達到這樣的排版,但這種所見即所得(

what-you-see-is-what-you-get, WYSIWYG )的排版可能轉移排版者的注意,以致過度於調

整版面所見的結果[1]

L

A

TEX[2, 3, 4]不是所見即所得的排版系統,而是一種用於排版的高階程式語言,可以

輕易處理大又複雜的文件。 L

A

TEX是一大組巨集( macro ),當使用者選定好巨集類別,文

稿撰寫時只要將文章內容填入文稿中,並於需要時使用巨集且給與巨集內容或參數,整本

書或整篇文章的版面及段落就會按照這個類別來安排。對於上述的章節、圖表、方程式及

參考文獻的交互參考或引用,都非常容易達成。

L

A

TEX不是所見即所得的排版系統, L

A

TEX原始文件檔( 以下簡稱文稿 )由 ASCII

碼字元組成,只要更改文稿上的版面設定語法即可改變輸出版面,改變文稿中的文件

內容,則可改變文件輸出內容。將 L

A

TEX文稿編譯後會產生與設備無關之 .dvi ( device

independent )檔,也能輕易轉換成 pdf 檔。

對於數理方面的文件,例如:大學理工科系必修的基礎數學課程微積分等數學有關

之講義或考卷,往往需要大量輸入數學符號及方程式,甚至圖形的製作。這種需要大量數

學符號、方程式及圖形之排版。若以如商用軟體 Microsoft Word 這種所見即所得的文書

排版系統進行排版,在文章中夾雜的數學符號要另外點選特殊字元插入或另外做字型設

定,而獨立的數學方程式及圖形則必須先製作好方程式物件或圖形物件再插入文件中,不

但輸入相當不方便,且文件檔案又大。因此, L

A

TEX常用在中大型的技術報告或科學文件

2

background image

上,當然也可用於任何形式的排版。本論文就是以 L

A

TEX進行排版,而且設定的格式更可

做為朝陽科技大學論文樣本,供後續參考使用。

Linux 文字界面系統功能本身就非常強大, Shell 腳本( shell script )[5, 6, 7, 8]是將文

字界面的命令以 shell 語法寫成一連串命令行,其語法都是簡單易懂的純文字,而不是機

器碼,只要再加上變數、函數、陣列、條件判斷、流程控制及迴圈等技巧,並搭配正規表
示法、管線命令與資料流重導向等功能,就可聰明使用正確的參數選項和執行命令,以達
到我們所想要的處理目的。 Shell 腳本可以像其他程式語言一樣,完成龐大複雜的工作,

尤其在字串的處理上。例如:以正規表示法尋找字串的工具 grep ,變更檔案內容的工具

sed ,以欄位為單位的字串處理工具 awk 等。

利用 shell 腳本強大的字串處理能力,可以自動處理或建立 L

A

TEX文稿,只要先規劃

好 L

A

TEX版面,再以腳本依據所需參數進行處理,就可以大量產生版面統一而內容多變的

美觀文件。然而,從 IEEE 論文期刊資料庫[9]中,卻未找到類似的相關研究。因此,本論

文提出以 shell 腳本自動處理 L

A

TEX文稿的構想, 並以微積分出題及考題講義同步兩個系

統進行設計,以驗證此構想之實用性。

數位學習[10]的目的在利用新的資訊科技,讓學習更有效率或評估更為正確,而目前

在網路分享個人生活、工作及學習上的經驗已是一種普遍行為,像部落格、無名小站都是
這類的網站。若能將學生習慣這類網站的模式轉移到網路數位學習平台上的討論區,便能

達到多項學習交流。教學者亦能透過網路學習平台提供教材、線上作業及測驗等活化教
學。電腦的快速發展與網路的盛行,使得數位學習的風

潮漸長,有各種電腦自動出題系

[11, 12, 13]的研究,但都不是著力於考卷的產生,更不是利用 shell 腳本來處理 L

A

TEX文

稿,而是著重題目的設計。本論文設計的出題系統主要目的為發揮以腳本處理 L

A

TEX文稿

之實用性,並於實際教學中得到驗證,此系統確實大大節省授課老師的時間。

要出一份微積分考卷,老師要除了要進行繁鎖的排版外,還要依各班進度及學習狀

況,選出適合學生程度的題目,並給與適當的配分。若是沒有題數夠大的題庫,則每次出

題還必須注意是否與上次出題重複,以免相同題目一再出現而失去考試的目的,這將造成

出題老師相當大的負擔。老師每次出題基本上要掌握考試進度,考慮學生程度並選出適合

學生程度的題目題型並加以配分。若每次都要再發時間做考卷的排版,實是相當繁鎖且花

時間。

微積分自動出題系統先將所有章節的題目以 L

A

TEX文稿格式建立試題題庫,題庫中

設定章節、題型及難易度標記,供自動出題腳本判讀。再將授課班級、授課教師、班級人

數、考試範圍、考試日期、難中易題數、考卷頁數等相關參數,以自訂格式編輯成授課班

級參數檔。最後,撰寫 shell 腳本讀取參數檔中的考試相關參數,從題庫中隨機抽取不同

類型題目,分別建立完整的 L

A

TEX考卷及解答文稿,並調整版面以符合要求頁數,最後再

依答案或難易度自動配分,達到完全自動出題的目的。

3

background image

考題講義同步系統設計則是一套不需獨立題庫之自動出題系統。系統會依照考試

範圍,直接從上課講義中抽取考題,不但可以不必建立題庫,亦可讓考題隨講義同步更

新。講義以 L

A

TEX語法撰寫,其文稿 .tex 檔為 ASCII 碼的文字檔。透過 shell 腳本可從

L

A

TEX講義文稿擷取指定章節中的練習題,組成考卷之 L

A

TEX文稿檔,再經由編譯產生考

卷及答案卷,完全不需要再做選題及打字等繁瑣工作。由於考卷是利用腳本依據考卷相

關資訊,從 L

A

TEX講義文稿中自動選題,講義內容即是考試題庫,題庫永遠與講義同步更

新,當講義內容甚至章節變動,也不用擔心考題錯亂,可省去很多重複輸入或校正的時

間。

不論是微積分出題或考題講義同步系統,都只要設定考卷相關參數,就可以腳本產

生美觀又符合要求的考卷。對於例行性的考試,更可透過 Linux 系統 crontab 例行工作設

定自動完成。若要同時印出,亦可於腳本中直接加入列印命令,輸出到印表機,以達到完

全全自動化之出題。

本論文提出的兩個系統都已實際使用在目前的教學上,尤其對於每週固定有小考及

作業的微積分幫助相當大,可大大的節省老師出題時間。本論文除本章前言外,第二章為

研究環境介紹;第三章詳細介紹系統設計;第四章則是結果展示與討論;最後一章結論與

未來展望。

4

background image

2

作業

業環

環境

Linux shell 文字介面指令功能強大,只要撰寫腳本就可將很多字串處理的工作自動化,

且遠端操作亦相當快速方便。 Linux 有許多各式各樣的 linux 發行版,這些發行版各有

特色,但不管那種套件, shell 指令與腳本撰寫皆無太大的不同。本系統目的為設計以

linux shell 腳本自動處理 L

A

TEX文稿。因此,儘管 L

A

TEX可跨平台,本系統還是必須安裝在

Linux 主機,更何況 Linux 與 windows 相較[14],除資源需求低,相容性高、穩定性佳、

安全性高、且幾乎免費外,其開放原始碼,更允許使用者依需要修改,沒有版權問題。

以下就分節說明出題系統設計環境安裝與架設。

2.1

環境

境建

建立

Linux 發行版( Linux distribution )[15]種類眾多,可從 linux 的檔案伺服器[16]自由下載安

裝。本系統所需的主要套件 L

A

TEX,在大部分的發行版中都已內建,只要作業系統安裝時

選擇安裝,或在現有的 Linux 系統加裝即可,並沒有特別要求非以何種發行版作為作業系

統不可。發行版的選擇只要考慮是否提供符合需要的套件以及個人使用習慣就可。以往安

裝 Linux 系統及 L

A

TEX環境是件不容易的事,尤其 L

A

TEX中文字型的使用更是惱人,現在

安裝這樣的環境已經改善很多,以本系統設計環境 CentOS 6[17]為例,先從 linux 檔案伺

服器下載要安裝的發行版映像檔 .iso 燒成光碟,以此光碟開機並依安裝指示完成安裝,幾

乎都可以成功安裝 linux 作業系統。

CentOS 6 內建 L

A

TEX套件為 Texlive 2007 ,只要以 yum 安裝 texlive-latex 套件,或

於安裝過程自訂安裝套件勾選 texlive-latex ,其

餘相依套件都會一併安裝,立即可以使用

L

A

TEX引擎編譯。比較麻煩的是 L

A

TEX中文套件的使用, Texlive 2007 內建的 unicode TeX

排版引擎套件 texlive-xetex 可以使用 unicode 中文字,但對於大部分使用 CJK 套件的文

5

background image

稿都必須調整,才能順利編譯。

CentOS 6 安裝使用 XeTeX 或 CJK 套件比較如表 2.1 ,由於 XeTeX 是 CentOS 6

內建套件,且其可直接使用作業系統上已安裝的字型, GUI 使用什麼字型 XeTeX 直接可

以使用,不需要再額外安裝 L

A

TEX中文字型,是目前最方便的字型管理系統。然而,相對

於 CJK , XeTeX 還是有一些問題沒解決[18],例如英文字也使用中文字型中的英文字,

大大降低排版美觀。Forward/Inverse DVI search 功能可以讓編譯完成的 DVI 檔與原始文

稿互相對應,讓排版者可以快速的顯示 DVI 檔於目前文稿編輯位置,或從顯示的 DVI

檔游標位置直接回到對應的文稿位置進行編輯,這對於大文件的排版非常有用, CJK 可

以配合 srcltx 套件進行此項 DVI 搜尋。而目前的 XeTeX 跳過 DVI ,直接將文稿編譯成

pdf 檔,即使利用 xelatex 選項 -no-pdf ,不直接編譯成 pdf 檔,其產生的 XDV( extended

DVI ),還是無法使用 DVI 搜尋功能。雖然 CentOS 6 沒有內建 CJK 套件,需要另外找

符合的這發行版的套件安裝,且使用字型時需要額外安裝,但由於目前 XeTeX 在中文的

使用還有一些小問題,在沒解決之前,本論文的出題系統設計環境仍選擇 CJK 。

Table 2.1: CentOS 6 使用 XeTeX 或 CJK 套件比較

XeTeX CJK

套件安裝方便性

字型安裝方便性

字型排版美觀

Forward/Inverse DVI search

Texlive 2007 中 沒 有 納 入 CJK 套 件 ,texlive 2011 卻 再 次 將 CJK 套 件 加

入 ,FedoraProject[19]也 提 供 Fedora 發 行 版 yum 安 裝 texlive 2011 的 套 件 庫( reposi-

tory ),其中也包含 RHEL6( Red Hat Enterprise Linux 6 )。由於 CentOS 6 是以 RHEL6

提供的開放原始碼為基礎的發行版,所以 FedoraProject 提供給 RHEL6 的 texlive 2011 套

件庫, CentOS 6 也可以使用,不過要自行進行 yum 線上更新套件設定,更新設定及安

裝過程如程式 2.1 ,先建立套件更新設檔 /etc/yum.repo.d/texlive.repo ,再以 yum 安裝

套件 texlive-cjk,yum 會將其他相依套件一併安裝。

# cat > /etc/yum.repos.d/texlive.repo << EOF

2

> [texlive]
> name=TeXLive

4

> baseurl=http://jnovy.fedorapeople.org/texlive/2011/packages.el6/
> enabled=1

6

> gpgcheck=0
> EOF

8

# yum install texlive-cjk

6

background image

Listing 2.1: CentOS 6 下 texlive 2011 套件庫設定與安裝。

2.2

L

A

TEX排

排版

版程

程式

式語

語言

L

A

TEX並不是所見即所得的文書排版器,它是一種文件標示語言。 L

A

TEX提供舉凡排版需

要之巨集供使用者使用,例如版面配置、目錄、引用段落、註腳及自動編號等。 L

A

TEX文

稿格式主要包含前置文區 preample 及內文區 text body 如程式 2.2 ,前置文區最少要以

基本命令 

documentclass

[parameters]{format} 指定文件的型態,以命令 

usepackage

{marco} 宣告使用之巨集,例如程式

2.2 中使用命令 

documentclass

指定文件類別為

article ,使用字型及版面紙張大小分別為 12pt 及 A4 ;另利用 

usepackage

命令宣告

使用 amsmath 及 amsthm 兩個數學巨集。命令 

begin

{document} 及 

end

{document} 中

間為內文區,所有要排版之內容皆放置在此區,並以 L

A

TEX內定字元型態呈現,當然它也

允許輸出別的型態,例如粗體字、斜體字及畫底線等,同時內文區亦可使用巨集中的指

令,讓輸出排版更符合使用者需求。

documentclass

[12pt,a4paper]{article}

2

usepackage

{amsmath,amsthm}

preamble

4

begin

{document}

text body

6

end

{document}

Listing 2.2: L

A

TEX文稿基本格式。

使用程式 2.2 的 L

A

TEX的基本格式,不做其他的設定,就可以做出不錯的文章。不

過,各領域的文章內容多樣且變化大,為了適合各種文章排版,必須利用各種套件巨集快

速設定或產生新功能。例如:程式 2.3 宣告使用 CJKutf8 巨集套件,在開始 CJK 環境時

指定使用 utf8 編碼的楷書字型,就可以在此 CJK 環境中輸入中文字,以進行中文排版。

documentclass

[12pt,a4paper]{article}

2

usepackage

{amsmath,amsthm}

usepackage

{CJKutf8}

4

begin

{document}

6

begin

{CJK}{UTF8}{bkai}

Huge

English test

中文測試

8

end

{CJK}

end

{document}

Listing 2.3: L

A

TEX中文排版文稿。

7

background image

將程式 2.3 的文稿存成 cjktest.tex ,在 Linux shell 下進行 latex 編譯可以產生 dvi

檔,再以 dvipdf 進行轉檔,就可產生標準可攜式文件 pdf 檔,編譯過程如程式 2.4 ,編

譯結果產生的文件如圖 2.1 

1

$ latex cjktest
$ dvipdf cjktest

Listing 2.4: 編譯 L

A

TEX中文排版文稿。

圖 2.1: L

A

TEX編譯結果檔案 cjktest.pdf 。

程式 2.3 的文稿已可做基本的中文排版,不過有要求版面的文件排版,會需要自訂

邊界、內文高度與寬度、頁眉頁尾與內文的距離。為得到更精確的版面設定,L

A

TEX提供

相當多的命令可以自定排版的版面,但各命令存在著關聯性,必須先瞭解各命令與版面的

關係,否則花了許多時間調整版面,最後可能仍然不是自己想要的樣子。因此,L

A

TEX也

提供一個版面設定的標準套件 geometry ,可以快速調整版面,不必另行安裝,只要在

前置文區宣告使用此套件 

usepackage

[parameters]{geometry} 即可,其中 parameters

常用的參數如程式 2.5 

本 論 文 出 題 系 統 使 用 的 基 本 環 境 有 編 號 環 境 begin{enumerate}...end{

enumerate}、 數 學 環 境 begin{align}...end{align}及 定 理 證 明 環 境 begin{proof

}[option]...end{proof}。 編 號 環 境 開 始 於 命 令 begin{enumerate}, 終 止 於 命 令

end{enumerate} 。環境內每個編號項目皆以命令item 開始,

L

A

TEX會自行依序加上題

號並自動換行。若同一段落也可使用連績兩個倒斜線  強迫換行。在環境中亦可使用

自訂標記項目。例如:item[Chap.2.5] 可做為第 2 章第 5 節之標記、item[TypeEasy

], item[TypeMidd], item[TypeHard] 做為簡單、適中及較難題型之標記,其中命令

item 後緊接著中括號 [ ] 內之文字為自訂標記,

L

A

TEX對於有自訂標記之項目,將不會

8

background image

a4paper

指定使用 A4 紙張

2

text={16cm,24cm}

本文內容左右 16cm 上下 24cm

marginratio={1:1,1:1}

左右與上下邊界比例都為 1:1

4

margin=2.5cm

上下左右邊界都設成 2.5cm

left=2.5cm

左邊邊界設成 2.5cm

6

right=2.5cm

右邊邊界設成 2.5cm

hmargine=2.5cm

左右邊界都設成 2.5cm

8

top=2.5cm

上方邊界設成 2.5cm

bottom=2.5cm

下方邊界設成 2.5cm

10

vmargin=2.5cm

上下方邊界都設成 2.5cm

Listing 2.5: L

A

TEX套件 geometry 常用參數。

begin{enumerate}

2

item

[Chap.2.5]

item

[TypeEasy]

4

item

(20

%) Evaluate $dlim_{ntoinfty}frac{5n+7}{3n-5}$.

item

(25

%) Evaluate $dlim_{ntoinfty}frac{2n+1}{e^n}$

6

end

{enumerate}

Listing 2.6: 項目編號環境文稿。

給與編號,而以自訂標記顯示。本論文中微積分出題系統的題庫章節及題型難易度就是以

這種方式設定。以程式 2.6 為例,編譯結果如圖 2.2

Chap.2.5

TypeEasy

1. (20%) Evaluate lim

n

→∞

5n+7
3n

−5

.

2. (25%) Evaluate lim

n

→∞

2n+1

e

n

圖 2.2: 項目編號環境 L

A

TEX編譯結果。

平常在寫文章的模式,無法正確的處理數學式子間的空間位置,且要輸入次方、方

根、微分、積分等特殊符號,會很困擾。因此,所有的數學式子都要進入數學模式來處

理。L

A

TEX的數學模式有兩種,一種是和內文排列在隨文數學式由兩個錢字符號 $ 所包

圍,在一般文字段落內要使用到一些數學式子的話,只要將數學式子前後加上錢字符號就

可以了。例如:$x^2+y_1=3$ ,編譯結果為 x

2

+ y

1

= 3。最簡單的展式數學式以命令 [

開始,同樣以命令] 結束,它會獨立成一行,不會使用一般文章一樣的做法去換行,而

是進入展開式的數學模式,展式數學式除獨立顯示外,數學符號及字體也較隨文數學式

9

background image

begin{align*}

2

f’(1)&=

lim

_{h

to

0}frac{f(1+h)-f(1)}{h}

&=

lim

_{h

to

0}frac{h(2+h)}{h}

4

&=2

end

{align*}

Listing 2.7: align 數學環境。

大。例如:

[

lim

_{n

to

infty

}

frac

{2n+1}{e^n}]

編譯結果如下列方程式,出現獨立的一行數學式:

lim

n

→∞

2n + 1

e

n

begin{equation*}...end{equation*} 環境同樣可以編輯上述的展示數學式,其

中不加星號更可以做為方程式的編號,做為文章中的引用。例如:

begin

{equation}

2

lim

_{n

to

infty

}

frac

{2n+1}{e^n}

end

{equation}

產生如下編號為 (2.1) 之數學方程式:

lim

n

→∞

2n + 1

e

n

(2.1)

L

A

TEX有一個由 AmS-L

A

TEX所提供的 align 環境,使用 align 環境的好處是,每一個

數學式子只需要一個符號 &,排版會依這個符號來對齊,若有數個數學式在同一行,各個

數學式子也是使用 & 來區隔。所有式子要向左對齊的話,只要把 & 置於行

首就可以了。

例如:程式 2.7 第 2 至 4 行等號左邊都有 & 符號,編譯結果如圖 2.3,三行方程式都以等

號左邊對齊。在本例子中使用的環境加入星號,因此方程式並未編號。本論文微積分題庫

的數學方程式主要以此環境編排。

除了版面要求外,針對不同型態的文件,需要不同的巨集套件。例如: amsmath 套

件提供各種編寫數學公式的功能; amsthm 套件提供數學定理排版環境; epic 套件提供

基本的畫圖指令;pstricks 套件的繪圖環境可以畫出各種數學函數圖線,不但方便而且圖

形非常

漂亮美觀,以 pstricks 排版結果可參考[20]。L

A

TEX巨集套件種類眾多,可適合各種

型態的文件排版,若所提供巨集套件有部分設定不符合自己的要求,還可以在前置文區可

以定義新的命令及新的環境,自訂新命令語法是

1

newcommand

{name}[num]{definition}

10

background image

f

0

(1) = lim

h

→0

f (1 + h)

− f(1)

h

= lim

h

→0

h(2 + h)

h

= 2

圖 2.3: align 數學環境 L

A

TEX編譯結果。

其中中括號中的 num ,代表新命令需要 num 個參數,可指定 0 - 9 的數字或不指定,若不

指定則表示不需要任何參數。當 L

A

TEX編譯到 name 時會把整個命令置換成 definition 命

令。例如:在本文中使用方程式顯示型態的數學模式加總命令,必須輸入 

displaystyle

sum ,可以使用自訂新命令 

nercommand

{

dsum

}{

displaystyle

sum} 取代,以簡化

輸入。若再加入累加符號上下限參數變化,自訂新命令可進一步設定為 

newcommand

{

dsum}[2]{

displaystyle

sum_{i=

#1}^{#2}}

,執行新命令時必須給兩個參數。例如:

L

A

TEX編譯新自訂命令 

dsum

{1}{n} 時,參數

#1

#2

會分別以 1 及 n 取代,整個命令

最後取代為 

displaystyle

sum_{i=1}^{n} 。

自訂新環境語法是

newenvironment

{name}[num]{before}{after}

與自訂命令一樣, num 指定參數個數,若不指定則預設不給任何參數; name 為新命令的

名稱; before, after 則分別為開始與結束環境命令時的處理設定。

nercommand

、 

newenvironment

是建立新的命令或環境,不能用在定義已存在

的命令或環境,若要更改或重新定義新的命令與環境,必須使用 

renercommand

renewenvironment

,其設定方法與建立新的命令或環境相同。

本論文微積分出題系統解答以定理證明環境 begin{proof}...end{proof} 做為解

答,但為方便同時產生考卷及答案卷,此定理環境必須重新定義如程式 2.8。定理證明環

境可提供一個外加參數,做為與項目編號環境功能一樣自訂標記用,在開始命令 begin

{proof} 後緊接中括號內填入參數。例如,begin{proof}[Solution]...end{proof},

則定理環境抬頭會由預設的證明抬頭 Proof: 變更為 Solution:,可以藉此區分證明題

解答及一般題目答案。定理證明環境中的內容為題目的解答,為區分考卷與答案卷,

我們自行定義 myproof 顏色如第 1 行,並重新定義定理環境,於其內容中加入顏色命

令color,且使用 myproof 顏色如第 6 行。因此,只要改變 myproof 顏色定義,所有解

答部分都將跟著改變。

11

background image

definecolor{myproof}{rgb}{.02,.07,.9}

2

renewenvironment{proof}[1][proofname]{

par

noindent

pushQED{qed}

4

vspace*{-0.5cm}small

%topsep4%p@@plus2p@relax

trivlist

6

item

[

noindent

hskip

labelsepitshape#1:]color{myproof}nopagebreak

[4]

ignorespaces

}

{popQEDendtrivlist}

Listing 2.8: proof 定理證明環境重新定義。

#!/bin/sh

2

#Date: Apr 16 2012

clear

4

ls -l -a

Listing 2.9: 顯示檔案目錄腳本。

2.3

Shell 腳

腳本

本程

程式

式語

語言

Shell 腳本是一種簡單的特定領域程式語言( Domain-Specific Language, DSL )[21],使用於

Unix-like 系統的直譯式語言,執行腳本時 shell 會逐行執行,前面的命令未完成,後面的

指令不會執行。使用者將一連串的命令,配合變數運用、條件判斷、流程控制,寫在一個
檔案就是一個腳本。腳本不但可以提供系統命令的變化,也可以寫成一個全新的命令。若

以 vi 編輯檔案 /home/dywang/bin/l 如程式 2.9 ,則此簡單腳本可以清除目前螢幕並以長

格式顯示目前目錄下包含隱藏檔的所有檔案及目錄,其中除第一行

#!/bin/sh

宣告此腳

本使用命令 /bin/sh 執行外,其

餘 # 都為腳本註解,不會執行。

執行腳本的方法有很多種如程式 2.10 ,其中第 1 行及第 2 行以開啟新的 shell bash

或 sh 執行腳本,第 3 行

". l"

為不開啟新的 shell 而以目前的 shell 執行腳本。若以腳本

內部宣告命令直接執行,則必須先將腳本加上可執行的權限如第 4 行,需要特別注意的是

shell 執行一個命令時,會到環境變數 $PATH 指定的目錄搜尋是否有此可執行檔,若目前

工作目錄不在搜尋範圍內,即使在工作目錄有可執行的 l 腳本,直接下 l 命令也無法執

行。因此,必須如第 5 行以直接以絕對路徑指出要執行的腳本,或如第 6 行以相對路徑

"." 說明要執行的在目前工作目錄下。

腳本通常不是只用來將多個命令在一起執行,而是藉由判斷及迴圈等控制流程,以

提供使用者更彈性的執行方式。腳本常用的判斷語法如

if

..

else

..

fi

,以 if 開頭,兩個

字元倒過來 fi 就是判斷控制結束。常用的迴圈控制流程如

for

;

do

...

done

,for 迴

圈的 index 變數不但可以使用數字,也可以是字串,非常有用。程式 2.11 dvi2ps.sh 是一

個批次將 dvi 檔轉成 ps 檔的腳本,其中第 8 至 11 行的 for 迴圈就是以所有附檔名為 dvi

12

background image

$ bash l

2

$ sh l
$ . l

4

$ chmod +x l
$ /home/dywang/l

6

$ ./l

Listing 2.10: 顯示檔案目錄腳本執行。

#!/bin/bash

2

if

[

"$1"

==

""

] || [ ! -d

"$1"

];

then

echo

"$1 does NOT exist."

4

exit

1

fi

6

cd

$1

filelist=‘ls *.dvi‘

8

for

filename in $filelist

do

10

dvips -sPAPERSIZE=a4 $filename -o ${filename%.dvi}.

ps

done

Listing 2.11: dvi 轉 ps 腳本 dvi2ps.sh 。

的檔案名稱做為累進的 index 變數。程式第 2 至 5 行先使用 if 判斷如果第 1 個參數空白

或非目錄,則輸出 $1 does NOT exist. 並退出;第 6 行改變工作目錄至第 1 個參數指

定的目錄;第 7 行將列出所有附檔名為 dvi 檔( ls *.dvi )的執行結果放到變數 filelist

,最後第 8 至 11 行

for

迴圈以 dvips 命令將所有 dvi 檔案轉成 ps 檔。

程式 dvi2ps 執行方式如程式 2.12 ,第 1 及 3 行第 1 個參數分別為空白及不存在的

目錄 aaa ,取代第 1 個變數內容並輸出如第 2 及第 4 行;第 5 行第 1 個參數為目前的

工作目錄,目錄存在但目錄中找不到任何 dvi 檔,輸出 ls: cannot access *.dvi: No

such file or directory ;最後第

7 行輸入的第 1 個參數,目錄不但存在且目錄中有

dvi 檔,腳本會將其轉成 ps 檔。從此例子中可以看出腳本不但批次處理,更相當有彈性

的依不同的執行參數,做不同的處理方式。

$ dvi2ps.sh

2

does NOT exist.

$ dvi2ps.sh aaa

4

aaa does NOT exist.
$ dvi2ps.sh .

6

ls: cannot access *.dvi: No such file or directory
$ dvi2ps.sh ../Documents/latex/paper/ijchen/cyut_thesis/

Listing 2.12: 執行 dvi2ps.sh 腳本。

13

background image

2.4

出題

題系

系統

統規

規劃

本論文構想使用 shell 腳本自動處理 L

A

TEX文稿,以達到自動輸文文件之目的。以微積分

出題系統及考題講義同步系統,進行設計並驗證上構想的可行性與實用性。兩套出題系統

皆先規劃各班級所有出題需要的參數,並統一置於班級參數檔,腳本讀取參數檔參數並依

據參數進行 L

A

TEX文稿的建立與編譯。兩套出題系統相同特性整理如下:

各班參數為獨立存檔,系統讀取各班級參數出題,並自動將輸出檔案儲存於該班預

設目錄,完全不相衝突。出題者只要考慮各授課班級的進度及學生程度後,將相關參數建

立在該班參數檔上即可,不須更動腳本內容,可以適用多班不同進度或不同程度之出題。

每週考試皆分別有考卷及答案卷,考卷與答案卷使用同一文稿,解答部分以藍色顯

示可以做為答案卷,顏色改為底色白色,留下的空間可供學生作答用,如此就可當學生考

試用考卷。如此規劃先定義解答內容顯示用顏色,只要修改顏色定義就可一次修改所有解

答的顏色。因此,考卷與答案卷可使用同一文稿,不必製作兩份類似的文稿,不但可方便

處理,更可節省檔案的存檔空間。對於某些需要完全去除解答內容,不留解答排版空間的

考卷,L

A

TEX語法中也提供多行註解的功能,不必真的刪除文稿解答內容,而是在解答的

開始與結束前後,加入多行註解的起始與結束命令,同樣可以編譯成沒有解答且不留空間

的考卷,所以考卷及答案卷同樣可以使用同一文稿,不會有任何問題。

班級參數檔預先設定各類型考試之考試題數,但每題題目及解答長短不一,往往造

成相同題數下,所需作答時間卻大不相同,而解答內容的多寡卻可做為作答時間的參考。

因此,為求每次考試所需作答時間相近,班級參數檔中除設定出題題數外,亦指定考卷及

答案卷輸出頁數。腳本於答案卷輸出訊息中讀取頁數,若超過設定值,則刪減題目,直到

符合原始頁數設定才做最後的輸出。不但可達到作答時間的控制,也可避免少量的幾行佔

用一頁的現象,以節省考卷的列印,並讓產生的文件更一致。

腳本自動依科目、班級、考試類型及考試日期等參數,組合成檔名,不但有利檔案

判讀且不會重複,更可配合 Linux 例行性工作排程自動於考試結束後立即上傳解答供學生

上網下載參考。

微積分出題與考題講義同步系統不同之處整理如下:

微積分出題系統先建立考題題庫,題庫中自訂章節、題型及難易度標記,出題時依

據設定章節及難易度從題庫中隨機選擇題目。相同題型的題目會在同題型標記內,系統對

於同題型的題目最多只選取一題,不會出現多題同題型題目的現象,以增加測驗之實用

性。考題講義同步系統則直接使用講義各節中的練習題作為考題,只要講義以 L

A

TEX章節

語法撰寫,並於各節最後加入練習題,腳本會自動判讀 L

A

TEX章節命令,擷取考試章節內

的練習題進行出題,不需要獨立建立題庫,以達到講義及考題同步的目的,若講義章節更

動或練習題調整,出題系統也不需要做任何的修改。

14

background image

目前考題講義同步系統出題以 Linux System 為例,題目都是簡答題型式,配分不需

要複雜的調整,所以僅使用比較簡單配分,以滿分 100 分除以題數做為每題的分數。微積

分則題型變化大,每題給分不同,為達此目的,微積分題庫各題目解答統一以 L

A

TEX定理

證明環境呈現,腳本自動計算該題解答內容所佔文稿篇幅做為給分比例,然而部分題目含

有圖形,繪圖命令可能佔用較大的篇幅而影響給分,腳本對此亦自動判讀繪圖篇幅,給予

適當的上限限制,以達配分之合理性。最後調整總分為 100 分,完全不須要另外計算配

分。

15

background image

3

出題

題系

系統

統設

設計

本章介紹微積分出題及考題講義同步出題系統設計方法,說明以 shell 腳本自動處理

L

A

TEX文稿之可行性及實用性。以下就分節說明兩種出題系統的設計流程及原理。

3.1

微積

積分

分出

出題

題系

系統

3.1.1

設計

計原

原理

本出題腳本是由讀取參數檔自動產生 L

A

TEX考卷文稿,並編譯成答案卷及考卷。參數檔設

計以行為單位如程式 3.1 ,每行第一組字串為標記符號,做為腳本判讀用,其後以空白

或 Tab 隔開之字串為實際內容。程式 3.1 第 1 行課程名稱 Calculus ,其標記為 course

;第 3 行班級 1A ,修課人數 69 ,兩者整合標記為 class_no ;標記 first_day 為開學

日; allow_days 控制本學期每週小考為星期幾,例如開學日為星期三, allow_days 2

則每週星期五小考及繳交作業; page_limit 分成四個欄位,分別控制作業、小考、期中

期末練習及期中期末考等考卷或作業的頁數;標記 ex_like_hw 有三個選項,可以控制作

業與小考的關聯性, 0 表示小考題目完全由作業抽取,不做任何改變, 1 代表小考以作

業題型隨機抽取題目,題型一樣題目則不一定相同, 2 表示小考題型雖與作業相同,但

題目完全不一樣,這項設計可以做更彈性的出題,以適合不同程度的班級。標記 sHME 做

為難中易題型的篩選, ME 表示腳本只會抽取中等及簡單題型。標記 grad 分成三個欄位

分別控制小考易中難題型的題數, grad 3 2 0 表示簡單題 3 題、中等題 2 題、困難題

0 題,至於題目較多的期中期末考則以這個比例增加題數;最後 week1 至 week18 為 18

週考試類型及範圍標記,並有三個欄位,第 1 個欄位 Exam, Midterm, Final 分別表示小

考、期中考及期末考;欄位 2 及 3 則分別代表考試範圍,例如第 9 週為期中考,考試範

圍從第 7 章至第 8 章。

16

background image

file_lead

cal

2

course

Calculus

instructor

De-Yu Wang

4

class_no

1A 69

allow_days

2

6

first_day

20120220

page_limit

2 1 6 3 (Hw Ex Hw_MF MF)

8

ex_like_hw

1 (0:the same 1:random 2:different)

sHME

ME

10

grad

3

2

0

12

week1

Exam

x

x

14

week2

Exam

x

x

week3

Exam

7.1 7.3

16

week4

Exam

7.4 7.5

week5

Exam

7.6 7.6

18

week6

Exam

7.7 7.8

week7

Exam

8.1 8.2

20

week8

Exam

8.3 8.3

week9

Midterm 7

8

22

week10

Exam

x

x

week11

Exam

9.1 9.2

24

week12

Exam

9.3 9.4

week13

Exam

9.5 9.6

26

week14

Exam

10.1

10.3

week15

Exam

10.4

10.5

28

week16

Exam

10.6

11.1

week17

Exam

11.2

11.4

30

week18

Final

9

11

Listing 3.1: 微積分出題參數檔。

17

background image

微積分出題系統流程如圖 3.1 ,腳本則如程式 3.2 為微積分出題腳本主程式,第 7

行先判斷腳本執行所需第 1 個參數班級參數檔及第 2 個參數題庫檔是否存在,若不存在,

則以列出警告訊息及腳本使用規則並以錯誤碼 1 退出;若為真,則如第 12 至19 行,取得

參數檔並以不含附檔名的參數檔名建立目錄,以利產生考卷或作業到獨立目錄,不致於造

成檔案混淆,接著以自訂函式 readParameters 讀取參數作為考卷產生依據。第 21 行先
算出腳本第 2 個參數指定的考試日期,若日期為合法日期(包含空字串),則計算此日期的

週次如第 22 行,再產生作業及考卷;若第 3 個參數為 all 或 ALL 字串,更可一次產生整

學期 18 週的作業及考卷如第 25 至 27 行,其

餘情況則輸出腳本第 2 參數使用原則並以錯

誤碼 15 退出腳本。讀取參數函式 readParameters、設定週次函式 getWeek 及 產生考卷

函式 makePaper 等函式皆為自訂函式,本節後續會做進一步說明,其中函式 makePaper

如程式 3.3 為產生考卷及作業的主函式,內部呼叫多層自訂函式,為方便後續說明,先建

立式呼叫結構如圖 3.2 供參考。

Start

file?

ReadParameters

Date

Legal?

Waring

getWeek

makePaper

makePaper

wknu > 18 ?

Stop

yes

No

all or All

yes

yes

other

no

圖 3.1: 微積分出題腳本流程。

3.1.2

參數

數處

處理

參數讀取腳本如程式 3.4,讀取參數主要依賴 cat 、 grep 及 awk 三個指令,並配合管線

處理完成。程式 3.4 第 2 行以

cat

$conf 列出參數檔全部內容, grep

"course"

尋找標

18

background image

#!/bin/bash

2

# Program:
#

The examination papers generator for Calculus.

4

# History:
# 2012/04/22

De-Yu Wang

Ninth release

6

if

[ ! -f

"$1"

-o

! -f

"$2"

];

then

8

echo

"No configure file $1 or test base $2"

echo

"Usage ex> $0 configure_file test_base [date|all|All]"

10

exit

1

else

12

path=

"$(pwd)/"

conf=$path$1

14

base=$path$2
dir=${1%.*}

16

mkdir $dir 2>/dev/null

cd

$dir

18

echo

-e

"conf=$confndir=$dir"

readParameters

20

fi

input_date=$(date -d

"$3"

+%s)

22

if

[ $? -eq 0 ];

then

getWeek $input_date

24

makePaper

elif [

"$3"

==

"all"

-o

"$3"

==

"ALL"

];

then

26

for

(( wknu=1; wknu<=18; wknu++, pre+=7 ));

do

makePaper

28

done

else

30

echo

"Parameter 3 can only be for the date, for example, 20100222,

all, ALL or non-use."

exit

15

32

fi

Listing 3.2: 微積分出題腳本主程式。

function

makePaper() {

2

configHwEx

#echo "texfiles=$hwtex $extex"

baseHw

4

[ $? -ne 0 ] &&

return

1

preamble $hwtex $extex

6

createAnsPaper
createPaper $hwtex

8

pageReduce $explm $extex
createPaper $extex

10

}

Listing 3.3: 微積分出題系統考卷製作函式 makePaper。

19

background image

makePaper

configHwEx

baseHw

preamble

createAnsPaper

chapSelect

typeAssign

itemSelect

rmlabel

postamble

pageReduce

rmitem2

score

createPaper

dvipdftk

pageReduce

rmitem2

score

createPaper

dvipdftk

圖 3.2: 微積分出題 makePaper 函式結構圖。

20

background image

function

readParameters() {

2

pdfpw=$(strings -n 8 /dev/urandom | head -1)
cour=$(

cat

$conf | grep

"course"

|

awk

’{print $2}’)

4

inst=$(

cat

$conf | grep

"instructor"

|

awk

’{print $2,$3}’)

clas=$(

cat

$conf | grep

"class_no"

|

awk

’{print $2,$3}’)

6

sjca=$(

echo

$cour | cut -c 1-3)‘

echo

${clas% *}‘

sjca=$(

echo

$sjca | tr ’[A-Z]’ ’[a-z]’)

8

clas=

"${clas% *}$_{${clas#* }}$"

# clas=’1A$_{69}$’

pre=$(

cat

$conf | grep

"allow_days"

|

awk

’{print $2}’)

10

ftdy=$(

cat

$conf | grep

"first_day"

|

awk

’{print $2}’)

shme=$(

cat

$conf | grep

"sHME"

|

awk

’{print $2}’)

12

exlikehw=$(

cat

$conf | grep

"ex_like_hw"

|

awk

’{print $2}’)

gdse=($(

cat

$conf | grep

"grad"

|

awk

’{print $2,$3,$4}’))

14

grad=(${gdse[@]})

declare

-i plm=1 quiz_nu=$((grad[0]+grad[1]+grad[2]))

16

echo

"quiz_nu=$quiz_nu"

}

Listing 3.4: 微積分出題系統參數讀取腳本。

function

getWeek(){

2

wknu=$(($1-‘date -d

"$ftdy"

+%s‘))

[ $wknu -lt 0 ] &&

echo

"Wrong date $2!!"

&&

exit

11

4

(( wknu = wknu/604800 + 1))
[ $wknu -le 0 -o $wknu -gt 18 ] &&

echo

"Wrong week $wknu!!"

&&

exit

13

6

pre=$((pre+wknu*7-7))

}

Listing 3.5: 週次產生函式。

記 course 參數行,再由

awk

’{print $2}’ 取出該行第

2 個欄位中的實際內容,最後將

取得的 course 內容存在變數 cour 。以程式 3.1 為例變數 cour 的內容應該為 Calculus 。

其他班級及授課老師等相關參數亦可以同樣的方式讀取,其中比較不同的是第 16 行以

$(

echo

$cour | cut -c 1-3) 取變數

cour 的第 1 至 3 個字元 Cal ,合併變數 clas 第 1

個欄位 ‘

echo

${clas% *}‘ 班級

1A 為 Cal1A ,再由第 17 行改為小寫 cal1a 做為考卷檔

名的前置符號。第 8 行則將 calss_no 中的班級及人數兩個欄位重組成 L

A

TEX文稿所需格

式如其註解 1A$_{69}$ 。最後 13 及 14 行將難中易題數以陣列方式存於變數 grad 。第 1

行產生 8 個字元的亂數字串,供考卷加密用。

進入考卷及作業製作函式 makePaper ,第一件工作是依據從參數檔中取得的參數,

以程式 3.5 的函式 getWeek 取得輸入日期對應的該週週次,函式計算輸入日期與開學日的

秒差再換算成週次,若週次不在 1 至 18 範圍內,則退出腳本。

程式 3.6 為考試範圍及考卷作業文稿檔名處理函式,第 2 及 4 行取出考試型態及範

圍;第 6 及 7 行分別產生不同的考試日期字串,供考卷檔名的考卷排版抬頭使用;第 11

21

background image

function

configHwEx() {

2

exty=$(

cat

$conf | grep

"week${wknu}[^0-9]"

|

awk

’{print $2}’)

exfr=$(

cat

$conf | grep

"week${wknu}[^0-9]"

|

awk

’{print $3}’)

4

exto=$(

cat

$conf | grep

"week${wknu}[^0-9]"

|

awk

’{print $4}’)

echo

"ex from $exfr to $exto"

6

exdy=$(date --date=

"${ftdy} ${pre} days"

+%Y%m%d)

exDy=$(date --date=

"${ftdy} ${pre} days"

+%B %d %Y)

8

[ ! -f $base ] &&

echo

"No base file $base"

&&

exit

1

case

$exty in

10

Exam)
hwplm=$(

cat

$conf | grep

"page_limit"

|

awk

’{print $2}’)

12

explm=$(

cat

$conf | grep

"page_limit"

|

awk

’{print $3}’)

hwtex=

"${sjca}Hw${wknu}_${exdy}.tex"

14

extex=

"${sjca}Ex${wknu}_${exdy}.tex"

;;

16

Midterm | Final)
hwplm=$(

cat

$conf | grep

"page_limit"

|

awk

’{print $4}’)

18

explm=$(

cat

$conf | grep

"page_limit"

|

awk

’{print $5}’)

hwtex=

"${sjca}Hw${exty}_${exdy}.tex"

20

extex=

"${sjca}${exty}_${exdy}.tex"

#echo "plmmm=$plm"

22

;;
*)

24

echo

"Only Exam Midterm or Final for Hw"

exit

3

26

;;

esac

28

}

Listing 3.6: 微積分出題考卷作業檔名產生函式。

及 12 行取出作業及考卷頁數限制;第 13 及 14 行則以班級代號、作業(小考)代號、週

次及考試日期組成文稿檔名,例如 cal1aEx7_20120404.tex 為資工 1A 微積分第 7 週小

考,考試日期 2012 年 4 月 4 日。第 17 至 20 行類似 11 至 14 行,不同之處在於期中期

末考卷及作業頁數不同,檔名設計也不同,例如 cal1aMidterm_20120418.tex 為資工 1A

微積分期中考,考試日期 2012 年 4 月 18 日。若考試型態不屬於設定字串,腳本輸出警

告訊息並退出。

3.1.3

題庫

庫處

處理

程式 3.7 為微積分題庫範例,其中自訂標記 item[Chap.n.m] 為第 n 章第 m 節,例如程

式 3.7 第 1 行表示以下為第 2 章第 8 節題目;每個題目以 item(NO%) 開頭,其中 NO 於

出題確定時,腳本會以自動配分的分數取代,題目解答部分統一以 begin{prrof}...

end{proof} 定理證明環境呈現,以利腳本同時輸出答案卷及考卷;題目難易度標記有三

種 item[TypeHard] item[TypeMidd] item[TypeEasy] ,分別代表難中易題型,每個

22

background image

標記為難中易的題型都有多題同類型題目,以利隨機出題。

題庫抽取函式如程式 3.8 ,第 2 及 3 行依考試範圍參數分別從頭尾找到章的標記且

找到一次即停止,以允許只有章沒有節讓考試範圍參數輸入,第 4 至 7 行再依從題庫尾

找到的章節標記,往下尋搜至該節結束並記下行號。第 10 至 13 行判斷考試範圍是否存

在於題庫,若不存在則退出函式,存在則執行第 14 行將題庫中的考試範圍題目抽出並暫

存於 tmpfile 。

3.1.4

文稿

稿

稿建

建立

文稿所需參數都設定好之後,先建立考卷及作業文稿的前置文如程式 3.9 ,第 2 行

判斷考試範圍是否為單節或單章,如果是章節變數 exft 只取一項,否則完整呈現範

圍;第 4 至 5 行從呼叫此函式的第 1 參數文稿檔名,抽取文稿型態,例如,文稿檔

名 cal1aEx6_20120328.tex cal1aHw6_20120328.tex ,變數 txfg 會分別取得文稿型態

Ex, Hw 也就是小考還是作業;第

6 及 7 行則列印建立文稿所需的參數內容,以利執行時

查詢;第 9 至 34 行則建立文稿前置文至提供的文稿檔名中,其中第 13 至 20 行自訂常用

數學符號如積分、加總等為方程式顯示型態,以簡化輸入;第 21 行定義 myproof 顏色為

藍色 {grb}{.02,.07,.9},並重新定義定理證明環境 begin{proof}...end{proof} 如

第 22 至26 行,將環境顯示以 myproof 顏色顯示如第 25 行,主要目的不只是讓考卷解答

以不同顏色顯示,更提供考卷及解答文稿建立的方便性,因為只要先將解答編譯好,再修

改第 25 行的顏色為背景底色,編譯出的文件就是留有空白供學生作答的考試用考卷,不

必重複建立文稿,相當方便;第 30 行將考卷抬頭如班級、考卷型態、考試範圍、考試日

期及出題老師等資料以提供的參數變數呈現,提供文稿抬頭的正確性。第 27 及 33 行分

別開始文件及項目編號環境 begin{document} begin{enumerate}。

文稿含解答題目之正文內容建立函式如程式 3.10 ,函式 chapSelect 如程式 3.11,

主要功能是找出出題範圍內各章節的標記,記下行號並存入陣列變數 ch,再以第 5 及 10

for

迴圈分章節存入 tmpch 章節暫存檔,並呼叫函式 typeAssign 以題型為單位選取題

目。

題型處理函式如程式 3.12 ,第 2 至 4 行從章節題目暫存檔 tmpch 找出題型標記,

記下行號並存入陣列變數 ta ,再以第 5 及 12 行

for

迴圈分題型存入 tmpty 題型暫存

檔,並呼叫函式 itemSelect 進行題目選取。第 6 行找該題型的下一個題型標記行號,做

為此題型的結尾。由於目前題型有可能是本章節最後一種題型,此種情況下第 6 行輸出為

空字串,第 8 行會進一步以解答的結束字串 end{proof} 做為本題型的結尾。

題目選擇函式如程式 3.13 ,第 2 行以同樣的方式從題型暫存檔 tmpty 找出題目

標記,記下行號並存入陣列變數 ia ,第 3 行判斷若此題型不包含任何題目,輸出

No exam item 並返回;第

5 行判斷若題型只有 1 個題目,則直接選取並加入作業及小考

23

background image

item

[Chap.2.8]

2

item

[TypeHard]

item

(NO

%) Prove that $dfrac{d}{dx}(ln x)=dfrac{1}{x}$, for $x>0$.

4

begin{proof}
begin{align*}

6

f’(x)&=dfrac{d}{dx}

ln

x=dfrac{1}{x(

ln

e)}=dfrac{1}{x}

end

{align*}

8

end

{proof}

item

[TypeMidd]

10

item

(NO

%) Find the $f’(x)$ of $f(x)=e^{sin 2x}$.

begin{proof}[Solution]

12

begin{align*}
f’(x)&=e^{

sin

2x}

cdot

frac{d}{dx}

sin

2x

14

&=e^{

sin

2x}

cdot

cos

2x 

cdot

2

&=2 

cos

2x 

cdot

e^{

sin

2x}

16

end

{align*}

end

{proof}

18

item

(NO

%) Find the $f’(x)$ of $f(x)=log_2(x^3+2x)$.

begin{proof}[Solution]

20

begin{align*}
f’(x)&=frac{1}{(x^3+2x)

cdot

ln

2} 

cdot

frac{d}{dx}(x^3+2x)

22

&=frac{3x^2+2}{

ln

cdot

(x^3+2x)}

end

{align*}

24

end

{proof}

26

item

[Chap.3.1]

item

[TypeEasy]

28

item

(NO

%) Find a value of $c$ satisfying the conclusion of Rolle’s

Theorem for $f(x)=x^3-3x^2+2x+2$ on the interval $[0,1]$.

begin{proof}[Solution]$f(0)=f(1)=2$ and $f’(x)=3x^2-6x+2$. We have

30

[f’(c)=3c^2-6c+2=0,

qquad

Rightarrow

c=1

pm

frac{1}{3}

sqrt

{3},]

[c=1+frac{1}{3}

sqrt

{3}text{ not in the interval }(0,1)

quad

therefore c=1-frac{1}{3}

sqrt

{3}

approx

0.42265

in

(0,1).]

32

end

{proof}

item

(NO

%) Find a value of $c$ satisfying the conclusion of Rolle’s

Theorem for $f(x)=x^2+1$ on the interval $[-2,2]$.

34

begin{proof}[Solution]$f(-2)=f(2)=5$ and $f’(x)=2x$. We have
[f’(c)=2c=0,

qquad

Rightarrow

c=0

in

(-2,2).]

36

end

{proof}

Listing 3.7: 微積分題庫範例。

24

background image

function

baseHw() {

2

lnfr=$(

cat

-n $base | grep -m 1

"item[Chap.${exfr}"

|

awk

’{print

$1}’)

lnto=$(

cat

-n $base | tac | grep -m 1

"item[Chap.${exto}"

|

awk

’{print $1}’)

4

((lnto++))

#echo "lnto=$lnto"

#lnto=$((${totm[${#totm[@]}-1]}+1))

6

lnto=$(

cat

-n $base |

sed

-n

"${lnto},$p"

| grep -m 1 ’item[Chap

.’ |

awk

’{print $1}’)

[ -z

"$lnto"

] && lnto=$(

cat

-n $base | tac | grep -m 1 ’end{proof

}’ |

awk

’{print $1}’) || lnto=$(

cat

-n $base |

sed

-n

"1,${lnto

}p"

| tac | grep -m 1 ’end{proof}’ |

awk

’{print $1}’)

8

echo

"lnfr=$lnfr lnto=$lnto"

10

if

[ -z

"${lnfr}"

] || [ -z

"${lnto}"

];

then

echo

"No section ${lnfr} or ${lnto}"

12

return

2

fi

14

cat

$base |

sed

-n

"${lnfr},${lnto}p"

> tmpfile 2>/dev/null

}

Listing 3.8: 從題庫抽取考試範圍題目函式。

文稿中;第 10 至 25 行對多題目題型進行隨機選題,第 11 行以隨機亂數 RANDOM 除以此

題型最大題數 ${

#ia[@]}

餘數,得到選取題號,若此隨機題不是本題型的最後一題,

以下一題的題目行號做為本題結尾,否則以本題型最後一行為本題結尾,存入作業文稿

中。第 13 至 22 行的判斷式,主要是依據參數檔中考試與作業相似度參數 ex_like_hw 進

行考試題目的選取。選取變數 exlikehw 若為 0 ,表示考卷與作業題目完全一樣,不用進

一步選題;若為 1,表示考卷題目要再隨機選題,如果選出同樣的題目也沒關係;若為

2,則再隨機選題的題目不可與作業相同,程式如第 18 至 20 行

until

迴圈。第 23 至 25

行找出考題的開始及結尾匯入考卷文稿。

標記移除函式顧名思義是移除文稿中章節、題目難易度標記,如程式 3.14 第 3

行,第 4 行並將已配分題目改回未配分記號 item(NO%) ,以利重新編譯並配分。文

稿建立的最後一階段就是完整文稿函式如程式 3.15,為開始文件環境及開始題號編號

環境 begin{document} begin{enumerate} 加入環境結束字串 end{enumerate} end

{document}。

3.1.5

考卷

卷頁

頁數

數調

調

調整

整與

與配

配分

作業及考卷文稿是每一題型抽取一題進行編譯,編譯結果若高於預設頁數,必須經過如程

式 3.16 降低頁數函式進行調整。由於 L

A

TEX編譯成功標準輸出會有如下訊息:

Output written on cal1aEx6_20120328.dvi (1 page, 5984 bytes).

25


Document Outline

收藏 ⬇️ 下載