Language

Tuesday, June 30, 2015

如何為 Raspberry Pi 以及 STM32F429 Discovery Board 編譯 RTEMS

如何為 Raspberry Pi 以及 STM32F429 Discovery Board 編譯 RTEMS

如何為 Raspberry Pi 以及 STM32F429 Discovery Board 編譯 RTEMS

-*- truncate-lines: nil -*-

1 前言

上一篇文章講到了如何在 OS X 上編譯 RTEMS 的 toolchain,隔了好一陣子,相信有些人應該已經研究完如何編譯 RTEMS 的 source code, 沒有研究的也沒關係,筆者今天就要來講述一下如何編譯 RTEMS source code 給 Raspberry Pi 或是 STM32F429 Discovery Board 使用。

2 準備檔案

先 checkout RTEMS 的 source code,嗯,git 的動詞是 clone,URL 是 git://git.rtems.org/rtems.git, 請在終端機中輸入以下命令:

$ cd ~/Projects/rtems
$ git clone git://git.rtems.org/rtems.git
Cloning into 'rtems'...
remote: Counting objects: 473959, done.
remote: Compressing objects: 100% (85745/85745), done.
remote: Total 473959 (delta 382898), reused 467269 (delta 377943)
Receiving objects: 100% (473959/473959), 65.15 MiB | 1.33 MiB/s, done.
Resolving deltas: 100% (382898/382898), done.
Checking connectivity... done.

這樣會產生 ~/Projects/rtems/rtems 的目錄

3 Bootstrap

bootstrap script 是拿來產生 configure 檔案的,如果你要修改 BSP 的 configure.ac,就要在執行 bootstrap 之前,或是修改之後,重新執行一次 boostrap

$ cd ~/Projects/rtems/rtems
$ ./bootstrap

這大概要花幾分鐘的時間

4 configure

執行完上一節的 bootstrap 之後,=configure= scripts 就全部都產生完成,現在我們要建立一個編譯的目錄。 RTEMS 分成 build tree 跟 source tree,build tree 就是剛剛 git clone 出來的 ~/Projects/rtems/rtems, 但實際編譯的時候要在另一個 build tree 的目錄,source tree 中各目錄的 preinstall.am 就是拿來產生 build tree 的。 不過現在還不用擔心這件事,先來編譯如下:

$ cd ~/Projects/rtems
$ mkdir build-raspberrypi

或是

$ cd ~/Projects/rtems
$ mkdir build-stm32f4

執行 configure script for Raspberry Pi:

$ cd build-raspberrypi
$ ../rtems/configure --enable-tests=samples \
  --enable-cxx --enable-posix --enable-networking --enable-doc \
  --target=arm-rtems4.11 --prefix=$HOME/Projects/rtems/bsps/4.11 
  --enable-rtemsbsp=raspberrypi

執行 configure script for STM32F429:

$ cd build-stm32f4
$ ../rtems/configure --enable-tests=samples \
  --enable-cxx --enable-posix --enable-networking --enable-doc \
  --target=arm-rtems4.11 --prefix=$HOME/Projects/rtems/bsps/4.11 
  --enable-rtemsbsp=stm32f4

最後你必須看到 available BSPs: raspberrypi 或是 stm32f4 才算是成功,不然無法正常編譯

configure: creating ./config.status
config.status: creating Makefile

target architecture: arm.
available BSPs: raspberrypi.
'make all' will build the following BSPs: raspberrypi.
other BSPs can be built with 'make RTEMS_BSP="bsp1 bsp2 ..."'

config.status: creating Makefile

5 編譯

$ make all

這在筆者的電腦上大約花費三分鐘即可

$ make install

6 文件位置

因為 configure 的時候有帶入 --enable-doc 的參數,所以 doc 也會編譯成功(或失敗),RTEMS 的文件是用 texinfo 寫成,你需要有 texinfo 的環境才能產生 PDF 以及 info 檔,若這邊失敗的話,請重新 configure 並且把 --enable-doc 選項拿掉,再重新 make all 即可。

如果你文件編譯成功的話,info 檔會被安裝到 ~/Projects/rtems/bsps/4.11/share/info, 可以把這個目錄加到你的 info 閱讀器(比如說 GNU Emacs)的目錄中。

至於其他的 dvi, pdf, html, ps 則會在 ~/Projects/rtems/bsps/4.11/share/rtems 目錄下,基本上這些檔案跟 rtems.org 上的是一樣的,直接從 rtems.org 上取得也可以。如果想要發展應用程式,請先找 RTEMS C User's Guide (c_user.pdf),如果想發展 BSP 以及 device driver,則還要搭配 BSP and Device Driver Development Guide (bsp_howto.pdf)。

7 RTEMS BSP 介紹

每一個 BSP 都在 RTEMS source tree 裡面的 c/src/lib/libbsp/$CPU 裡面,Raspberry Pi 以及 STM32F429 Discovery Board 都是 ARM 架構的,因此都會在 c/src/lib/libbsp/arm 裡面。

7.1 Raspberry Pi

c/src/lib/libbsp/arm/raspberrypi/make/custom 目錄下,有好幾個檔案:

$ ls
raspberrypi.cfg  raspberrypi.inc  raspberrypi2.cfg

這底下的命名規則就是 $BSP.cfg, 其中 raspberrypi.cfg 就是給 raspberrypi 這個 BSP 使用的, 而 raspberrypi2.cfg 就是給 Raspberry Pi 2 使用的了。這裡面的設定檔跟 compiler options 有關,舉 raspberrypi.cfg 的內容為例:

#
#  Config file for RASPBERRYPI
#
include $(RTEMS_ROOT)/make/custom/raspberrypi.inc

CPU_CFLAGS = -mcpu=arm1176jzf-s

而 raspberrypi.inc 內容則是:

#
#  Config file for Raspberry Pi variants.
#

include $(RTEMS_ROOT)/make/custom/default.cfg

RTEMS_CPU = arm

CFLAGS_OPTIMIZE_V ?= -O2 -g

# This defines the operations performed on the linked executable.
# is currently required.
define bsp-post-link
    $(OBJCOPY) -O binary --strip-all \
        $(basename $@)$(EXEEXT) $(basename $@)$(DOWNEXT)
    $(SIZE) $(basename $@)$(EXEEXT)
endef

這些都是給 gcc 的參數,或是 bsp link 完成的時候會執行的動作(bsp-post-link),如果你不想要編譯器最佳化的話,可以從這個檔案修改。

7.2 STM32F4

c/src/lib/libbsp/arm/stm32f4/make/custom 目錄下,有幾個檔案:

$ ls
stm32f105rc-testsuite.tcfg stm32f105rc.cfg   stm32f4-testsuite.tcfg  stm32f4.cfg

按照剛剛的規則, stm32f4 自然是使用 stm32f4.cfg 了。

接下來我們來看 STM32F4 BSP 的 configure.ac:

RTEMS_BSPOPTS_SET([STM32F4_FAMILY_F10XXX],[stm32f1*],[1])
RTEMS_BSPOPTS_HELP([STM32F4_FAMILY_F10XXX],[Chip belongs to the STM32F10XXX family.])

RTEMS_BSPOPTS_SET([STM32F4_FAMILY_F4XXXX],[stm32f4*],[1])
RTEMS_BSPOPTS_HELP([STM32F4_FAMILY_F4XXXX],[Chip belongs to the STM32F4XXXX family.])

RTEMS_BSPOPTS_SET([STM32F4_HSE_OSCILLATOR],[*],[8000000])
RTEMS_BSPOPTS_HELP([STM32F4_HSE_OSCILLATOR],[HSE oscillator frequency in Hz])

RTEMS_BSPOPTS_SET([STM32F4_SYSCLK],[stm32f1*],[8000000])
RTEMS_BSPOPTS_SET([STM32F4_SYSCLK],[*],[16000000])
RTEMS_BSPOPTS_HELP([STM32F4_SYSCLK],[SYSCLK frequency in Hz])

這邊可以看到 configure.ac 定義了兩種 BSP variant,分別是 stm32f1*,stm32f4*, 分別會產生不同的 configure 內容, 如果你的 configure 選項給的是 --enable-rtemsbsp=stm32f105rc 就會選擇 stm32f1* 的選項,產生在 ~/Projects/rtems/build-stm32f4/arm-rtems4.11/c/stm32f4/lib/libbsp/arm/stm32f4/include/bspopts.h 裡面,這個之後可能會用到,在這篇文章預先介紹。如果你的版子有不同於預設的振盪器頻率,就需要修改 configure.ac,修改完之後,請重新執行 bootstrap=>configure=>make all=>make install 這個流程。

8 結語

在本文中,筆者介紹了如何下載以及針對 Raspberry Pi 以及 STM32F429 Discovery Board 編譯 RTEMS 的 source code,筆者在我的電腦上兩個都編譯成功,離執行還有點路,基本上筆者在工作場合用的不是這兩個 BSP,所以讀者就跟著我一直來探索吧,下一篇文章就會介紹如何下載 binary 在這兩張版子上並且執行 samples 的測試程式,到時候可能需要修改一些參數,筆者也會一一說明。

Author: Albert Huang

Created: 2015-06-30 Tue 22:31

Emacs 24.5.1 (Org mode 8.2.10)

Validate

Sunday, June 7, 2015

如何在 MacOSX 上安裝 RTEMS toolchain

1 簡介 RTEMS

RTEMS(Real-Time Executive for Multiprocessor Systems) 是一套 open source 的即時作業系統,由 OAR 公司維護,以 GPL license 發行。RTEMS 目前還使用在環繞火星的無線電設備上。

要編譯 RTEMS 必須使用 RTEMS compiler,不能使用 ARM bare metal GCC,所以就來先編譯這些工具吧。

2 環境

筆者的電腦上安裝了 MacPorts,因此這一篇文章是基於 MacPorts 的環境,若完全沒有安裝 MacPorts,環境會更單純一點,安裝過程會很順利,這是由於 RTEMS.org 的測試都預設使用者沒有 MacPorts/Homebrew。

3 如果你已經安裝了 MacPorts,就順便裝這些套件吧

3.1 Xcode

這個 MacPorts 也需要

3.2 Python

python27 或 python34 都可以

3.2 MacPorts 其他套件

$ sudo port install xz cvs

4 決定你的目錄

先決定你的 RTEMS 根目錄,然後分別建立子目錄如下:

目錄 描述
~/Projects/rtems 所有 RTEMS 的根目錄
~/Projects/rtems/compiler RTEMS 編譯器目錄
~/Projects/rtems/rtems-source-builder RTEMS source builder tool
~/Projects/rtems/rtems-git RTEMS git 源碼位置
~/Projects/rtems/bsps RTEMS 的 BSP 放置目錄

5 在 MacOSX 上安裝 toolchain

5.1 git clone rtems-source-builder

$ cd $HOME/Projects/rtems
$ git clone git://git.rtems.org/rtems-source-builder.git

5.2 檢查編譯環境

在命令列下以下的命令檢查環境:

$ rtems-source-builder/source-builder/sb-check

應該會在終端機看到以下的反應:

RTEMS Source Builder - Check, v0.5.0
Environment is ok

5.3 編譯並安裝 ARM cross compiler

rtems-source-builder 會自動抓取 source tarball,編譯,並且自動安裝到指定的 --prefix 目錄。

$ cd $HOME/Projects/rtems/rtems-source-builder/rtems
$ ../source-builder/sb-set-builder \
         --log=build-log.txt \
         --prefix=$HOME/Projects/rtems/compiler/4.11 \
          4.11/rtems-arm

每一組工具的編譯設定稱為 build-set,檔案結尾是 .bset,一般來說是不太會需要碰到這個檔案。4.11/rtems-arm 是指 $HOME/Projects/rtems/rtems-source-builder/rtems/config/4.11/rtems-arm.bset 這個 build-set。

安裝過程前面一小段訊息如下:

RTEMS Source Builder - Set Builder, v0.5.0
Build Set: 4.11/rtems-arm
Build Set: 4.11/rtems-autotools.bset
Build Set: 4.11/rtems-autotools-internal.bset
config: tools/rtems-autoconf-2.69-1.cfg
package: autoconf-2.69-x86_64-apple-darwin14.3.0-1
Creating source directory: sources
......

然後如果你的編譯訊息在這裡結束,那麼你就要參考下一節修改檔案了。

building: arm-rtems4.11-gdb-7.9-x86_64-apple-darwin14.3.0-1
error: building arm-rtems4.11-gdb-7.9-x86_64-apple-darwin14.3.0-1
Build FAILED
  See error report: rsb-report-arm-rtems4.11-gdb-7.9-x86_64-apple-darwin14.3.0-1.txt
error: building arm-rtems4.11-gdb-7.9-x86_64-apple-darwin14.3.0-1
Build Set: Time 0:35:38.935340
Build FAILED

以下是編譯成功的訊息,如果你看到最後訊息是這樣,那恭喜你,ARM compiler for RTEMS 已經結束了。

cleaning: expat-2.1.0-x86_64-apple-darwin14.3.0-1
cleaning: arm-rtems4.11-binutils-2.24-x86_64-apple-darwin14.3.0-1
cleaning: arm-rtems4.11-gcc-4.9.2-newlib-2.2.0.20150423-x86_64-apple-darwin14.3.0-1
cleaning: arm-rtems4.11-gdb-7.9-x86_64-apple-darwin14.3.0-1
cleaning: rtems-tools-HEAD-1
Build Set: Time 0:34:53.361267

5.4 修改 gdb-7-1.cfg

先看剛剛的 error report 說什麼

$ less  $HOME/Projects/rtems/rtems-source-builder/rtems/rsb-report-arm-rtems4.11-gdb-7.9-x86_64-apple-darwin14.3.0-1.txt

錯誤訊息如下:

checking whether to use python... yes
checking for python... /opt/local/bin/python
checking for python2.7... no
configure: error: python is missing or unusable
make[1]: *** [configure-gdb] Error 1
make: *** [all] Error 2

那這是因為安裝 MacPorts 的 Python 而導致的錯誤,如果你打算繼續使用 MacPorts,那就要修改檔案。筆者是透過指定使用系統內建的 Python 而成功編譯,方法如下: 修改 $HOME/Projects/rtems/rtems-source-builder/source-builder/config/gdb-7-1.cfg 找到這一行:

%{!?without_python:--with-python} \

修改成:

%{!?without_python:--with-python=/usr/bin/python} \

你如果在最近這一陣子編譯,可以直接修改 gdb-7-1.cfg 之後再執行 sb-set-builder 開始編譯與安裝的動作,不過如果跟這篇文章的寫作相隔有一段時間,因為 RTEMS 的更新速度很快,筆者建議還是先照原來的方法編譯,若有錯誤訊息再找出解法。

5.5 檢查工具版本

5.5.1 gcc 4.9.2

$ $HOME/Projects/rtems/compiler/4.11/bin/arm-rtems4.11-gcc --version
arm-rtems4.11-gcc (GCC) 4.9.2 20141030 (RTEMS 4.11, RSB 18cea20a12db4d2951e8e8a2dc17fc83c394c1fb-modified, Newlib 2.2.0.20150423)
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

5.5.2 gdb 7.9

$ $HOME/Projects/rtems/compiler/4.11/bin/arm-rtems4.11-gdb --version
GNU gdb (GDB) 7.9
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin14.3.0 --target=arm-rtems4.11".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".

5.5.3 測試 gdb 的 python 功能:

$ arm-rtems4.11-gdb 
GNU gdb (GDB) 7.9
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "--host=x86_64-apple-darwin14.3.0 --target=arm-rtems4.11".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word".
(gdb) python
>print('test')
>test
(gdb)

5.6 記得把 compiler 加入你的 $PATH

如果你是使用 BASH,可以編輯 ~/.profile

export PATH="$HOME/Projects/rtems/compiler/4.11/bin:$PATH"

做完之後記得更新 $PATH 並測試 $PATH 是否生效:

$ source ~/.profile
$ arm-rtems-gcc 
arm-rtems4.11-gcc: fatal error: no input files
compilation terminated.

6 結語

RTEMS 是一套很有趣的 open source 即時作業系統,光是應用在航太與武器系統上,就令人眼睛為之一亮了,支援的即時排程演算法也頗完整,有最普遍的 Rate Monotonic Scheduling(RMS), 以及 Earliest Deadline First(EDF) 等等。

本篇文章介紹了如何在 Mac 上編譯 RTEMS 的開發工具,尤其是 gdb,沒有了 Python,gdb 就沒這麼好用,因此筆者花了點時間搞定了 gdb with python 的編譯問題,在這篇文章跟大家分享經驗,接下來筆者將會開始介紹如何編譯 RTEMS source code,請有興趣的人拭目以待。

Author: Albert Huang

Created: 2015-06-07 Sun 21:44

Emacs 24.4.1 (Org mode 8.2.10)

Validate

Wednesday, December 3, 2014

原則導向與規則導向

因為媒體人提到了柯 P 在新聞面對面專訪結束之後,問了「怎麼樣才能勝選但又不用讓馬英九下台」,所以昨夜花了點時間看了柯文哲與連勝文在新聞面對面的專訪,並且比較兩個人的特質。

我想點出來的是,連勝文是規則導向(rule-centered),而柯文哲是原則導向(principle-centered)。比如說講到廉潔,兩邊都有一個故事,連勝文這邊是說他在悠遊卡公司的時候,公司在敦化北路跟民生東路口附近,而他丈母娘的紅豆食府就在附近,但他只要是公司出錢的聚餐,為了避嫌都不會去紅豆食府,乍聽之下,似乎很清廉自持,但後面一點他說了,他悠遊卡董事長上任第一天,有人給了他一本廉政的手冊吧,上面就有提到一個小故事,是說類似的事情,說公司的聚餐不能去認識的人的餐廳裡面等等,也就是說他這個清廉自持的行為是因為有人寫了一個「規則」在哪裡,整場專訪,連勝文也相當強調「依法行事」這件事情,這就是 rule-centered 的行事風格。而柯文哲先生對於廉潔,也有個故事,但是他是講到他在台大人際關係不好的時候提到的,他是說台大醫院開會訂便當的時候,一向是打電話給廠商(比如說抗生素廠商等等)送便當進來,而柯文哲當了主管的第一天就要求屬下不得這樣做,開會一律自己買便當,所以才有 MG149 的私帳(因為這些都得自己出錢,但又需要管理,其實就是類似班費)。看得出來,柯文哲是在群體壓力下,堅守一個原則,而不是依照既有規則來行事。另外,講到說實話這件事,他非常堅持誠實這個原則,所以當他發現他講真話(失言風波),媒體很反彈,他說他回去苦惱了很多天,最後想說這跟道德也沒什麼關係,只是尊重聽這些話的人,所以他就做了修正。像這一類行事方法,就是原則導向,亦即心中有一些原則,是大方向,面對每天不同的事件發生的時候,依據這些心中的原則來行事,而且會有優先順序的。

規則導向的行事風格不會出什麼大錯,行事很安全,但有時候會不通情理,比方說有個丈夫因為妻子羊水破了,要趕緊到醫院生產,於是一路超速,警察把他攔下來發現他是因為妻子要生產才超速,規則導向的人這時候就會堅持說你犯了法,必須要開單,因為要依法行事,然後依法也沒規定警察必須要護送孕婦,於是就不理他。這就是規則導向的行事風格。原則導向的行事風格的警察,在攔下來發現超速的原因之後,會衡量各種原則,發現生命當然是優先的,於是罰單也不開,而且還護送這台車一路到醫院。事後來看,後面那個警察做的事情對嗎?的確有人超速而不開單,那麼他是不是包庇違法的事情發生呢?如果有人不問當時發生的狀況與當事人應對的方式,只挑出部份的違法證據來指控對方違法,就落入了規則導向的方式。

原則導向也是兩個當中,能夠開創新局的方式。如果面對一個全新的領域或全新的世界,既有的規則都不能應用,一個規則導向的行事風格就會陷入混亂當中,因為完全沒有規則可循,或是隨便引用相近的陳舊規則來應用在全新的事情上面,這是不是很熟悉?這就是近十幾年來,陳舊的法規面對全新的世界的時候的混亂。以原則導向來說,就會像美國憲法這樣,先條列出行事的原則,而當有任何新的事件發生,就回去檢視這些原則,仔細考量,最後選擇這個新事件要怎麼處理,如此才能夠面對瞬息萬變的世界,而通常這些原則就是一個團體、個人要堅守的價值。

原則導向有個很重要的人一定要提,那就是富蘭克林(Benjamin Franklin, 1706--1790)在他的自傳提過他隨身帶了一本小冊子,稱之為 "The Little Book",上面列了十三條原則,每週選定一個原則來強化,但每天晚上都會針對這十三條原則檢討自己當天的行事是否遵循了這些原則。沒有遵循的地方檢討原因是什麼,但不過分責備自己。注重長期來說,是否有進步。富蘭克林後來說了 "Tho’ I never arrived at the perfection I had been so ambitious of obtaining, but fell far short of it, yet I was, by the endeavour, a better and a happier man than I otherwise should have been if I had not attempted it. " 富蘭克林的這句話是說,他從未達到他原來所想要達到的完全,但是透過熱切的追尋,他變成一個比未追尋完全之前更好更快樂的人。只有這樣子才能夠進步。在 Stephen Covey 的書[3] 「與成功有約」裡面則是把富蘭克林的方法進一步加一些改變並且仔細的闡述,對原則導向有興趣的人可以參考一下。

規則導向我想到的代表人物是馬英九總統,看他的行事風格你就會知道什麼叫做規則導向,他最常把「依法行事」掛在嘴邊,對於一些大家都知道要為大原則放棄追小錯的時候,他只會專注在那個錯誤之上。所以規則導向就是在任何事情發生的時候,一定是檢討有沒有違反規則,並且對違反規則耿耿於懷。因為犯錯就是犯錯,沒有什麼逐漸改善讓犯錯率變少這件事。這是因為規則導向常常會有非常多的規則,而且是針對非常明確的事情做規範,比方說全勤獎金就是個很規則導向的事情,全勤的定義是你這個月每天都到,如果你有一天因為生病而沒到,就是沒有全勤獎金,不論你缺席的理由是什麼。但是原則導向就會去思考,全勤的意義是什麼?然後可能思考出全勤的意義在於你對於公司的貢獻,所以訂定了工作進度,只要你每個月達到工作進度就獎勵,而你中間是否因病缺席,就不在考量範圍內。

寫了這麼多,簡單總結一下,原則導向就是望向未來,而規則導向就是依循過去。 我不是在講哪一個個人怎麼樣,而是哪一種行事方法能夠帶領個人、公司、社會,甚至國家往未來瞬息萬變的挑戰,其實很清楚。

[1] 柯文哲專訪 柯文哲專訪
[2] 連勝文專訪 連勝文專訪
[3] Stephen Covey, "The 7 Habits of Highly Effective People" (中文翻譯:與成功有約)

Thursday, August 7, 2014

LaTeX 字型安裝筆記: Adobe Garamond Pro 字型



LaTeX 字型安裝筆記: Adobe Garamond Pro 字型









LaTeX 字型安裝筆記: Adobe Garamond Pro 字型



上一篇文章筆者提到了 Garamond 字型有非常多個供應者, 其中一個就是 Adobe Garamond Pro 字型, 這是 Adobe 公司出品的商業字型, 在 LaTeX 上同樣也是由 mathdesign 這個套件來支援。




筆者先假設你購買或從他處取得 Adobe Garamond Pro 的以下檔案:



  • AGaramondPro-Regular.otf

  • AGaramondPro-Italic.otf

  • AGaramondPro-Semibold.otf

  • AGaramondPro-SemiboldItalic.otf




請把以上這些檔案複製到 $TEXMF/fonts/opentype/garamond/Adobe Garamond Pro 的字型目錄裡面, 在筆者的 Mac 上我把他們複製到 ~/Library/texmf/fonts/opentype/garamond/Adobe Garamond Pro 裡, 然後執行 sudo texhash 更新系統路徑。




使用的方法是:




\usepackage[adobe-garamond]{mathdesign}




然後你就可以在 LaTeX 裡面使用 Adobe Garamond Pro 這一套商業字型了, 有任何其他的使用細節, 可以在 CTAN 上搜尋 mathdesign 套件 的說明檔案。




P.S.: 這樣安裝的 Open Type 字型只可以使用在 PDFLaTeX 上, LaTeX->DVIPS 這個路徑需要其他的安裝方法。




Author: Albert Huang


Created: 2014-08-07 Thu 01:39


Emacs 24.3.1 (Org mode 8.2.1)


Validate





Wednesday, August 6, 2014

LaTeX 字型安裝筆記: URW Garamond 字型



LaTeX 字型安裝筆記: URW Garamond 字型








LaTeX 字型安裝筆記: URW Garamond 字型



Garamond 是一種描邊字型家族, 泛指由法國的鉛字鑄造師 Claude Garamond~(c. 1480–1561) 設計的字型或後人衍生的字型。許多與 Garamond 有關聯的字型則出自於另一位鉛字鑄造師 Jean Jannon。Garamond 同時也是印刷的時候, 最省墨水或碳粉的字型。1

Garamond 字型有非常多提供者, 有基於 Garamond 設計而衍生的: Adobe Garamond, Garamond Premier, Sabon, EB Garamond, URW++ Garamond No. 8 或是基於 Jannon 而衍生的: ITC Garamond, Garmond 3 等字型, 其中我們今天要講的是 URW++ 所製作的免費 Garamond 字型, 這個字型被內建在 Ghostscript 程式套件裡面, 並且被 TeX 社群引入到 LaTeX 字型中, 其格式是 PostScript Type1 格式。要使用這個字型, 你必須先安裝 mathdesign 這個套件。
使用方法如下:



\usepackage[urw-garamond]{mathdesign}
\usepackage[T1]{fontenc}

如果你無法使用, 別急, 很可能是你的 TeX 系統沒有附上這套字型, 雖然這套允許非商業用途免費使用, 但 TeX 不一定會附上, 你可以到 CTAN Garamond 網頁 下載所有的 afm 以及 pfb 檔, 並且放置在正確的路徑上, 筆者把 *.afm 放到 ~/Library/texmf/fonts/afm/urw/garamond 裡, 並且把 *.pfb 放到 ~/Library/texmf/fonts/type1/urw/garamond 裡面。筆者的電腦是 Mac, 其他系統請參考相關 TeX 系統的說明。放完之後要更新路徑, 讓 TeX 系統能夠使用這些字型, 只要在終端機輸入 texhash 即可。

URW++ Garamond 是一套附有數學符號的描邊字型, 除了有最省墨水或碳粉之外, 也被認為是可讀性很高的一個字型, 如果你已經厭倦 Times Roman 字型, 不妨可以來試試這一套字型。



Author: Albert Huang

Created: 2014-08-06 Wed 22:29

Emacs 24.3.1 (Org mode 8.2.1)