FLOLAC’14 參與後感

FLOLAC 全名是「邏輯、語言與計算暑期研習營」,主旨是介紹電腦科學基礎,奇偶數年的主題不同,今年 14 年偶數年大約是數理邏輯,程式語言理論,以及函數式程式設計為主。往年因為地域的關係沒有參與過。今年恰逢畢業回國加入講者群,課程安排比以往連貫,配合第一周的型別理論展開。另一方面我也希望經由這次機會了解台灣資工學生的理論背景如何(結果恰好與開課前,拜訪東京大學的學生們形成強烈的對比,有機會再談)。以往從來沒作為學生參加過研習營,首次正式參與便是擔任講師一職以及其他課程助教,事前有些許不安。

Continue reading

加速 LaTeX 的編譯

如果注意 LaTeX 編譯時出現的訊息,會發現一開始總會花時間載入各種不同的套件,依照套件的複雜度不同像是 TikZ 或是 xypic 等會花稍微久一點的時間讀取。有一個小技巧,可以讓 LaTeX 預先「編譯」部分檔案不會每次更新的時候從頭編譯。先將檔案分成兩區,靜態區域包括套件使用以及基本定義,跟動態區域經常會更動的部分,像是以下的檔案:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{bm,amsmath,amsthm,amssymb,mathrsfs}
\usepackage[colorlinks,citecolor=blue]{hyperref}
\usepackage[all,2cell]{xy}
\UseAllTwocells
\usepackage{cleveref}
% -------- 以上是靜態區,以下是動態區 ---------------
\title{Title}
\author{Author}
\begin{document}
...
\end{document}

我們在分隔線插入指令 \dump 後,執行以下指令將直到 \dump 以前的部分先編譯起來:

pdftex -ini "&pdflatex" 檔案名稱

成功後會產生 .fmt 這就是預先編好的檔案。接下來只要將原本的檔案在 \dump 以前的部分註解或移除掉後,在檔案的第一行加入 %&檔案名稱


%&檔案名稱
\title{Title}
\author{Author}
\begin{document}
...
\end{document}

再照正常的編譯方式,就會省下原本靜態區的編譯時間了

OS X 上自動編譯 LaTeX 與自動更新

在 Windows 上如果用 Adobe Acorbat Reader,會因為預覽器把檔案鎖住,得先關掉再開。在 OS X 或是 Linux 則好一些,常見的預覽器如 OS X 上的 Preview 以及 Skim 或是 Linux 上的 Evince 都能夠自動更新檔案。配上 latexmk 這類自動編譯的 script 事情就變得複雜,要編譯一份略複雜的檔案,需要執行數次 latex 加上 bibtex,如果編譯失敗了,預覽器通常會停止更新。

而 latexmk 提供適當選項,除了編譯亦能夠掌管預覽流程。假設我們用 OS X 上的 Skim 來閱讀 pdf 檔案,在家目錄下的 .latexmkrc 中(也就是 ~/.latexmkrc)底下的設定:

$pdf_previewer = 'osascript -e "set theFile to POSIX file \"%S\" as alias" -e "set thePath to POSIX path of theFile" -e "tell application \"Skim\"" -e " set theDocs to get documents whose path is thePath" -e " if (count of theDocs) > 0 then revert theDocs" -e " if (count of theDocs) = 0 then open theDocs" -e "end tell"';
$pdf_update_method = 4;
$pdf_update_command = 'osascript -e "set theFile to POSIX file \"%S\" as alias" -e "set thePath to POSIX path of theFile" -e "tell application \"Skim\"" -e " set theDocs to get documents whose path is thePath" -e " if (count of theDocs) > 0 then revert theDocs" -e "end tell"';
    其中我們用到了 AppleScript 做條件判斷:

  1. 第一行設定要用什麼程式開啟 pdf 檔。一般在 OS X 可以用 open -a Skim 指定 Skim 為開啟的程式。但實務上 Skim 或許已經開啟檔案了,用 open -a Skim 並不會自動更新,所以加入檢查是否已開啟,若開啟則更新,若無則開啟。
  2. 第二行設定 latexmk 該如何更新檔案,選用 4 才能夠自設指令。
  3. 第三行說明用何指令更新檔案,此處若沒有開啟該檔案則無動作。

將相關設定寫入 .latexmkrc 後,之後用 latexmk 編譯則會使用這些設定,配合前幾篇提到的用 LaTeX Box 作為 vim 編輯的外掛,選用連續編譯模式(令 vim 的全域變數 g:LatexBox_latexmk_preview_continuously1)就可以在每次儲存檔案後,自動用 Skim 開啟及更新檔案囉。

近日更新

  1. 在寫畢業論文,沒空寫新的文章。
  2. 在 Blogger 建立新的 blog(這裡),修改範本檔後支援 MathJax 數學顯示效果極佳,所以以後關於範疇論以及數學相關的都在那。
  3. 交出論文之後希望有空能將 Categorical Logic and Type Theory 的習題寫完,重新整理 Enriched Category Theory 的筆記 …

數學符號的使用

幾年前曾經特地撰文說明「well-defined(良好定義)」的意思,試圖說明數學符號使用上的為了方便性,而捨去精准度的情況。前些日子在 ptt (台灣僅存不多的 BBS 討論群組)的數學討論區中,有關於多項式函數的極限證明疑問(見此),個人認為是多項式以及由多項式定義的函數兩者混淆了,經由 Josh 提點或許可作為乾枯 blog 的水源,於是由 Josh 幫忙審稿在一個多小時內,發文解釋定義函數的符號以及函數之間的關係(見此,但過於專心在細節而忽略主要脈絡),隨後不久台灣數學家法蘭克也在他的 blog 上解釋這個問題(見此)。原本想簡單地總結前幾篇的關係,但沒有清楚的脈絡呈現,加上前幾篇技術說明也足夠了,也就暫且擱著。

Continue reading

用 Xy-pic 畫二維交換圖

在 LaTeX 下要如何用 Xy-pic 畫包含 2-cell 的交換圖(commutative diagram)呢?如果只用 Xy-pic 的基本功能,至少得用三個指令完成,先畫出兩個彎曲的 1-cell 並在中間插入一個 2-cell,但我們可以藉助 Xy-pic 額外的功能將簡化我們的工作。首先要先開啓選項 2cell 如: Continue reading

OS X 的 LaTeX 寫作環境

近幾個月換了 Macbook 用作平日工作的電腦,從 Windows 到 OS X 變化不小,但慣用的工具都類似,加上類  Unix 的環境還有些 OS X 才有的軟體如 Skim,其實比起 Windows 還要方便些。

首先是 LaTeX Box 這個 plug-in,使用 Latexmk 自動編譯 LaTeX 檔案的程式,比起 Vim-LaTeX 的 multiple compile 更為迅速。配合功能強大的 pdf 閱讀軟體 skim ,可以隨時自動更新檔案,並且支援 SyncTex 提供的反向定位功能。稍稍修改 LaTeX Box 的編譯指令,就可以同時在原始檔以及輸出的 pdf 中作正向以及反向定位,加速編輯流程。

所謂的正反向定位也就是在 skim 下點完成的 pdf 檔可以要 vim 定位到對應的文字區塊,而反過也可以在 vim 下點文字區塊,對應到輸出檔的位置。有時候在校稿的同時,常常需要反覆在成品以及原始檔間互相對照,找到對應的位置編輯。使用這個功能就可以很輕鬆的在閱讀軟體下直接定位到原始檔的位置;相對地,也可以很快速地在原始檔中要確認輸出結果。

Continue reading

Schloss Dagstuhl 記

近日去了德國參加有關於 Coalgebraic logic 的研討會,在德國 Saarland(德國其中一州,首都為Saarbrücken)的城堡莊園舉辦,時程六天自禮拜天抵達開始,到禮拜五早上結束。會議是非公開私下邀請這領域的學者以及學生,免註冊費僅需支付每日五十歐元的住宿費用。受到指導教授跟計劃主持人的庇佑下,我也受邀前往。雖然行前各種因素百般不願意,但去了一趟著實體會到德國對待學人的體貼跟支援,也重新燃起完成學業的動力。 Continue reading