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 檔案內的簡體中文書目,換成繁體中文書目,也是可以正常處理的!