2020年12月28日 星期一

使用 Noto fonts 及 xelatex 製作中文文件

最近才看到 Google 有釋出免費的、開放原始碼的「思源宋體」Noto fonts, 而且 Ubuntu 20.04 內已經能直接安裝,所以來實驗一下如何搭配 xelatex, 只用少少的幾行程式碼就能夠製作中文文件。

如果 Ubuntu 內沒有 Noto 字型的話,使用以下方式安裝:

$ sudo apt install fonts-noto-cjk fonts-noto-cjk-extra
fonts-noto-cjk 有包含宋體 (Serif) 及黑體 (Sans),但每種字體只有 Regular, Bold 2 種 weights

fonts-noto-cjk-extra 則多加其他 5 種 weights。

這個網頁有完整的 7 種 weights 說明。

Serif 由細到粗分別為 ExtraLight, Light, Regular, Medium, SemiBold, Bold, Black。

Sans 由細到粗分別為 Thin, Light, DemiLight, Regular, Medium, Bold, Black。

Noto Serif CJK TC 要設定不同粗細的字體, 直接加在名稱後面加粗細的定義即可, 例如: Noto Serif CJK TC Medium。

使用 xelatex

製作一個 test.tex 檔案如下,這裡完全不使用任何 CJK 相關的套件,僅改變字型。
\documentclass[12pt]{article}
\usepackage{fontspec}
\setmainfont{Noto Serif CJK TC}
\setsansfont{Noto Sans CJK TC}

\title {文件標題 Title}
\author {Foo 張三李四}

\begin{document}
\maketitle

測試使用中文的文件。

\section{第一章}

測試中文文件,並且使用 Noto Serif CJK TC 字型的文件。看看中文能否正確顯示?
大道之行也,天下爲公,選賢與能,講信修睦。
故人不獨親其親,不獨子其子,使老有所終,壯有所用,幼有所長,矜、寡、孤、獨、廢疾者皆有所養,男有分,女有歸。

貨惡其棄於地也,不必藏於己;力惡其不出於身也,不必爲己。
是故謀閉而不興,盜竊亂賊而不作,故外戶而不閉,是謂大同。

\end{document}

使用以下命令將 test.tex 編譯為 test.pdf

$ xelatex test.tex

輸出的 PDF 文件如下:

由此可看出中文顯示正常,但沒有斷句這些功能。為了要正常斷句,需要使用  xeCJK package. 在上述文件中加入一行:
\usepackage{fontspec}
\usepackage{xeCJK}
...
即可發現文字有正常斷句了。
由此可看出斷句正常了,但是文字看起來好像不太正常。而且實際上本來應該「斜體」的英文字 Google 也沒有正常斜體。
使用了 xeCJK package 後,應該用以下的方式設定中文字:
\usepackage{xeCJK}
\setCJKmainfont{Noto Serif CJK TC}
\setCJKsansfont{Noto Sans CJK TC}
...
這樣設定之後看起來好多了。字體可正常,英文斜體也正常。

LyX 的設定

在 Document Settings 的 Fonts 勾選 Use non-TeX fonts, Language 的部份選擇 Chinese (traditional), LaTeX Preamble 內輸入至少有以下設定:
\usepackage{xeCJK}
\setCJKmainfont{Noto Serif CJK TC}[ItalicFont={* Black}]
\setCJKsansfont{Noto Sans CJK TC Light}
\setCJKmonofont{Noto Sans Mono CJK TC}
由於中文沒有 ItalicFont, 因此定義更加粗的字體代表斜體字。

2018年11月14日 星期三

LyX 2.3.1 無法預覽插入的 pdf 圖形解決方法

最近發現 LyX 2.3.1 版本,插入 pdf 圖片時,會出現無法預覽的圖。


查詢了一下,發現有論壇說:
  1. 可能是 Ghostscript 版本太舊 (8.x) 造成的,更新到 9.x 版可解決。
  2. 可能是 ImageMagick 版本太新 (7.x) 造成的,安裝 6.x 版的可解決。
但我的環境是 Ubuntu 16.04, Ghostscript 9.25, ImageMagick 6.8.9,但還是失敗。經由直接在 console 執行 lyx 後,再插入 pdf 圖片後,會出現錯誤訊息:

convert: not authorized `/tmp/lyx_tmpdir.FNuQNXd11099/gconvertd11099.eps' @ error/constitute.c/ReadImage/412.
convert: no images defined `/tmp/lyx_tmpdir.FNuQNXd11099/gconvertd11099.png' @ error/convert.c/ConvertImageCommand/3210.


從這邊就可推測是 ImageMagick 程式造成的問題。後來檢查到原來是 ImageMagick 引入了安全機制,不允許轉換 PS/EPS/PDF/XPS 這幾種格式了。解決方法有 2 種:

方法一

將 ImageMagick 這種限制拿掉的。可修改 /etc/ImageMagick-6/policy.xml 這個檔案 (需要 root 權限), 將限制的部份註解掉 (如下)

  <!-- disable ghostscript format types -->
  <!-- comment or remove the lines below
  <policy domain="coder" rights="none" pattern="PS" />
  <policy domain="coder" rights="none" pattern="EPS" />
  <policy domain="coder" rights="none" pattern="PDF" />
  <policy domain="coder" rights="none" pattern="XPS" />
  -->
之後即可正常預覽圖案了。

方法二

LyX 內建立新的 PDF to PNG 的轉換處理方式, 不使用預設的
  • PDF to EPS
  • EPS to PNG 方式。
從「工具 -> 偏好設定 -> 檔案處理 -> 格式轉換器」內,加入:
從格式: PDF (graphics) 到格式: PNG
轉換器 pdftoppm -png $$i > $$o
如下圖。如此插入 pdf 圖案後,即可正確預覽。
此法的缺點是: 插入 eps 圖案時,還是會無法預覽圖片,因為轉換器內定義的 EPS to PNG,
依然是用 ImageMagick 的 convert 程式做轉換。所以較好的方案就是這兩種方法都用了。





2017年11月27日 星期一

LaTeX 書籍推薦

許久沒有在這部落格加文章了,主要不是沒在用 LyX 了,而是目前比較沒時間寫紀錄。很多問題都是遇到了,查一下,結果馬上就找到答案。因而就沒有紀錄在這了。

今天無意間發現大陸有出版一本「 LaTeX入門 」, 劉海洋著。試閱了一下,發現這本書介紹的真是詳細,而且也讓我對許多 LyX 的設定有更進一步的認識,因此推薦給想要更熟悉 LaTeX 的人。

這裡可以試閱一部分的內容。

2016年9月23日 星期五

一個練習 LaTeX 的好用資源

意外發現一個 LaTeX 線上編輯器,可以讓人在沒有安裝 LaTeX 的電腦上編寫 LaTeX 文件。

http://www.tutorialspoint.com/online_latex_editor.php

嘗試了一下,可惜不能製作中文文件。但英文一定沒問題,而且還可以使用 Tikz 套件。這對於想要隨時測試一下 Tikz 的繪圖命令,是個很方便的選擇。

畫面截圖

2016年8月14日 星期日

用 pgfplots 套件繪製數據圖

最近因為工作寫報告的緣故,需要在文件中放入許多測量數據的結果圖。我平常是使用 Gnuplot 繪出圖案後,輸出成 .eps 的檔案格式,再放入 LyX 文件中。但如果一個文件中有非常多的數據圖需要呈現的時候,要一個一個輸出 .eps 檔案也是很麻煩的。因此,我就搜尋看看能否直接在 LyX 中用數據資料繪圖?當然答案是肯定的。只是這些步驟是不是夠簡單而已。

首先我先參考 TikZ & PGF 的參考手冊,裏面的 Plots and Functions 一章提到「如果要使用科學座標軸簡單的繪製函數或圖形的話,可以使用 pgfplots 套件或 (TikZ的) datavisualization 命令」。當然我是比較懶的,不太想另外花時間研究新的 pgfplots 套件。仗著只了解一點點 TikZ 語法的基礎下,決定來研究看看 datavisualization 命令該如何使用?

使用方式很簡單,但我一下子就遇到麻煩了。因為我需要繪製的資料是類似底下這種結構 :
# Time Sensor_A B C
# 
# For demo
0 2 2 2
1 2 2 3
2 3 4 7
3 4 6 11
...


2015年11月16日 星期一

keystroke & menukeys 套件的簡易用法

最近需要在文件中加入「鍵盤按鍵」以及「路徑」的圖案,搜尋一下 texlive 的文件庫,就找到兩個套件就可以做到這樣的效果了, 在此簡單紀錄一下。

keystroke 套件

使用方法:
\usepackage{keystroke}
在文件中以 "插入 TeX Code" 的方式插入欲放置的鍵盤圖案。
例如, 在 LyX 中輸入:

排版結果 :
(註: 國中的歷史地理都忘了,密技卻記得這麼清楚... Orz)

可惜的是該套件沒辦法繪製 Apple 鍵盤的圖案。
真的有需要繪製 Apple 鍵盤的話,可以參考這個連結的解決方法。
或是用底下的套件亦可。

參考文件: http://ftp.yzu.edu.tw/CTAN/macros/latex/contrib/keystroke/key-test.pdf

menukeys 套件

這個套件主要在繪製選單列以及路徑,讓讀者一看就知道文件中指的是什麼。
使用方法:
\usepackage[os=win]{menukeys}
選項部份的 os 可以輸入 win  或 mac, 可以改變一些內容的呈現方式, 預設是 mac。

也是以 TeX Code 的方式插入內容。以下列出幾個常用且簡易的方法:
  • 選單列: 
\menu{AAA > BBB > CCC}
預設是以 > 做分隔號,也可以自訂義成其他的,設定在 options 的地方。例如:
\menu[,]{AAA,BBB,CCC}
  • 路徑名稱:
\directory{C:/Windows/drivers}
預設是以 「/」做分隔號 (因為反斜線在 LaTeX 中有其他用途了)。

  • 改變預先定義的樣式
\renewmenumacro{\directory}[/]{pathswithblackfolder}
第一個 {\directory} 代表要改變「路徑名稱」的定義,分隔號使用 「/」, 改變定義為 pathswithblackfolder. 至於有哪些預定義的名稱可用,可以參考 menukeys.pdf 這個說明文件。

範例:

 排版結果:


  • 按鍵:
\keys{Ctrl+Alt+Del}
預設是以 + 做分隔號。
按鍵的圖案,會隨著 package 的選項而變。如果是用預設的 [os=mac], 就可以繪製出 Apple 的 Command 按鍵的圖案了。



2014年3月18日 星期二

大陸的參考文獻的樣式

大陸的「中國國家標準化管理委員會」制定了一個 書後參考文獻 的標準, 稱為 GB/T 7441-2005,並建議(非強制)大陸出版的學術論文、期刊、書籍,都按照這個標準去製作 參考文獻。

我是覺得這樣的作法還不錯,至少有個標準可以處理中文文獻。

要不然許多中文文獻的資料,遇到 IEEE, APA, Chicago 等文獻格式的時候,很難 100% 符合原本為英文文獻設計的格式。而且一些書目軟體(如 EndNote)都沒辦法正常處理中文書目,還要另外製作製作中文專用的樣式檔案來處理。在人文社會學系的論文,其參考書目泰半是中文、英文都有,遇到這種情況就會變得比較麻煩。

不過台灣的學術界,不太可能去遵照大陸制定的標準,因此會看到各個科系提交的論文,會遵照不同的參考文獻樣式。

但我還是想試試在 LyX 使用 GB/T 7441-2005 格式處理中文文獻時,是否方便好用?如果好用,在不是那麼正式的文章中,就可以用這種格式。

首先,我找到有人提供符合 GB/T7714-2005 格式的參考文獻檔 (.bst):
https://github.com/Haixing-Hu/GBT7714-2005-BibTeX-Style

下載後,可以按照該文章所說的方法安裝,或是自己手動安裝 gbt7714-2005.bst 檔案。

接著可以按照 test 資料夾內的測試檔案,用 LyX 做一次,馬上就可以看到正常輸出了。
另外,我將 test.bib 檔案內的簡體中文書目,換成繁體中文書目,也是可以正常處理的!

2014年3月9日 星期日

排版象棋棋譜

前幾天看到維基百科介紹 LaTeX 可以做些什麼,突然看到一個「排版象棋棋譜」的套件,讓我覺得非常有趣!

我知道 LaTeX 可以排西洋棋棋譜,但我不知道還可以排象棋棋譜,當下就決定來試試看!

維基百科說需要用到 cchess 套件,查看了一下這個套件:
 http://www.ctan.org/tex-archive/macros/latex/contrib/cchess


結果...殘念啊..TeXLive 沒有收錄,所以 Linux 下不能輕易就使用這套件。但是 MikTeX 有收錄這個套件,所以如果是 Windows 下安裝 MikTeX 的話,就可以直接使用 cchess  這個套件。

不過看起來這個套件檔案不多,我決定自己擴充一下。方法類似於前一篇提的,這裡就直接寫在 Linux 中我做了哪些步驟。

套件庫中顯示有 5 個檔案:

$ mkdir -p ~/texmf/tex/latex/cchess
$ cp cchess.sty cchessboard.tex ~/texmf/tex/latex/cchess/
$ mkdir -p ~/texmf/fonts/tfm/cchess
$ cp cchess46.tfm ~/texmf/fonts/tfm/cchess/
$ mkdir -p ~/texmf/fonts/source/cchess
$ cp *.mf ~/texmf/fonts/source/cchess/
$ texhash ~/texmf

完成之後,重新配置一次 LyX, 關掉再重開 LyX,就安裝好了!

接著按照 cchessboard.tex 內的解說,試著自己畫一次,用 ps2pdf 的方式編譯,就可以看到排版結果了!:D
真的是太有趣了!

LyX 原始檔: cchess_board.lyx


不過 cchess 套件比較適合畫出「靜態」的棋盤,不太適合畫出下棋的「動態」流程。
因此,我發現還有另外一個 xq 套件,比較適合畫出動態的棋盤。而且 xq 套件都有收入在 TeXLive 和 MikTeX 中,直接使用就可以了。

我稍微測試了一下,覺得也很有趣!
LyX 原始檔: xq.lyx

 

我只有稍微試驗一下,有興趣的人再參考 xq 套件的範例 .tex 檔。

2014年2月19日 星期三

自行加入文件類別 & 寫 ACM SIGGRAPH 格式的論文

LyX 提供了許多 .layout 檔給使用者使用,但是 .layout 檔只是定義了 LyX 界面要如何呈現, 以及如何對應成 LaTeX  Code. 若是缺少了 Class 檔案 (.cls),就算有了 .layout 檔案也沒用,LyX 還是無法排版出正確的文章。如下圖,一堆「無法使用」的文件類別,幾乎都是 LyX 提供了 .layout 檔, 但是系統找不到 Class 檔。

「無法使用」的文件類別,幾乎都是缺少了 Class file (.cls)  造成的。

我之前一直搞不太懂該如何加入自己的 class file,以及 BibTeX 格式檔,最近終於試驗成功,在此紀錄一下步驟。

我以 ACM SIGGRAPH 格式論文為範例。ACM SIGGRAPH 是一個關於電腦圖學的組織, 如果要投稿論文時,需要以它們規範的格式提供論文。最方便的當然是用官網提供的 acmsiggraph 的 LaTeX 類別檔(.cls) 及 BibTeX 檔(.bst) 撰寫。ACM SIGGRAPH 官方網站: http://www.siggraph.org/learn/instructions-authors

從官網下載 acmsiggraph.zip 檔案後,解壓縮後可以看到有很多檔案。其中的 icons, .cls 和 .bst  是最主要的檔案,其他的都是 範例+說明。

紅框中的檔案跟樣式定義有關,其他是範例資料。

安裝 .cls 檔案 及 .bst 檔

在家目錄下,自己建立一個 texmf 的資料夾(如果已經有了,就不用再建立)。[註1]
接著用 mkdir 命令建立以下兩個目錄 [註2]:
$ mkdir -p ~/texmf/tex/latex/acmsiggraph
$ mkdir -p ~/texmf/bibtex/bst/acmsiggraph
接著將 .cls 檔案, icons 資料夾 和 .bst 分別複製到這兩個目錄下:
$ cp -r acmsiggraph.cls icons/ ~/texmf/tex/latex/acmsiggraph/
$ cp acmsiggraph.bst ~/texmf/bibtex/bst/acmsiggraph/
再執行 texhash ,在 ~/texmf 下,建立一個 ls-R 檔案(資料庫)
$ texhash ~/texmf

接下來再開啟 LyX, 重新配置一次,再重開 LyX, 就完成了!

[註1]: 這個是 Linux 預設的 user's texmf 目錄,如果是 Mac 的,則可能是 ~/Library/texmf。因此最保險的作法,應該是先用 tlmgr conf texmf TEXMFHOME 命令,看看預設值為何 (也就是 TEXMFHOME 設定值),再於預設路徑下建立目錄。如果想用別的目錄名稱,需手動加入 TEXMFHOME  變數中。可參考 網站1網站2 的說明。

[註2]: TeX 的檔案結構名稱是固定的,因此這邊的路徑名稱不能亂取。如果亂取, TeX Live 可能就會找不到該檔案了。詳細的命名規則,請參考 TDS, http://tug.org/tds 的文件。

用 LyX 寫 ACM SIGGRAPH 論文

如果上述步驟都很順利的話,那麼在 LyX 的選單 「文件→設定值→文件類別」裡面,就可以看到 ACM SIGGRAPH 的選項可用了。如下圖。
ACM SIGGRAPH 類別不再是「無法使用:」了。
選好文件類別後,第一個要注意的是「語言」的選項。由於這種投稿文件一定是「英文」的,所以要確定語言選項為「英語」, 而且語言套件的部份,可以直接選擇「無」,避免 LyX 自動載入 Babel 等套件。

接下來,可以對照官網提供的範例檔 template.tex 的內容,自行在 LyX 照著做一次看看,就可以知道在 LyX 中該如何使用了。

讓我卡住一下,不知道該如何輸入的,有以下幾個地方:
  1. 兩位以上的作者該如何並排?
    • 解決方法:  在兩位作者中,加入 TeX Code: \and
  2. 文件沒有自動把 Title 等資料排版出來。
    • 解決方法: 加入 TeX Code: \maketitle
  3. 範例檔中的 \CRcat{}{}{}{} 命令,需要輸入 4 個參數, 在 LyX 中不知道該如何輸入?
    • 從選單「插入」中,可以找到相對應的格式。如下圖。


用 LyX 做一遍,很容易就做出與官網提供的範例 PDF 一樣的結果。這樣要用 LyX 撰寫自己的 ACM SIGGRAPH 論文,就很容易了 :-) 。

附件:  我的練習檔.


2014年2月13日 星期四

LyX 使用者界面的中文翻譯經驗談

長久以來我用 LyX 都是用英文環境的界面,後來看到 LyX 官方網站提供的各語言翻譯進度,我就驚覺繁體中文版的翻譯進度好像太落後了,最「新」進度竟然是 2007 年...

有一天,想說「好吧!既然我自己都覺得 LyX 這麼好用,以後若要介紹其他人用,總不能都請他們用英文的界面吧!」我就決定來改善一下 LyX 中文界面的翻譯進度。因此從去年年底開始,我就開始研究該如何進行使用者界面的翻譯工作。

首先當然要先下載原始碼,當時最新的版本是 2.0.6,因此我就先以 2.0.6 版為主。下載程式原始碼後,找到裡面的 po 資料夾,裡面有個 zh_TW.po 這個純文字檔,這個檔案就放著所有的翻譯資料。不過翻譯之前,必須先閱讀一下 README.localization 的指引,看一下該如何進行翻譯。

一開始,我是採用 poedit 這個工具來協助我翻譯,但是翻沒幾個項目之後,我就沒力了。因為這個工具雖然方便,但很難看到翻譯項目的上下文,看不到上下文就很難猜目前這個翻譯項目,最後會出現在程式界面中的什麼地方?如果不知道翻譯的項目最後出現的位置,就很有可能會翻譯出不恰當的詞句。
後來,我改用最陽春的 vim 來編輯,感覺就好用多了。因為 vim 可以清楚的看到文件上下文,而且搜尋功能很好用,我可以很方便的尋找到其他翻譯過的類似詞彙,直接複製過來用就好。

改完 zh_TW.po 之後,若要測試翻譯結果,就必須做編譯動作後,再進行安裝。
我使用 Ubuntu 12.04,LyX 是直接從原始碼安裝的。因此,LyX 安裝的路徑為 /usr/local/  在安裝 LyX 的時候,純文字檔 zh_TW.po 會先編譯成 zh_TW.gmo 的二進位檔,再 搬移&改名 到 /usr/local/share/locale/zh_TW/LC_MESSAGES/lyx.mo

因此若不想每次改完 zh_TW.po 檔之後,還要重新用命令 make install 安裝整個 LyX 的話,可以自己手動編譯成 zh_TW.gmo, 再自行複製取代原本的 lyx.mo 檔案,就可以看到翻譯的結果了。

因此,我先將原始檔的 zh_TW.po 複製到一個新資料夾, 建立一個 Makefile, 內容如下:
all:
    msgfmt -c -v -o zh_TW.mo zh_TW.po
    sudo mv zh_TW.mo /usr/local/share/locale/zh_TW/LC_MESSAGES/lyx.mo
    lyx

我一個畫面用 vim 編輯完存檔後,另外一個畫面立刻輸入 make 指令之後,就會自動編譯、複製後,開啟 LyX。這樣就很方便立刻檢查翻譯的結果適不適當。

為 LyX 做翻譯,最大的好處就是又搞懂了許多 LyX 提供的功能,了解文件語系與界面語系的不同處,  而且也發現到了原始碼中錯誤的地方,自行微調之後,我終於覺得 LyX 用中文界面也很好用了!

以下紀錄一下我微調的項目:

  1. 我已將翻譯好的 zh_TW.po 提交給 LyX 團隊, 但我不知道它們何時會放入套件庫中。因此有興趣的人,可以直接下載我編譯好的二進位翻譯檔 lyx.mo,下載後根據您的作業系統,放入 LyX 程式的路經內。這個二進位檔應該適用所有 2.0.x 版本的 LyX。
    (建議先把舊的 lyx.mo 備份出來,如果新檔不能用,還可以把舊檔還原回去)
    下載二進位繁體中文翻譯檔 lyx.mo
    • Windows
      • C:\Program Files\LyX 2.0\Resources\locale\zh_TW\LC_MESSAGES\LyX2.0.mo
      • 需要將 lyx.mo 改名成 LyX2.0.mo
    • Mac
      • /Applications/LyX.app/Contents/Resources/locale/zh_TW/LC_MESSAGES/LyX-2.0.mo
      • 需要將 lyx.mo 改名成 LyX-2.0.mo
    • Linux 作業系統
      • 可能在:
        /usr/local/share/locale/zh_TW/LC_MESSAGES/lyx.mo
        /usr/share/locale/zh_TW/LC_MESSAGES/lyx.mo
      • 如果上述路徑找不到,可以開啟終端機視窗,輸入 locate lyx.mo,檢查看看舊版的 lyx.mo 放在哪裡?
  2. 修改 languages 檔案中,關於繁體中文的編碼。(這個是一個 bug, 從 2.0 版都是這樣, 我也已回報 LyX 團隊希望他們能修正, 從 2.0.8 版後應該都會修正了)。各作業系統該檔的路徑為:
    • Windows
      • C:\Program Files\LyX 2.0\Resources\languages
    • Mac
      • /Applications/LyX.app/Contents/Resources/languages
    • Linux 作業系統
      • 可能在:
        /usr/local/share/lyx/languages
        /usr/share/lyx/languages
  3. 用純文字編輯器開啟 languages 檔案後,搜尋 zh_CN, 您會發現如下的項目。將其中的 zh_CN 改為 zh_TW這樣使用者界面語言的選項、以及選擇「繁體中文」後,工作區顯示的文字才會是正確的。
# uses CJK package
Language chinese-traditional
 GuiName         "Chinese (traditional)"
 Encoding        utf8-cjk
 LangCode        zh_CN
End

微調後,就可以開啟 LyX 看看了!
首先先將使用者界面的語言換成「中文(正體)」,儲存,重新啟動之後,就可以看到中文界面了。如下圖。
選擇程式界面語言

CJK 字體設定的部份,也有 pop up 提示了。

模組部份的說明,也盡量翻譯成中文

最後要說,其實在翻譯「模組」這部份的時候,發現「模組」真的是好用的工具呀!之前我說我可能都不會用到,實在大錯特錯。現在要說,熟悉之後,以後會常常用到了。:-D

2013年12月13日 星期五

LyX 模組功能

LyX 雖然功能還滿多的,但是也只能涵蓋整個 LaTeX 的一小部份。像前一篇在練習 csvsimple 的時候,我會用到 tcolorbox 套件,需要將內容放在一個 tcolorbox 的時候,我就必須插入 TeX Code 環境,自己輸入
\begin{tcolorbox}
  ...內容...
\end{tcolorbox} 
當需要放很多這種環境時,一直複製、貼上,也是很煩人的。
研究了一下,終於大概知道該如何簡化這種煩人的動作,關鍵就在於 LyX 的模組功能(Module)。

LyX 的「模組」,就類似於 LaTeX 的 styles/packages。一份文件只能指定一種 document class, 但卻可以添加許多的樣式或套件以美化文件。在 LaTeX 中需要自己手動引用這些樣式或套件;在 LyX 中,可以自己在 LaTeX Preamble 撰寫引用命令,然後在 LyX 中插入 TeX Code 完成所需功能。

但如果在 LyX 中一直插入 TeX Code,這樣也不需要 LyX 了。因此 LyX 設計了「模組」功能,讓一些功能,能夠透過增加模組,就自動增加了某些 LaTeX 的功能,而且可以透過 LyX 的圖形介面使用 LaTeX 。加入模組後,模組會自動在 Preamble 區輸入相關設定,因此有的時候就算不知道想要使用的套件名稱,看到模組裡面有,直接增加模組,馬上就可以用了。
而且,使用者可以自己添加模組設定,加入自己常用的功能。以後如果需要某個功能時,直接加入模組,不用每次都在 LaTeX Preamble 自己手動輸入程式碼。

2013年12月6日 星期五

LaTeX 的「合併列印」--- csvsimple 套件

幾個禮拜前,我需要列印一份 Excel 的資料(這只是泛稱,不代表真的 Microsoft Office 的 Excel 檔案),但是希望格式可以工整一點,因此我想到利用 Word 的合併列印功能。但因為現在都用 LibreOffice, 所以我自然希望用 LibreOffice 裡面的「合併列印」功能,完成這個表單。試了一陣子,發現 LibreOffice 的合併列印功能實在太陽春了,似乎只能印標籤、信件等等,實在不是很好用。

後來我突然想到,不知道能否用 LaTeX 來做?搜尋一下,果然發現有好幾個套件都支援從 CSV (逗點分隔值格式) 抓取資料,稍微瀏覽一下各個套件的範例檔,我覺得 csvsimple 似乎比較好用一點,我就決定來試試看這個套件。

當然一邊看說明文件,一邊照著練習,看完說明文件也剛好做完一個小紀錄文件。

在看說明文件的時候,突然發現 csvsimple 套件的說明文件做的好精緻呀!後來查看說明文件的原始碼,才知道它另外用了 tcolorbox 的套件,所以我也如法炮製試試看。也順便發現了另外一個好用的套件 tcolorbox 。

csvsimple 套件在 LyX 中使用的時候,需要輸入很多 TeX Code,雖然我一開始很排斥看到一大堆 TeX Code 出現在文件中,但習慣之後就覺得,csvsimple 這麼多種功能變化,要做成圖形介面也是很不容易的,所以稍微辛苦,查看一下說明文件再輸入 code,也是可以接受的。

另外說明一下,LyX 原始檔使用 xeCJK 排中文(會用到 5 種 cwTeX TTF 字型),電腦內如果沒有這 5 套字體,會無法排版。可以參考前幾篇介紹 xeCJK 的部份安裝字體。改用 xeCJK, 是因為我原先用 CJK 排的時候,程式碼內只要有中文字的時候,都會出錯,讓我很沮喪。後來轉用 xeCJK 時,輕輕鬆鬆就處理完,也讓我慢慢愛上用 xeCJK 排中文文件了。

下載原始檔 test_csvsimple.zip

2013年12月4日 星期三

使用 CJK 放入含有中文字的程式碼的詭異問題

最近又需要寫個有放入程式碼的文件,程式碼中含有中文。依照之前的經驗,我只需要在 Document > Settings... > Listings 的空白處設定 extendedchars=false, 輸入的程式檔案內有中文都可以正常顯示出來。

但是最近發現,如果我放入一個 .csv 格式的檔案,中文字就會亂跑了。
嘗試著使用 listingsutf8, inputenc 等套件,加入 inputencoding=utf8  命令,都沒用。

百試不得其解下,最後只好改用 xeCJK 套件試試看。一排版...完全正常!
這真的是個詭異的問題! 研究了半天,也找不到原因所在。
我也只能暫下一個結論:「如果用 CJK 排版含有中文的程式碼有問題時,可以改用 xeCJK 試試看。」

使用 xeCJK 套件處理中文,CSV 檔案正常顯示內容。

使用 CJK 套件處理中文,CSV 檔案內容出錯。

文件檔下載

2013年9月28日 星期六

在 LyX 中設定 xeCJK 使用正體中文字型

這篇可以算是前一篇「在 LyX 中使用本機的中文字型」的進階版。因為我發現前一篇用的實在太簡陋了,沒有善用 xeCJK 的功能,所以排列中英文都有的文件時,也不是非常方便。

因此,最近仔細研究了一下 xeCJK 的功能,發現真的是好用!尤其參考了炎龍老師的部落格,更是學到許多。

以下就是我邊研究 xeCJK, 一邊寫的筆記。

下載原始檔: xeCJK-Example.lyx

2013年9月25日 星期三

在文件中放入程式碼 --- minted 套件庫

之前寫過 在文件中放入程式碼(1)(2)(3)(4), 這篇也是要介紹在文件中放程式碼,但不像前四篇文章,全部都是使用 listings 套件庫,這裡要介紹的是使用 minted 套件庫。

使用 minted 套件庫,最大的優點就是可以排出顏色層次比 listings 套件庫還豐富的樣式。例如一段 C++ 語言的程式碼,下圖就可以明顯看出差異。

使用 minted 與 listings 套件庫編排同一程式碼
不過好看的背後,還是需要一點代價,也就是安裝步驟會稍微麻煩一點。

根據 minted 的套件說明文件,這個套件庫必須使用 Python 的一個程式, 稱作 Pygments。因此, 電腦內需要有至少 Python 2.6 版, 以及 Pygments 這個程式才能用 minted.

在 Ubuntu 下安裝很容易, 只要開啟終端機,輸入以下安裝指令:
 $ sudo apt-get install python-pygments 
這樣就裝完 Pygments 這個程式了。

至於 Windows 下該如何安裝,我就真的沒研究了,有興趣的人請直接看 minted 套件說明文件。(使用 Win 7 的人,也要注意文件中的 Known Issue)

安裝好之後,如果是撰寫 .tex 文件,編譯時的命令,需要多加個 -shell-escape 讓 latex 可以執行 Python 的程式,因此命令為:
$ latex -shell-escape filename.tex

但如果是 LyX 文件的話,這時候就需要修改一下編譯程式的設定值後,才能夠正確編譯。

開啟 LyX 之後,選 Tools > Preferences... 跳出一個如下圖的視窗。先在左側選到 File Handling, 接著在右側的 Converter Definitions 裡挑選到 LaTeX (pdflatex) -> PDF (pdflatex)。
再下方 Converter: 的文字框中,多加個 -shell-escape, 再按 Modify 確認修改。
接著就可以按 Apply,或是按 Save 永久存下。


至於 minted 套件庫的使用方法,可以直接參考說明文件,裡面都有很詳細的解說。自己試一下後,就會發現這個套件庫似乎比 listings 還容易使用了。

最後,當然還是要說一下目前發現到 minted 的缺點,就是程式碼中無法加入中文註解。就算設定了 texcl=true, 還是無法處理 CJK 的中文文件。文件中說,可以使用 XeLaTeX,不過我沒有測試, 所以下次真有需要再測試。

minted 套件測試檔案: minted_demo.zip


修正 pst-diffraction 套件庫問題

pst-diffraction 套件庫可以直接畫出繞射光的模擬圖。

我第一次看到之後,就躍躍欲試,但沒想到照著說明文件輸入程式,竟然無法輸出文件!

檢查之後才發現原來是生成 .dvi 文件的時候,發生了問題。再追查下去,發現竟然是 pst-diffraction.tex 檔案有問題!

先寫個簡單的測試檔:
\documentclass{article}
\usepackage{pst-diffraction}

\begin{document}
f=2.5, $\lambda=632\,\mbox{nm}$

\begin{pspicture}*(-3.5,-3.5)(3.5,3.5)
\psdiffractionRectangle[f=2.5, lambda=632]
\end{pspicture}

\begin{pspicture}*(-4.5,-2.5)(4.5,4.5)
\psdiffractionRectangle[IIID,f=2.5]
\end{pspicture}

\end{document}
編譯後,會發現可以生成檔案,但無法開啟。 這個問題很容易修正,先找到安裝的 pst-diffraction.tex 檔案位置。
我使用 Ubuntu 12.04, 檔案位置是:
/usr/local/texlive/2013/texmf-dist/tex/generic/pst-diffraction/pst-diffraction.tex

編輯這個檔案,找到其中三行:
\psk@ThreeDplot@zMax dup \tx@ScreenCoor pop /zScale ED
...
(省略)
...
\psk@ThreeDplot@zMax dup \tx@ScreenCoor pop /zScale ED
...
(省略)
...
\psk@ThreeDplot@zMax dup \tx@ScreenCoor pop /zScale ED

在 dup 的前方,加入 \space 命令

\psk@ThreeDplot@zMax\space dup \tx@ScreenCoor pop /zScale ED
...
(省略)
...
\psk@ThreeDplot@zMax\space dup \tx@ScreenCoor pop /zScale ED
...
(省略)
...
\psk@ThreeDplot@zMax\space dup \tx@ScreenCoor pop /zScale ED

OK! 修改好之後,再測試剛才的檔案,編譯成功,而且也可以順利開啟檔案了。

2013年9月24日 星期二

中文目錄與 CJK 的問題

最近在寫一個文件,撰寫的時候都沒有問題。等到全部寫完之後,加上「目錄」,一編譯...失敗!

拿掉「目錄」,再編譯,成功!PDF 又完整呈現出來!

真的是太詭異了!

為了解決這個詭異的問題,我研究了一下到底是哪裡出問題?以及該如何解決?終於, 稍微發現問題所在,以及解決方法。

如果使用中文的章節名稱,在製作目錄的時候,會有問題。解決辦法是,在文章的最末,加上一行 Clear Page 的命令。

下圖是編譯失敗的畫面:
編譯失敗的文件檔

編譯失敗的訊息

文件結束前,加上 Clear Page (從 Insert > Formatting 選擇), 就可以編譯成功了。

不過我發現,有時候就算在文章最末加上 Clear Page 也沒用。這時候可能跟文章內容, 或版面大小設定有關了。

由於一般的 .tex 如果需要製作目錄,一般的流程是使用 latex 程式對 .tex 檔案編譯 2 次。

編譯2次的目的,就是因為第一次編譯的時候,程式會建立一個 .toc 的目錄檔案,檔案內存放各個 Section, subsection 等要放在目錄裡面的內容。

通常 LyX 文件如果沒有加入目錄的時候,可以編譯成功,而加入目錄之後,編譯失敗。這樣應該就是 LaTeX 沒有正確生成 .toc 檔案的緣故了。

實際上,只從 LyX 實在很難看出 TeX 建立目錄的時候,到底哪個章節名稱發生錯誤了?

因此,我採用迂迴戰術,先將 LyX 文件匯出成一般的 LaTeX (plain) 檔案, 如下圖:


假設文件名稱為 filename.tex, 先確定同目錄下,沒有 filename.toc , 再於 .tex 檔案同目錄下,輸入:
 $ latex filename.tex
這時候編譯程式會「正常」的跑完,不會有什麼錯誤訊息。但是再輸入一次上述命令編譯文件後,就會發生錯誤了。

其實,開啟 filename.toc 就可以看到問題所在了. 如下圖,沒有加上 \clearpage 命令,編譯出的 filename.toc 文件。可以看到裡面夾雜了一大堆亂七八糟的訊息。

錯誤的 .toc 文件
如果是編譯有加上 \clearpage 命令的 .tex 文件, 打開生成的 .toc 檔案就可以看到正確的 .toc 檔案應該是像下圖這樣。

正確的 .toc 文件
因此,如果中文章節名稱非常多,在文件末端加上 Clear Page 還是無法生成目錄的話,這時候可以檢查看看 .toc 文件是在哪個部份出錯了?在該處加上 Clear Page 命令,或許就能夠解決無法生成目錄的問題。

最後,再提醒一下,如果希望 LaTeX 要重新生成 .toc 檔案的話,記得要將原來的 .toc 檔案刪掉。要不然就算原始程式再怎麼改,都還是會用舊的 .toc 檔案進行編譯的。


參考網站:
http://tex.stackexchange.com/questions/34108/error-compiling-cjk-with-tableofcontents-and-makeindex

測試用檔案: test_toc.zip

2013年9月12日 星期四

LyX 中的文繞圖功能

之前寫過一篇「LyX 中文文章 文繞圖的設定方法」 , 但最近又遇到了非常詭異的問題,使我下定決定要來好好研究一下 LyX 文件中文繞圖的設定。

文繞圖(或文繞表格) 這個功能是由 wrapfig 套件所提供的,因此詳細的解說都寫在 wrapfig 說明文件中。這裡紀錄的只是解說文件中的一小部份,更詳細的說明請參考套件說明文件。


2013年9月11日 星期三

增加 TeXworks 排版編譯選項

在 Windows 或 Mac 電腦裡面, 安裝完 MikTeX 或是 MacTeX 之後,預設應該都會安裝一套 TeXworks 的編輯軟體。這套軟體對於編寫 TeX 的文件很方便,但其預設使用的編譯器是 pdfLaTeX,對於文章內有使用 PSTricks 套件繪圖的檔案,使用 pdfLaTeX 編譯會失敗。需要使用傳統的 latex + dvips + ps2pdf 至少三步驟來完成編譯程序。

但是 TeXworks 的編譯選項中並沒有這個項目,因此必須手動新增這樣一個項目。

參考了這個網站,就可以按照其中的步驟增添編譯項目了。

可以先寫個簡單的文件做測試。
%% 測試 latex + dvips + ps2pdf 編譯方式是否成功
%% Date: 2013/9/11

\documentclass{article}
\usepackage{pst-optic}

\begin{document}
There is a triangel $\triangle$ABC:  A(0,0), B(1,1), C(2,0).

\begin{pspicture}[showgrid=true](-5,-3)(5,3)
\psdots(0,0)(1,1)(2,0)    %畫點
\psline(0,0)(1,1)(2,0)(0,0)  %畫線
\uput[-135](0,0){A}  %放標籤
\uput[90](1,1){B}   %放標籤
\uput[-45](2,0){C}  %放標籤 
\end{pspicture}

\end{document}


先試著用預設的 pdfLaTeX 編譯,會得到錯誤訊息, 而且也無法生成 PDF 文件。

接下來我們就為 TeXworks 增添編譯選項讓這個文件通過編譯並生成 PDF 文件。

2013年9月9日 星期一

發現 PSTricks 好物

自從發現我電腦裡面有好用的 TeX 套件「圖書館」之後,我偶而就稍微看看裡面有什麼東西。當我在找尋畫甘特圖的套件庫時,無意間發現了 PSTricks 提供了好多繪圖套件呀!

當時,我並不清楚 PSTricks 是什麼東西,後來稍微研究一下,才發現 PSTricks 真是個好物呀!簡單來說,PSTricks 是一個繪圖套件,它提供一些命令巨集(例如: 畫點、畫線、塗色...等等),當你使用這些命令後,編譯文件的時候,PSTricks 會幫你把它轉換成 PostScript 的繪圖語言,這樣文件中就會出現圖案啦!

路人:這算什麼好物?都什麼年代了,哪裡還需要用輸入命令來畫圖?(不屑中...)

ㄜ, 我一開始的確是這麼想的啦! 只不過當我看到官方網站 PSTricks 的 Package List 的時候,突然....眼睛一亮...


咦?怎麼會跟光學系統有關?還跟示波器有關?這是什麼東西?點進去一看,嚇了我一大跳。原來這三個套件,可以讓我只用幾行程式碼,就畫出光學系統的架構圖、光學成像系統、甚至是畫出模擬示波器螢幕看到的波型。