轉(zhuǎn)自王垠 yinwang.org
標(biāo)準(zhǔn)化試卷標(biāo)記語言
(寫另外一篇博文的時候發(fā)現(xiàn)跑題太多,所以現(xiàn)在把它獨立出來另外寫一篇。)
我本科的時候給我爸設(shè)計了一種“標(biāo)準(zhǔn)化試卷標(biāo)記語言”(他是中學(xué)英語老師)。當(dāng)時我寫了一個1000來行的 Perl 腳本,可以把這種簡單的標(biāo)記語言轉(zhuǎn)換成美觀的 LaTeX 格式文檔,并且?guī)в杏押玫?Tk 圖形界面。題目可以包括選擇題,填空題,改錯題,…… 這種語言的特點是,題目和答案都放在一起,所以出題的時候很直觀。經(jīng)過處理之后,答案與題目分離,并且被放到答案表里正確的位置上。這樣出題的人就不會把答案放錯位置,也不用擔(dān)心如何排版。
比如,選擇題的格式是這樣:
# Our teacher told us that there ______ no end to learning.
A. was B. is * C. has D. had
每道題開頭都是一個 #,正確答案后面加一個 *。在處理的時候這些 # 都會被變成題目編號,而有 * 標(biāo)記的答案選項,會被放到答案表里面。
最有意思的是改錯題。因為改錯題是一個英語段落,某些行有錯,但每行最多只能有一個錯。所以我的設(shè)計是,在普通的段落里插入這樣的記號:
This is an |extraordinary|extrordinary| sentence...
用以“引入錯誤”。左邊是正確的方式,右邊是錯誤的。這里使用 | 是因為這個符號不會在普通的英語文章里出現(xiàn)。| 的左右兩邊都可以是空白,用以表示“插入”與“刪除”。比如:
I don't know how to play |the|| piano.
這樣的題目顯示出來之后是這樣:
I don't know how to play piano.
然后答案里會顯示:
在 play 和 piano 之間加 the
如果兩個都不是空白,那就是“修改”,就像上面的例子。最后我會根據(jù)這些標(biāo)記的位置把段落排版,讓每行上面最多只有一個錯。為了讓段落的行看起來均勻,我使用了一種類似 TeX 的動態(tài)規(guī)劃斷行算法。它先算出多種斷行方案的“難看程度”,然后從中選出最好看的一個。
現(xiàn)在回想起來,我那時候的設(shè)計其實是相當(dāng)先進(jìn)的。怎么就沒想過把它做成產(chǎn)品賣給教育部呢,也許因為覺得這種技術(shù)會制造出更大量的題海,禍害更多的中學(xué)生 :-P 跟我的語言相比,現(xiàn)在一些 blog 系統(tǒng)用的 markup 語言(比如 markdown)真是小巫見大巫了。