cht電腦資訊文書排版TeX
adm Find login register

dvips 如何引入 map 檔?

Apan Liao

joined: 2008-10-30
posted: 112
promoted: 23
bookmarked: 4
Tai-Chung City, Taiwan
1subject: dvips 如何引入 map 檔?Promote 0 Bookmark 02009-06-14quote  

在下使用 mactex 2008(texlive 2008 at mac),並為它新增了 type 1 中文字型。其中有一必須過程,是需要在 /usr/local/texlive/2008/texmf-config/dvips/config/config.ps 中加入一行 「p +font-name.map」。

在下不解的是, mactex 2008 已經預先附加了其它 type 1 中文字型,例如 /usr/local/texlive/2008/texmf-dist/fonts/map/dvips/arphic 中有 bkaiu.map bsmiu.map gbsnu.map gkaiu.map 這四個 map 檔,但我在 /usr/local/texlive/2008/texmf-config/dvips/config/config.ps 卻找不到 dvips 引入這些 map 檔的相關內容,如類似「p +bkaiu.map」之類的。

另外,我也在 /usr/local/texlive/2008/texmf-dist/dvips/arphic 找到了 config.bkaiu config.bsmiu config.gbsnu config.gkaiu 這四個檔案,內容分別是 p +bkaiu.map 等 dvips 引入 map 檔的敘述。但我測試過,這四個檔之內容與 dvips 的過程無關。

所以我的問題是,到底這些消失的「p +bkaiu.map」到底寫在哪裡?我也用 find /usr/local/texlive/2008/ | xargs grep bsmiu\.map 硬搜「bkaiu.map」過,但沒發現什麼:

  • /usr/local/texlive/2008//install-tl.log: updmap: using map file `/usr/local/texlive/2008/texmf-dist/fonts/map/dvips/arphic/bsmiu.map'
  • /usr/local/texlive/2008//texmf/web2c/updmap.cfg:Map bsmiu.map
  • /usr/local/texlive/2008//texmf-config/web2c/updmap.cfg:Map bsmiu.map
  • /usr/local/texlive/2008//texmf-dist/dvips/arphic/config.bsmiu:p +bsmiu.map
  • /usr/local/texlive/2008//texmf-dist/ls-R:bsmiu.map
  • /usr/local/texlive/2008//texmf-var/web2c/updmap.cfg:Map bsmiu.map
  • /usr/local/texlive/2008//texmf-var/web2c/updmap.log:updmap: using map file `/usr/local/texlive/2008/texmf-dist/fonts/map/dvips/arphic/bsmiu.map'
  • /usr/local/texlive/2008//tlpkg/texlive.tlpdb:execute addMap bsmiu.map
  • /usr/local/texlive/2008//tlpkg/texlive.tlpdb: texmf-dist/fonts/map/dvips/arphic/bsmiu.map
  • /usr/local/texlive/2008//tlpkg/tlpobj/arphic.tlpobj:execute addMap bsmiu.map
  • /usr/local/texlive/2008//tlpkg/tlpobj/arphic.tlpobj: texmf-dist/fonts/map/dvips/arphic/bsmiu.map

 盼高手指點,非常感謝。

本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
2subject: dvips 如何引入 map 檔?Promote 0 Bookmark 12009-06-14quote  

在 updmap.cfg 中。這是說經由 updmap[.system] 管理的情況。這是目前新的方式,所以 *.map 需要經過 updmap 跑一下才會記錄進去。

以前的方式仍然可以用。


Apan Liao

joined: 2008-10-30
posted: 112
promoted: 23
bookmarked: 4
Tai-Chung City, Taiwan
3subject: Promote 0 Bookmark 02009-06-14quote  

感謝指點。

我後來在 /usr/local/texlive/2008/texmf/fonts/map/dvips/updmap/ 中的 psfonts_pk.map psfonts_t1.map psfonts.map 找到了一連串 bkaiu.map 中才有的內容,猜想這三個檔與消失的「p +bkaiu.map」有關吧!

雖然我嘗試著要讓我自己加入的 CJK Type 1 中文字型不用於 config.ps 中加上「p +xxx.map」,但還是沒辦法。沒有這行字,dvips 時會找不到字體。sudo updmap-sys --enable xxx.map 的動作也確實做了,但就是不行哩。

等我確定  psfonts_pk.map psfonts_t1.map psfonts.map 這三個檔的功能之後,再來告訴大家~感謝感謝。

本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
4subject: Promote 0 Bookmark 02009-06-14quote  

Chen-Pan Liao
我後來在 /usr/local/texlive/2008/texmf/fonts/map/dvips/updmap/ 中的 psfonts_pk.map psfonts_t1.map psfonts.map 找到了一連串 bkaiu.map 中才有的內容,猜想這三個檔與消失的「p +bkaiu.map」有關吧!

是的,這是 updmap 跑出來的結果。

雖然我嘗試著要讓我自己加入的 CJK Type 1 中文字型不用於 config.ps 中加上「p +xxx.map」,但還是沒辦法。沒有這行字,dvips 時會找不到字體。sudo updmap-sys --enable xxx.map 的動作也確實做了,但就是不行哩。

如果用的是 debian/ubuntu 系列的話,可能是

updmap --enable Map ${FONT}.map

updmap --enable Map=${FONT}.map

我不確定是哪一種,可能要試一下。可以參考一下 man updmap。

用 updmap 的好處是方便管理,而且會自動轉出 pdflatex/dvipdfm[x] 的 map 檔出來,壞處是程式執行慢到爆!

等我確定  psfonts_pk.map psfonts_t1.map psfonts.map 這三個檔的功能之後,再來告訴大家~感謝感謝。

請千萬不要手動去修改,常常會後悔。

 


edited: 1
Apan Liao

joined: 2008-10-30
posted: 112
promoted: 23
bookmarked: 4
Tai-Chung City, Taiwan
5subject: Promote 0 Bookmark 02009-06-14quote  

LGJ

如果用的是 debian/ubuntu 系列的話,可能是

updmap --enable Map ${FONT}.map

updmap --enable Map=${FONT}.map

感謝您的回應。我上次的 post 是沒仔細地把 updmap 的指令行打清楚,可能造成您的誤解,請見諒。

man updmap-sys 中,找到詳細的做法是:--enable Map=mapfile,而我之前下的指令都是沒有等號的,所以我又重新下了一次 sudo updmap-sys --enable Map=font-name.map,但結果似乎還是一樣的:沒有「p +font-name.map」會過不了 dvips,錯誤之處一直都一樣:

kpathsea: Running mktexpk --mfmode ljfour --bdpi 600 --mag 2+44/600 --dpi 1244 cwtexming4e
mktexpk: don't know how to create bitmap font for cwtexming4e.
kpathsea: Appending font creation commands to missfont.log.
/usr/texbin/dvips: Font cwtexming4e not found,  using cmr10 instead.

其中 cwtexming4e 是我自定的 type 1 中文字體之一。 

雖然如此,事情還是有進展啦。我在 updmap 後看到以下幾個重要的 output:

updmap: Generating output for ps2pk...
updmap: Generating output for dvips...
updmap: Generating output for pdftex...
updmap: Generating output for dvipdfm...
updmap: All output generated.

updmap: Files generated:
-rw-r--r-- 1 root wheel 236740 Jun 15 06:30 /usr/local/texlive/2008/texmf-var/fonts/map/dvipdfm/updmap/dvipdfm_dl14.map
-rw-r--r-- 1 root wheel 237367 Jun 15 06:31 /usr/local/texlive/2008/texmf-var/fonts/map/dvipdfm/updmap/dvipdfm_ndl14.map
-rw-r--r-- 1 root wheel 8931 Jun 15 06:30 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/builtin35.map
-rw-r--r-- 1 root wheel 12990 Jun 15 06:30 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/download35.map
-rw-r--r-- 1 root wheel 649809 Jun 15 06:29 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/ps2pk.map
-rw-r--r-- 1 root wheel 393342 Jun 15 06:30 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/psfonts_pk.map
-rw-r--r-- 1 root wheel 649814 Jun 15 06:30 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/psfonts_t1.map
-rw-r--r-- 1 root wheel 649816 Jun 15 06:30 /usr/local/texlive/2008/texmf-var/fonts/map/pdftex/updmap/pdftex_dl14.map
-rw-r--r-- 1 root wheel 648266 Jun 15 06:30 /usr/local/texlive/2008/texmf-var/fonts/map/pdftex/updmap/pdftex_ndl14.map

updmap: Map file links or copies:
lrwxr-xr-x 1 root wheel 16 Jun 15 06:31 /usr/local/texlive/2008/texmf-var/fonts/map/dvipdfm/updmap/dvipdfm.map -> dvipdfm_dl14.map
lrwxr-xr-x 1 root wheel 14 Jun 15 06:31 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/psfonts.map -> psfonts_t1.map
lrwxr-xr-x 1 root wheel 15 Jun 15 06:31 /usr/local/texlive/2008/texmf-var/fonts/map/pdftex/updmap/pdftex.map -> pdftex_dl14.map

很明顯地告訴我,dvips 是聽 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/psfonts_t1.map 的話的(若不用點陣字),而我也在這個檔案中找到我自定的中文 type 1 字體之「font-name.map」的所有內容。然而,沒有「p +cwtexming.map」還是不能 dvips。

也許,我還是把我建中文字體的過程說明一下好了,說不定問題是在這裡。以下是大致上的內容:

  1. 生 cwtexming[0-9a-f]{2}.pfb
  2. 生 cwtexming[0-9a-f]{2}.tfm
  3. 生 cwtexming.map
  4. 生 c70cwtexming.fd
  5. 將 pfb tfm map fd 都放到 local-texmf 中
  6. 在 /usr/local/texlive/2008/texmf-config/dvips/config/config.ps 加上一行「p +cwtexming.map」
  7. sudo texhash
  8. sudo updmap-sys --enable Map=cwtexming.map

之後就可以使用 cwtexming 了,以 latex + dvips +ps2pdf 編譯。

這一連串的 post 的出發點是,我希望最大化地保留 /usr/local/texlive/2008/ 的原樣,不要在裡面建太多自己的東西,如中文字體。要建自己的東西都建到 /usr/local/texlive/texmf-local/ 這個實體路徑之內。原因是,我怕 tlmgr 會和我自己建在 /usr/local/texlive/2008/ 打架,而且自己的東西放一起也方便備份。目前,除了 config.ps 這個問題還沒搞定就是了,其它所有的檔案都在 /usr/local/texlive/texmf-local/ 中乖乖坐好。

非常感謝之前李先生耐心地回應。唉,這個討論系列似乎已經被我搞成鑽牛角尖了。而且,這世界上 tex distribution 又那麼多種,大家都不一樣,還真是有點麻煩。但至少 updmap 已經可以一次控制 dvips pdftex dvipdfm 了(但 dvipdfmx 還沒功能全開,像 cid-x.map),而且 texlive 2008 又有 tlmgr 可以做套件控管,應該是進步很多了我想。

本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
6subject: Promote 0 Bookmark 12009-06-15quote  

Chen-Pan Liao
man updmap-sys 中,找到詳細的做法是:--enable Map=mapfile,而我之前下的指令都是沒有等號的,所以我又重新下了一次 sudo updmap-sys --enable Map=font-name.map,但結果似乎還是一樣的:沒有「p +font-name.map」會過不了 dvips,錯誤之處一直都一樣:

kpathsea: Running mktexpk --mfmode ljfour --bdpi 600 --mag 2+44/600 --dpi 1244 cwtexming4e
mktexpk: don't know how to create bitmap font for cwtexming4e.
kpathsea: Appending font creation commands to missfont.log.
/usr/texbin/dvips: Font cwtexming4e not found,  using cmr10 instead.

其中 cwtexming4e 是我自定的 type 1 中文字體之一。

請使用 updmap 設定 dvips 使用 Type 1 字型。

另外,何不使用已經製作好的呢?

ftp://cle.linux.org.tw/tex/cjk/fonts/

這一連串的 post 的出發點是,我希望最大化地保留 /usr/local/texlive/2008/ 的原樣,不要在裡面建太多自己的東西,如中文字體。要建自己的東西都建到 /usr/local/texlive/texmf-local/ 這個實體路徑之內。原因是,我怕 tlmgr 會和我自己建在 /usr/local/texlive/2008/ 打架,而且自己的東西放一起也方便備份。目前,除了 config.ps 這個問題還沒搞定就是了,其它所有的檔案都在 /usr/local/texlive/texmf-local/ 中乖乖坐好。

把 local 設定寫入 $TEXMF/texmf-local/web2c/updmap-local.cfg 然後執行 tlmgr generate updmap。

不過,因為我不願加裝 perl/tk,所以我不常使用 tlmgr,細節部份可能要多試一下。


edited: 1
Apan Liao

joined: 2008-10-30
posted: 112
promoted: 23
bookmarked: 4
Tai-Chung City, Taiwan
7subject: Promote 0 Bookmark 02009-06-15quote  
LGJ

請使用 updmap 設定 dvips 使用 Type 1 字型。

另外,何不使用已經製作好的呢?

ftp://cle.linux.org.tw/tex/cjk/fonts/

把 local 設定寫入 $TEXMF/texmf-local/web2c/updmap-local.cfg 然後執行 tlmgr generate updmap。

不過,因為我不願加裝 perl/tk,所以我不常使用 tlmgr,細節部份可能要多試一下。

我沒有使用李先生您製作的 Type 1 cwtex 字型而自己轉檔,是因為我想直接從頭操作來學習,又剛好原 cwtex TTF 中的中文全型句點是我想要的樣子(字寬如半形般),所以就延用下去了。不過真的轉了好幾天的檔。

至於您說到把 local 設定寫入 $TEXMF/texmf-local/web2c/updmap-local.cfg 然後執行 tlmgr generate updmap 一事,我要消化消化。有消息再來報告分享。真謝謝您再三的回應。

本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
8subject: Promote 0 Bookmark 02009-06-15quote  

Chen-Pan Liao
我沒有使用李先生您製作的 Type 1 cwtex 字型而自己轉檔,是因為我想直接從頭操作來學習,又剛好原 cwtex TTF 中的中文全型句點是我想要的樣子(字寬如半形般),所以就延用下去了。不過真的轉了好幾天的檔。

目前新的 cwt1 有兩種標點符號可用。如果想讓全型句點字寬變小只要修改一下字型或者由 macro 控制就可以了。

至於您說到把 local 設定寫入 $TEXMF/texmf-local/web2c/updmap-local.cfg 然後執行 tlmgr generate updmap 一事,我要消化消化。有消息再來報告分享。真謝謝您再三的回應。

意思就是把字型就裝在 texmf-local。只是 map 檔的對應寫入  updmap-local.cfg(沒有這個檔請自行建立),執行  tlmgr generate updmap 後會把內容附在系統 updmap.cfg 檔。這樣下次更新 TeX Live 就可以保有舊安裝的字型(當然還要重執行過 tlmgr generate updmap)。


本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
9subject: Promote 0 Bookmark 12009-06-16quote  
kpathsea: Running mktexpk --mfmode ljfour --bdpi 600 --mag 2+44/600 --dpi 1244 cwtexming4e

mktexpk: don't know how to create bitmap font for cwtexming4e.
kpathsea: Appending font creation commands to missfont.log.
/usr/texbin/dvips: Font cwtexming4e not found,  using cmr10 instead.

我大約猜到是什麼問題了。這可能是用 root 去執行 updmap.sys,然後一般使用者去編譯,而 dvips 找不到對應的 Type 1 字型,變成只有 root 能成功編譯。

很大的原因是這位使用者本身在家目錄已經有建立 updmap 資料,這時雖然 root 已經把系統的 updmap 更新了,但 dvips/kpathsea 只會去找第一個找到的 psfonts.map 檔,因此無法利用系統上已更新的資料。可以使用 kpsewhich psfonts.map 看是找到哪一個。

解決的方法是,在使用者的 updmap.cfg 加上對應資料,例如 Map xxx.map,然後重新執行 updmap 讓他更新使用者的對應資料。

我不清楚是否還有其他更方便的方式,這點對使用上的確是很不方便,常常會弄錯。


Apan Liao

joined: 2008-10-30
posted: 112
promoted: 23
bookmarked: 4
Tai-Chung City, Taiwan
10subject: Promote 0 Bookmark 02009-06-16quote  
LGJ

我大約猜到是什麼問題了。這可能是用 root 去執行 updmap.sys,然後一般使用者去編譯,而 dvips 找不到對應的 Type 1 字型,變成只有 root 能成功編譯。

您說的完全命中!太厲害了。

在我把 ~/.texlive2008(這是一般使用者的 texmf-config/ 和 texmf-var/)整個清掉後,就可以在沒有「p +xxx.map」的前題下通過 dvips 了!

我現在檢查發現,updmap 是更改 ~/.texlive2008/texmf-var/fonts/map/dvips/updmap/,而 sudo updmap-sys 是更改 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/。

沒錯,我之前的 updmap 都是「sudo updmap-sys」,所以都只是更改了 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/psfonts_t1.map 而沒更改 ~/.texlive2008/texmf-var/fonts/map/dvips/updmap/psfonts_t1.map。看來,以後要做 updmap 的動作,應該要 updmap 和 sudo updmap-sys 都做一做,比較穩當。

問題全解決了!真心感謝李先生。

本人已不在此站活動

joined: 2007-09-19
posted: 4946
promoted: 325
bookmarked: 206
歸隱山林
11subject: Promote 0 Bookmark 02009-06-16quote  

Chen-Pan Liao
沒錯,我之前的 updmap 都是「sudo updmap-sys」,所以都只是更改了 /usr/local/texlive/2008/texmf-var/fonts/map/dvips/updmap/psfonts_t1.map 而沒更改 ~/.texlive2008/texmf-var/fonts/map/dvips/updmap/psfonts_t1.map。看來,以後要做 updmap 的動作,應該要 updmap 和 sudo updmap-sys 都做一做,比較穩當。

一般使用者,還是得手動加入使用者的設定檔中才行,或者 updmap 跑一下這個新的 map 檔。

總之這個問題 TeX Live 那邊應該還會想其他的方式來處理,目前的方式彈性似乎是不夠。


cht電腦資訊文書排版TeX
adm Find login register
views:35084