2024年4月4日 星期四

限制 LaTex 表格中欄的寬度並讓文字置中對齊

在 LaTex 的表格中,如果我們要限制某欄的寬度,可以使用 p{}。例如如果使用
\begin{tabular}{ccccc}
原來的表格會長這樣:
可以透過下列指令
\begin{tabular}{p{0.5in}cccc}
將第一欄的寬度限制在0.5英吋,造成文字換列的效果。如下面輸出的結果
不過這樣一來,該欄所有文字都變成靠左對齊了。 有沒有辦法限制欄寬的同時,又仍讓文字置中對齊呢? 搜尋網路後發現,可以過 array 這個 package 來完成。只要記得先
\usepackage{array}
\newcolumntype{x}[1]{>{\centering\arraybackslash\hspace{0pt}}p{#1}}
然後使用新定義的x來取代原來的p
\begin{tabular}{x{0.5in}cccc}
就可以達到想要的效果。

2023年6月18日 星期日

讓暫停的命令列程式繼續執行

 我在Windows 11的命令列模式執行一個模擬程式。這個程式很花時間,而且久久才會有一次螢幕和檔案的輸出動作。我從昨天晚上就放著讓它執行,沒有將筆電關機。希望筆電在進入休眠模式前(無動作後一小時),至少可以有些進度。

今天早上將筆電從休眠模式喚醒,發現這個程式的螢幕輸出結果和檔案的最後更新時間都維持和昨晚我離開時一樣的狀況。這也許是合理的,因為筆電在休眠時這個程式也沒辦法執行。不過從工作管理員觀察,這個程序目前的CPU執行率幾乎是0,表示這個程序被系統暫停了。

怎麼辦呢? 如果我直接關掉它,代表之前的工作白做了,必須全部重頭來一次。想到以前在Unix終端機環境中,可以按Ctrl S來將一個程序的輸出暫停,然後按Ctrl Q繼續。抱著死馬當活馬醫的精神,在這個命令列視窗中試著按Ctrl S,螢幕突然就有輸出了。查看一下輸出檔案的修改時間,也變成了現在的時間。最後到工作管理員觀察,這個程序又有了正常的CPU執行率了。

我猜原先Windows系統大概認定這個程序很久沒動作,不給予任何CPU執行權。我按Ctrl S的動作讓Windows注意到這還是一個活的程序,而重新給予CPU執行權。就這樣,我的程序就復活了。事實上,當程式結束執行時,我看到螢幕上出現我之前按下的^S字元。之後我確認了,在命令列視窗中按任意鍵(例如Enter),都可以使Windows讓一個已經暫停的程序繼續工作,不一定要按Ctrl S。

將這個經驗記錄一下,說不定對誰會有幫助。

2023年2月3日 星期五

ChatGPT

如果把ChatGPT當作研究生對話,一開始的感覺就是找到夢幻學生了。它基礎紮實,要code當場刻給你看,有問題立刻回答,還解釋為何會這麼答。如果你指正了它的錯誤,它還會恭恭謹僅地承認,並立刻修正。這樣的研究生簡直是極品。

不過相處久了,也發現了極品研究生的弱點。簡單講是邏輯性和一致性不夠,而且會刻意迎合你的觀點。當你指出這個程式碼錯了,因為對測資A不成立。它會立刻修正,並且讓你看到修正後的程式對測資A是成立的。當你指出修正後的版本對測資B不成立時,它又立刻道歉,然後修正成對測資B成立。然後,咦? 這不是當初對測資A不成立的版本嗎? 乖學生啊,你到底有沒有中心思想啊? 別見招拆招好嗎?

2022年10月2日 星期日

忍者計程車司機

國中的時候,我看過「包可華專欄」不知第幾集,記得是純文學出版社出版的書。包可華是美國華盛頓郵報的專欄作家,筆調幽默詼諧又帶點諷刺,有人長期將他的文章翻譯成中文,刊在報紙上成為專欄文章,久而將文章集結成冊出版(不知有無授權)。

令我印象深刻的有兩篇文章。一篇講包可華搭飛機時與一位人體工學的專家聊天,聊到專家的工作就是研究如何在飛機上擠出更多的空間,好放入更多的座位。裡面各種匪夷所思的想法,我想包可華意在諷刺航空公司為了賺錢,不惜讓乘客委屈擠在小小的座位裡。文章末了,包可華語帶諷刺地跟專家說:「你們甚麼地方都考慮到了,是吧?」專家回:「並沒有」,眼角餘光看著廁所。

另一篇講包可華到日本出差的經驗,他將日本東京的計程車司機形容成忍者,因為他們瘋狂的開車方式好像武術表演。那時候我還沒出過國,但非常可以體會包可華要講什麼,因為那時我們的街頭,計程車司機的表現應該是不遑多讓。

這篇文章讓我產生一個先入為主的印象,那就是東京街頭計程車司機開車都很瘋狂。後來真的有機會到日本後,站在東京街頭,我這個印象就完全消失。反而陸續到過東南亞、南亞、和北非幾個國家,包可華說的忍者計程車的形容詞都不時會從我的記憶中浮現。至於我的故鄉,大部分的計程車司機應該都改習佛法,變成佛法僧了。

2022年8月31日 星期三

選票設計

「投票」經常用來決定議案或人選。它看似公平合理,有時卻會有詭異的地方,不可不察。 

以某大學某學術行政職選舉為例。相關遴選辦法中規定了該人事任命須由全體教師採無記名方式行使同意權投票,如果(1)同意票達實際投票人數二分之一以上,且(2)同意票達所有具投票權人數之三分之一以上者,則獲得通過。 設想下列情境。假設全體投票人35%同意,20%不同意,而剩下45%無意見(中立)。則這項人事任命應該是要通過還是不通過,才能反應出大多數人的意見呢?這裡其實同意與不同意任何一方的人加上無意見的人數都能過半。 

現在假設選票只有「同意」及「不同意」兩個選項。又假設45%無意見的人不想被迫選邊站,也不想投票影響選舉結果,所以主要是由有明顯同意與不同意意向的人進行投票,這樣投出來的結果符合遴選辦法中規定的兩個條件,該人選會獲得通過。就算45%無意見的人還是有人會出來投票,只要這些人投同意或不同意的比例約略相等,仍然不會影響這個投票結果。

如果我們將選票改一下,加入「無意見」這個選項呢?這時候讓中立的人不想投票的不利因素去除了。假設有一半中立的人會因此出來表態,忠實地選了「無意見」這個選項,而原本會投同意與不同意票的人數與其投票意願完全不變,這樣一來,原本會獲得通過的人選,現在會因同意票未達實際投票人數二分之一以上而未獲通過(因為不同意與無意見的人數超過同意人數)。 

選票如此,問卷調查設計也有類似的竅門。某江湖傳說,如果用五個梯度的教學評鑑問卷收集的數據很難看,改成用四個梯度來問就會有改善。

2022年6月24日 星期五

論文編碼

瞭解論文中英文姓名的寫法後,我們就可以為我們研讀過的文獻或手中的論文編碼。統一的編碼原則不僅有助於文獻的分類與整理,在撰寫論文時更有助於正確的索引。

我們採用的編碼方式,是以「作者姓」加上兩位數的「論文出版年」(取西元紀年的後兩碼)構成的。

如果是單一作者,「作者姓」的部分就是該作者姓的前三個字母,其中第一個字母大寫,後兩個字母小寫。例如 Arvind Krishna 在 1999 年出版的論文,就編碼為 Kri99。

如果是兩位或三位作者合著的論文,「作者姓」的部分就是依序取每位作者姓的第一個字母所組成,每個字母都大寫。例如由 David Braginsky 和 Deborah Estrin 於 2002 年出版的論文,就編碼為 BE02。

如果作者數目超過三個,則「作者姓」的部分就是依序取前三位作者姓的第一個字母所組成,每個字母都大寫,最後再將加上一個「+」,表示作者不只三位。例如由 Tian He, Chengdu Huang, Brian M. Blum, John A. Stankovic, 和 Tarek Abdelzaher 於 2003 年出版的論文,就編碼為 HHB+03。

如果僅就一位碩士生所收集研讀的論文而言,上述編碼方式應該不太會遇到衝突的。但是如果真的有兩篇論文的編碼衝突,則在編碼的最後面依序以 a, b, c, ... 來分別。

上述編碼過程中,如果遇到作者的姓是由兩個 word 所組成的,則我傾向於取最後一個 word 的開頭字母做為代表。即用 R 代表 El Rewini,而以 N 代表 von Neumann。

2022年6月11日 星期六

生育獎勵金

一個人口不多的小村落裡,某一年突然多了五對新婚夫妻,讓感嘆村民年齡層持續老化的村長興奮不已。多年過去,這五對夫妻只各生了一個小孩。睿智的村長盤算了一下,發覺這個少子化的趨勢遲早會讓小村落滅亡,感嘆著如果時光能重來,他當年一定要做些甚麼來挽回這個趨勢。

在另一個平行宇宙中,村長感受到了這個感嘆(不知如何辦到的),決定要用金錢來解決少子化的問題。他對這五對新婚夫妻宣布了一個政策,每生一個小孩,他就發給10萬元獎勵金。

可惜的是,區區10萬元的獎勵金,沒辦法讓這些年輕夫妻改變心意。本來就只想生一個的夫婦,最終還是只生一個。結果是村長花了50萬元,卻沒讓村裡多增加任何一個新生人口。成效等於是零。

在第三個平行宇宙中,村長記取了這兩位分身的教訓(也不知如何辦到的),決定要加碼獎勵金。他想的是如果10萬元無法打動年輕夫妻的心意,那就發20萬。不幸的是,20萬的誘因仍然不大,最終只有一對夫妻為了這個政策,多生了一個小孩。結果村長發出了120萬元,只增加了一位新生人口。

在第四個平行宇宙中,村長想了一想,決定了一個新的獎勵政策。這個政策是,前兩胎不給予任何獎勵,但如果生了第三胎,給100萬的生育獎勵金。

這五對新婚夫婦中,有三對夫婦對100萬的獎勵金無動於衷,仍然只生了一個小孩。其他兩對夫婦心動了,想拿這100萬的獎勵金。其中一對夫婦生了第二個小孩後,發覺教養孩子所要花費的心力,還是超過他們的能力所能負擔的,所以放棄了生第三胎的念頭。只有一位夫婦認真的生了第三胎,拿到了村長承諾的生育獎勵金。

結算起來,這位村長花了100萬元,增加了三位新生人口,勝過那些其他平行宇宙的分身們。

只有100萬時,如何做到正常來講花費200萬才能做到的事情? 答案就類似發行公益彩券背後的原理。