乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Fedora 7 字體美化

       sigmon 2012-03-31
      edora7(Moonshine)發(fā)布也有一段時間了,這個版本包含了GNOME2.18KDE3.5.6,美工有很大的提高;使用Xorg1.3版本,對nVidia顯卡支持很好,支持顯示器的熱插拔和自動識別;yum性能也得到很大的提升,其它各方面的表現(xiàn)都很不錯的,唯一的缺點就是中文字體顯示不夠完美。雖然比FC6有了極大的提高,但還是趕不上Ubuntu7.04。于是就有了自己動手美化中文顯示的想法,下面我把美化過程的整理給大家。
          試驗環(huán)境:Fedora7KDE3.5.6,在GNOME和其它發(fā)行版本上差別應(yīng)該不大。

          首先,我們來了解一些關(guān)于字體方面的知識。
      一、點陣字體(BDF)與矢量字體(TrueType
         大家知道PC的 顯示器是點陣顯示設(shè)備,圖像顯示的精細程度取決于顯示器的分辨率。文字也必須轉(zhuǎn)換為點陣信息方可正常顯示。于是人們設(shè)計制作了點陣字體,這種字體類似于位 圖圖像,以點陣詳細記錄了字體大小、形狀;這樣字體信息被讀取后不需要任何轉(zhuǎn)換就可直接在顯示器上顯示,由于制作精細,因此顯示效果也是最好的。但這種字 體不能縮放,需要為每種字號制作點陣信息才能滿足不同大小字體的顯示,因此導致字體制作工作量大、耗時、占用空間大等問題。后來人們設(shè)計了矢量字體,它是 用矢量圖形記錄了筆畫和字形等信息,解決了字體縮放的問題。
         矢量字體在顯示時轉(zhuǎn)換為點陣信息后才能顯示,在小字體情況下,轉(zhuǎn)換得到的點陣信息質(zhì)量與點陣字體相差甚遠,導致小字體顯示效果很差。因此人們?nèi)煞N字體之長,設(shè)計了一種即包括小字體點陣信息,又包括矢量字形的字體。比如著名的宋體(simsun),它包括12、13、1415、16、18點的點陣字庫,還包括矢量字形。
          矢量字體涉及到以下兩個概念:
         AAanti-alias)抗鋸齒技術(shù),它將字型以實際數(shù)倍大小繪制,然后縮放成想要的大小,未能占滿一格像素的格子就用灰階填補。對于英文字符,因其筆劃簡單,所以比較美觀,但對于中文小字體,會導致文字看起來發(fā)虛,模糊不清的問題。
         hinting字體微調(diào)技術(shù),它是字體的一種額外信息,嵌入字體內(nèi)部,告訴字體渲染引擎如何渲染字體,使用字體看起來更美觀。但hinting制作復雜,非常耗時,所以帶有良好hinting的字體并不多(特別是中文字體)。對于字體的hinting有四種風格hintnone、hintslighthintmedium、hintfull,分別是指無hinting、輕度hinting、中等hinting、完全hinting。
         hinting如果調(diào)整不好,可能導致字體顯示并不好看,且由于hinting是有專利的,不能免費無限制地使用,freetype又做出了自己的字體微調(diào)技術(shù)autohint,經(jīng)過不斷改進,已經(jīng)改善了部分字體的顯示效果。autohint是通過程序來實現(xiàn)的,并且是針對所有字體,當然不可能有專門為每種字體制作的hinting技術(shù)效果好。

      二、重要的概念:DPI
          DPIDotperInch),這是一個印刷上的單位,是指每英寸上的油墨點數(shù)。這里把DPI用來描述顯示器上每英寸所包括的像素(Pixel),其值越高越精細,顯示效果就越好。由于顯示器的分辨率、點距(或珊距)及尺寸的不同,因此不同顯示器的DPI也有差別。
         那么我們?nèi)绻嬎阕约猴@示器的DPI呢?先測出自己顯示器的寬(width)和高(height),單位是cm,知道顯示器的分辨率。注意,如果是液晶顯示器,則它只有一個分辨率即其最大分辨率。對于CRT顯示器,它可以用多種分辨率,你先將其調(diào)整為最合適的分辨率(比如17CRT顯示器調(diào)整為1024768)。由于1(inch)=2.54(cm),于是有下面的公式:
          水平DPI=(水平分辨率/width)*2.54
          垂直DPI=(垂直分辨率/height)*2.54
          有的顯示器上水平DPI和垂直DPI有少許出入,這也是正常的。

         大家可以看出,同樣像素的字體在高DPI的顯示器上顯示出來會較小。既然不同顯示器的DPI不同,那么用像素來描述字的大小顯然不合適,于是還有一個字體大小的單位:磅(point)。
         磅是重量單位?不,此磅非彼磅,在這里,它才是字體大小的絕對度量(沒忘記MSWord里的行距的單位吧)。
          1磅=172英寸。
         不管何種大小的字體,最終都要換算成像素之后,才能在屏幕上顯示。那么像素(px)和磅(pt)換算關(guān)系為:
          pxptDPI72
         用這個公式可以算出,一個9磅的字在96DPI的顯示器上用12像素來顯示,但在75DPI的顯示器上卻只用9像素來顯示。因此如果你的系統(tǒng)里為顯示器設(shè)置了錯誤的DPI,那么最終顯示出來的字將是不正常的大小。
         請注意,Firefox里設(shè)置的字體大小是以像素(px)為單位,在系統(tǒng)其它你能看到的絕大多數(shù)地方,都是以磅(pt)為字體大小單位。
          好了,我們來看看自己XserverDPI設(shè)置:
          $xdpyinfo |grep resolution
          resolution:   75x75 dots per inch
         通過上面的方法已經(jīng)得知我的顯示器DPI約為96,這里卻設(shè)為75,明顯不正確。打開/etc/X11/xorg.conf,在Section"monitor"段中加入DisplaySize參數(shù):
          Section"Monitor"
              ……
              DisplaySize 270 203  # 1024x768  96pi
          EndSection
         重啟X后,再使用上述xdpyinfo命令便可看到效果。不管實際的DPI是多少,都建議你將DPI值設(shè)為6甚至12的倍數(shù)。因為我們使用磅來計算字體大小,在轉(zhuǎn)換時采用舍入方法來選擇鄰近的值作為字體最終的大小(像素),如果DPI值不為612的倍數(shù),將可能導致相鄰的字號轉(zhuǎn)換后得到相同或差別很大的像素的字。
         打開/etc/X11/Xresources文件,找到開頭為Xft.dpi那一行將其冒號后的值改為96(你的實際DPI)。
         再打開/etc/fonts/local.conf,在<fontconfig></fontconfig>之間加入下面幾行:
              <matchtarget="pattern">
                      <editname="dpi" mode="assign" >
                             <double>96</double>
                      </edit>
              </match>
         5行代碼,也可以寫在/etc/fonts/fonts.conf~/.fonts.conf中,但是不建議這么做,因為在升級或其它設(shè)置時,可能會被覆蓋。如果沒有這個文件,則創(chuàng)建一個。這是一個XML格式的文件,下面會有詳細介紹。
         上面兩個修改DPI值的地方,其中GTK程序會讀取Xresources文件中的設(shè)置,而Qt程序則會應(yīng)用fonts.conflocal.conf中的設(shè)置。

      三、Linux系統(tǒng)下字體顯示原理
         現(xiàn)代Linux的字體處理系統(tǒng)大都采用XftFontconfigFreetype來處理字體。
         Fontconfig提供了一系列字體設(shè)定的函數(shù)庫,應(yīng)用程序直接向其索取字型;還負責發(fā)現(xiàn)和自動配置新字體,使新字體安裝變得簡單。它由兩部分組成,其一是設(shè)定模塊,把XML配置文件轉(zhuǎn)換成Fontconfig的內(nèi)部設(shè)定;另一是對比模塊,將應(yīng)用程序傳來的字體樣式需求與現(xiàn)有字體對比入修改,傳回最相似的字體。
          Xft也是一套library,它使用fontconfig找出來的字型,將其繪制出來。
         Freetype可以說是一種完整的字體光柵化引擎,它提供一個簡單的、易用的并且統(tǒng)一的接口實現(xiàn)對多種字體文件的訪問。目前版本是2.x,與1.x版本相比主要是支持Anti-aliashintingfreetype的改變會影響到Xft畫出來的字。
         說了這么一段大家一定頭暈了,其實我也暈了。簡單地說就是由Fontconfig選出來的字,再由Freetype決定如何去畫,最后由Xft來處理畫字。這是我個人的理解,可能可能不太準確,請大家不吝指正。

      四、安裝新字體
         講了這么多枯燥而繁瑣的理論,可能有的讀者都已經(jīng)睡著了。好,我們下面開始進行實際的美化操作!
          安裝MScorefonts,這里http://corefonts./有下載地址和詳細的安裝方法,RedhatFedora的用戶可能使用下面這個命令來安裝,但前提是已經(jīng)可以上網(wǎng)并設(shè)置好yum源。
          yuminstall msttcorefonts
          Debian/Ubuntu用戶:
          apt-getinstall msttcorefonts
         十一種字體將會被安裝到/usr/share/fonts/msttcorefonts/目錄中。然后我們到windows中把中文字體細明體和新細明體(mingliu.ttc)、華文細黑(stxihei.ttf)也考到此目錄吧,你也可以把其它常用的中文字體(比如楷體、幼圓等)也考過來,不過在下面的配置就不體現(xiàn)它們了。而對于宋體(simsun.ttc),我們?nèi)?/font>http://wyx./jmm/Computing/SIMSUN.rar下載fromnuaa兄制作的這個版本,它帶有1019點十種點陣字體,比Windows帶的效果更好。Fedora使用的是文鼎的宋體(uming.ttf)和楷體(ukai.ttf),實在不怎么好看,可以把它刪去,當然你也可以保留。之后重啟X字體服務(wù)"servicexfs restart"讓系統(tǒng)自動發(fā)現(xiàn)并配置新字體。

      五、fontconfig配置
         前面介紹過,fontconfig可以把應(yīng)用程序傳來的字體請求信息進行匹配和修改,從而實現(xiàn)個性化定制,其配置文件為/etc/fonts/fonts.conf。這是一個XML文件,可以用任何編輯器編輯。但由于升級原因?qū)е麓宋募菀妆桓采w,所以建議大家把自定義的配置寫在/etc/fonts/local.conf中,這個文件與fonts.conf格式一模一樣下面是它的框架:
          <?xmlversion="1.0"?>
          <!DOCTYPEfontconfig SYSTEM "fonts.dtd">
          <!--/etc/fonts/local.conf file to configure system font access -->
          <fontconfig>

          </fontconfig>
         所有的配置都應(yīng)該寫在<fontconfig></fontconfig>之間,比如加入上面提到的設(shè)置DPI的語句,將變成下面的樣子:
          <?xmlversion="1.0"?>
          <!DOCTYPEfontconfig SYSTEM "fonts.dtd">
          <!--/etc/fonts/local.conf file to configure system font access -->
          <fontconfig>
              <matchtarget="pattern">
                      <editname="dpi" mode="assign" >
                             <double>96</double>
                      </edit>
              </match>

          </fontconfig>

         我們以后的設(shè)置都是在這個文件<fontconfig></fontconfig>之間添加語句。fontconfig配置文件的語法非常靈活和復雜,manfonts-conf可以看到非常詳細的解釋和語法說明,網(wǎng)上據(jù)說有繁體中譯版本,但我一直沒有找到。如有時間,我把它翻譯一下發(fā)到論壇上。

           <matchtarget="font" >
                <editname="rgba" mode="assign">
                    <const>rgb</const><!--不同的顯示器取值有所差別-->
                </edit>
          </match>
         這一段是用來啟用液晶顯示器的次像素排列,是液晶顯示器的最佳顯示方式。大家知道,液晶顯示屏的每一個點都是用三原色RGB來合成各種顏色,但各種液晶顯示器的RGB排列方式卻可能不同,因此,取值也有多種:rgb、bgrvrgb、vbgr,對于CRT顯示器,應(yīng)關(guān)閉此功能(將值設(shè)為none)。如果設(shè)置錯誤,對于開AA的字體可能看起來花花綠綠,不太舒服。
          在計算機中我們把字體分為無襯線字體(SanSerif)和(有)襯線字體(Serif)。無襯線字體的筆畫沒有多余修飾,比如黑體、幼圓,英文字體有ArialVerdana及著名的Tahoma等;而襯線字體的筆畫的起始和結(jié)束通常都有一些裝飾,使字體看起來更美觀,比如宋體、楷體,GeorgiaTimesNew Roman等。
         而對于英文字體,還有等寬字體(monotype)和不等寬字體,故名思義,即英文字符占用寬度是相等的或不相等的。常見的等寬字體有AndalemonoCourierNew等。絕大多數(shù)人都認為不等寬字體具有更好的外觀和可識別性,但在計算機有的環(huán)境中卻不利于排版(比如控制臺中)。
         下面對各類字體提供別名,靠前的字體優(yōu)先級高。當應(yīng)用程序請求系統(tǒng)中沒有的字體時,將自動用后面的字體替換。
              <alias>
                     <family>sans-serif</family>
                      <prefer>
                             <family>Arial</family>
                             <family>Verdana</family>
                             <family>Tahoma</family>
                             <family>TrebuchetMS</family>
                             <family>SimSun</family>
                             <family>宋體</family>
                             <family>PMingLiU</family>
                             <family>新細明體</family>
                             <family>STXihei</family>
                             <family>華文細黑</family>
                      </prefer>
              </alias>
              <alias>
                      <family>serif</family>
                      <prefer>
                              <family>TimesNew Roman</family>
                             <family>Georgia</family>
                             <family>SimSun</family>
                             <family>宋體</family>
                             <family>PMingLiU</family>
                             <family>新細明體</family>
                      </prefer>
              </alias>
              <alias>
                     <family>monospace</family>
                      <prefer>
                              <family>CourierNew</family>
                              <family>AndaleMono</family>
                             <family>NSimSun</family>
                             <family>新宋體</family>
                             <family>MingLiU</family>
                             <family>細明體</family>
                      </prefer>
              </alias>
         這里把宋體和新細明體也加入無襯線字體類別中了,因為內(nèi)嵌點陣字形的宋體和新細明體,比黑體等無襯線字體會有更好的表現(xiàn)。
         有的網(wǎng)頁使用了如Times,Helvetica等英文字體。原來系統(tǒng)中沒有這些字體,fontconfig將其映射到其它字體,看起來不夠美觀。我們加上下面這段:
              <alias>
                      <family>Times</family>
                      <prefer>
                              <family>TimesNew Roman</family>
                      </prefer>
                      <default>
                             <family>serif</family>
                      </default>
              </alias>
              <alias>
                     <family>Helvetica</family>
                      <prefer>
                             <family>Arial</family>
                      </prefer>
                      <default>
                             <family>sans-serif</family>
                      </default>
              </alias>
              <alias>
                     <family>Courier</family>
                      <prefer>
                              <family>CourierNew</family>
                      </prefer>
                      <default>
                             <family>monospace</family>
                      </default>
              </alias>

         前面已經(jīng)提到了hinting技術(shù),MS對每種字體做了不同的hinting,詳細可以到http://www.microsoft.com/typography/web/fonts/fonts02.htm查看,這里只貼出開頭一小部分。對于表中沒有的字體,MS也提供了工具來查看http://www.microsoft.com/typography/TrueTypeProperty21.mspx

                                             
                              Font                        name
                     
                              Smoothing                        and hinting*
                     
                              Also                        supplied with
                     
                              Smoothed
                     
                              Hinted
                     
                              Both
                     
                              Arial
                     
                              0-6
                     
                              7-13
                     
                              14+
                     
                              .Windows
                              .Web                        fonts
                     
                              Arial                        Bold
                     
                              0-6
                     
                              7-8
                     
                              9+
                     
                              Arial                        Italic
                     
                              0-6
                     
                              7-13
                     
                              14+
                     
                              Arial                        Bold Italic
                     
                              0-6
                     
                              7-8
                     
                              9+
                     

         表里的smoothed就是指打開AA,hinted是指打開hinting,both當然就指兩者都開,單位是磅(pt)。大家看到,MS對待字體的hinting可不是一棒子打死,不同的字號是區(qū)分開的,正體、粗體、黑體等也是有區(qū)別的。我們這里要做的,就是針對不同的字體單獨設(shè)置。
         先來一段總體的設(shè)置,對于沒有單獨設(shè)置的字形,就采用它了。autohinthinting是兩種不同的字體微調(diào)技術(shù),不建議同時開啟。
              <matchtarget="font" >
                      <editname="antialias" mode="assign" >
                             <bool>true</bool>               <!--   改成false即可關(guān)閉AA  -->
                      </edit>
                      <editname="autohint" mode="assign" >
                             <bool>false</bool>
                      </edit>
                      <editname="hinting" mode="assign" >
                             <bool>true</bool>              <!--   改成false即可關(guān)閉hinting -->
                      </edit>
                      <editname="hintstyle" mode="assign" >
                             <const>hintfull</const>     <!--   前面提到的hinting風格,在這里設(shè)置-->
                      </edit>
              </match>

         表中看出,MS每種字體在0-6號字都只打開了AA,因此這段設(shè)置就是把所有MS字體06號開AA,關(guān)閉autohinthinting
              <matchtarget="font" >
                      <testname="foundry" qual="any" >
                             <string>microsoft</string>   <!--   只針對MS的字體-->
                      </test>
                      <testname="size" compare="less_eq" >
                              <int>6</int>
                      </test>
                      <editname="antialias" mode="assign" >
                             <bool>true</bool>
                      </edit>
                      <editname="autohint" mode="assign" >
                             <bool>false</bool>
                      </edit>
                      <editname="hinting" mode="assign" >
                             <bool>false</bool>
                      </edit>
              </match>
         下面我就通過表中數(shù)據(jù)Arial字體進行設(shè)置,其它字體類似(為節(jié)約篇幅,這里代碼寫得很緊湊)。
          <!--Arial正體 -->
              <matchtarget="font" >
                      <testname="family" ><string>Arial</string></test>
                      <testname="weight" compare="eq"><const>regular</const></test>
                      <testname="slant" compare="eq"><const>roman</const></test>
                      <testname="size" compare="more_eq"><int>7</int></test>
                      <testname="size" compare="less_eq"><int>13</int></test>
                      <editname="antialias" mode="assign"><bool>false</bool></edit>
                      <editname="autohint" mode="assign"><bool>false</bool></edit>
                      <editname="hinting" mode="assign"><bool>true</bool></edit>
                      <editname="hintstyle" mode="assign"><const>hintfull</const></edit>
              </match>
          <!--   Arial 粗體  -->
              <matchtarget="font" >
                      <testname="family" ><string>Arial</string></test>
                      <testname="weight" compare="eq"><const>bold</const></test>
                      <testname="slant" compare="eq"><const>roman</const></test>
                      <testname="size" compare="more_eq"><int>7</int></test>
                      <testname="size" compare="less_eq"><int>8</int></test>
                      <editname="antialias" mode="assign"><bool>false</bool></edit>
                      <editname="autohint" mode="assign"><bool>false</bool></edit>
                      <editname="hinting" mode="assign"><bool>true</bool></edit>
                      <editname="hintstyle" mode="assign"><const>hintfull</const></edit>
              </match>
        <!-- Arial 斜體 -->
              <matchtarget="font" >
                      <testname="family" ><string>Arial</string></test>
                      <testname="weight" compare="eq"><const>regular</const></test>
                      <testname="slant" compare="eq"><const>italic</const></test>
                      <testname="size" compare="more_eq"><int>7</int></test>
                      <testname="size" compare="less_eq"><int>13</int></test>
                      <editname="antialias" mode="assign"><bool>false</bool></edit>
                      <editname="autohint" mode="assign"><bool>false</bool></edit>
                      <editname="hinting" mode="assign"><bool>true</bool></edit>
                      <editname="hintstyle" mode="assign"><const>hintfull</const></edit>
              </match>
        <!-- Arial 粗斜體 -->
              <matchtarget="font" >
                      <testname="family" ><string>Arial</string></test>
                      <testname="weight" compare="eq"><const>bold</const></test>
                      <testname="slant" compare="eq"><const>italic</const></test>
                      <testname="size" compare="more_eq"><int>7</int></test>
                      <testname="size" compare="less_eq"><int>8</int></test>
                      <editname="antialias" mode="assign"><bool>false</bool></edit>
                      <editname="autohint" mode="assign"><bool>false</bool></edit>
                      <editname="hinting" mode="assign"><bool>true</bool></edit>
                      <editname="hintstyle" mode="assign"><const>hintfull</const></edit>
              </match>   
         大家也看到,fontconfig可讓某些字體的某些字號開啟或關(guān)閉指定的特性,用法非常靈活,參照manpagemanfonts-conf)。將MS每種字體都照表上的數(shù)據(jù)設(shè)置一下,不過工作量也太大了點,各位同胞要是有耐心可以照此修改,把它做完。但是,我也沒發(fā)現(xiàn)這樣做了之后字體變得有多么漂亮,也許是我的審美觀有問題,或者就是太懶。所以我自己的電腦上,還是把所有字體設(shè)置一棒子打死(中文字體除外),hinting全開,hintstylehintfull,呵呵!別扁我!

         下面的就是針對中文字體的設(shè)置了,有的中文字體由于雙寬度屬性(spacing=dual,對于中文部分幾乎沒影響,但英文部分間隙太寬,不美觀,所以將其調(diào)整為Proportional。
              <matchtarget="font" >
                      <testtarget="pattern" name="lang" compare="contains">
                             <string>zh</string>
                             <string>ja</string>
                             <string>ko</string>
                      </test>
                      <testname="spacing" compare="eq">
                             <const>dual</const>
                      </test>
                      <editname="spacing" mode="assign" >
                             <const>proportional</const>
                      </edit>
                      <editname="globaladvance" mode="assign" >
                             <bool>false</bool>
                      </edit>
              </match>
         前面提到宋體和細明體都內(nèi)嵌了點陣字體,下面我們就爭對有點陣字體的字號單獨關(guān)閉AA,讓其使用字體內(nèi)嵌的位圖字體。
          <!--這里使用前面下載的宋體,它帶了10-19點位圖字體-->
             <matchtarget="font" >
                      <testqual="any" name="family" compare="eq" >
                             <string>SimSun</string>
                             <string>宋體</string>
                             <string>NSimSun</string>
                             <string>新宋體</string>
                      </test>
                      <testname="pixelsize" compare="more_eq" >
                              <int>10</int>
                      </test>
                      <testname="pixelsize" compare="less_eq" >
                              <int>19</int>
                      </test>
                      <editname="antialias" mode="assign" >
                             <bool>false</bool>
                      </edit>
              </match>
         <!--細明體和新細明體,帶有11,12,13,15,16,20點位圖字體-->
              <matchtarget="font" >
                      <testqual="any" name="family" compare="eq" >
                             <string>MingLiU</string>
                             <string>細明體</string>
                             <string>PMingLiU</string>
                             <string>新細明體</string>
                      </test>
                      <testname="pixelsize" compare="more_eq" >
                              <int>11</int>
                      </test>
                      <testname="pixelsize" compare="less_eq" >
                              <int>13</int>
                      </test>
                      <editname="antialias" mode="assign" >
                             <bool>false</bool>
                      </edit>
              </match>
              <matchtarget="font" >
                      <testqual="any" name="family" compare="eq" >
                             <string>MingLiU</string>
                             <string>細明體</string>
                             <string>PMingLiU</string>
                             <string>新細明體</string>
                      </test>
                      <testname="pixelsize" compare="more_eq" >
                              <int>15</int>
                      </test>
                      <testname="pixelsize" compare="less_eq" >
                              <int>16</int>
                      </test>
                      <editname="antialias" mode="assign" >
                             <bool>false</bool>
                      </edit>
              </match>
              <matchtarget="font" >
                      <testqual="any" name="family" compare="eq" >
                             <string>MingLiU</string>
                             <string>細明體</string>
                             <string>PMingLiU</string>
                             <string>新細明體</string>
                      </test>
                      <testname="pixelsize" compare="eq" >
                              <int>20</int>
                      </test>
                      <editname="antialias" mode="assign" >
                             <bool>false</bool>
                      </edit>
              </match>

         如果你覺得宋體的英文部分不美觀,可以使用其它英文字體替換掉,也就是中英文字體混用的問題,在Firefox中可以生效。
            <matchtarget="pattern">
                      <testname="family" qual="any" >
                             <string>SimSun</string>
                             <string>宋體</string>
                             <string>PMingLiU</string>
                             <string>新細明體</string>
                      </test>
                      <editname="family" mode="prepend" binding="strong">
                             <string>Arial</string>   <!--  將英文不等寬字體替換為Arial-->
                      </edit>
              </match>
              <matchtarget="pattern">
                      <testname="family" qual="any" >
                             <string>NSimSun</string>
                             <string>新宋體</string>
                             <string>MingLiU</string>
                             <string>細明體</string>
                      </test>
                      <editname="family" mode="prepend" binding="strong">
                              <string>CourierNew</string>   <!-- 英文等寬字體替換為CourierNew -->
                      </edit>
              </match>
          我將英文不等寬字體替換為Arial,等寬字體替換為CourierNew,如果你更喜歡其它英文字體,在上面注釋處直接更改就可以了。

      六、關(guān)于字體的修改
         關(guān)于fontconfig配置文件的寫法我們就寫到這里了,但其配置靈活,能實現(xiàn)的遠不只這里說提到的功能,更多的寫法還需要大家去發(fā)掘。由于Linux系統(tǒng)中GUI應(yīng)用程序有很多種,如GTK1程序,GTK2Qt程序,有的支持fontconfig,有的不支持,還有一些特殊程序擁有自己的畫字引擎,所以前面提到的配置不可能在所有的程序中生效。比如剛才提到的字體替換技術(shù)在Qt程序中好像不起作用,由于宋體內(nèi)嵌的位圖字體沒有包括英文部分點陣,導致不開AA的情況下英文部分顯示丑陋,但如果開AA,小號中文字體顯示又不理想。于是我們就會想是否可以為其加上英文部分的點陣,讓宋體在任何地方都有較好的顯示效果,這能不能行得通呢?答案是肯定的。下面就為大家介紹如何使用工具來為宋體加上英文部分點陣。
          工具準備:
         fontforge,可直接對點陣字體或矢量字形進行編輯,這是我們的主要工具。工作平臺:linux。下載地址:http://fontforge./
          sbit32,工作平臺:windows。下載地址:http://www./nuke/modules/Forums/files/sbit.zip
         ttctool,工作平臺:windows。下載地址:http://www./nuke/modules/Forums/files/TTCTOOL_213.zip

         ttc字體是由多個ttf字體合并而來的。fontforge可以直接打開ttc字體,但當我們打開simsun.ttc時,發(fā)現(xiàn)其讀不到1315、18點陣位圖字體,同樣打開fromnuaa兄制作的那款宋體也有同樣的問題。這并不是因為宋體中沒有包含這三種位圖點陣,而是因為這三種點陣的flag=0(正常應(yīng)為1)的緣故。解決方法是使用sbit32分離出這出這三種點陣信息,將它們從原字體中刪除后再加入,就可以使其flag變?yōu)?/font>1,從而可以用fontforge打開編輯。但sbit32不支持ttc文件,因此我們需要先使用ttctoolttc字體分解為ttf字體。
          1.分割ttc字體為兩個ttf字體
         解壓TTCTOOL_213.zip,打開windows命令行,進入解壓目錄操作
          D:\>cdTTCTOOL_213
          D:\TTCTOOL_213>breakttc simsun.ttc
         這里我們使用fromnuaa兄制作的這款宋體。這步操作完成之后生成兩個ttf字體,font000.ttffont001.ttf,其中一個是宋體,另一個是新宋體。由于宋體和新宋體除了英文部分是否是等寬的之外,其它一模一樣,以后我們就只對宋體進行操作,去掉新宋體。
          2.flag=0的那部分點陣信息保存為單獨的文件
         解壓sbit32,同樣我們也打開windows命令行,進入解壓目錄,將剛才生成的宋體(ttf)考貝到這里來,還是將字體文件名改為simsun.ttf吧。
          D:\sbit>sbit32-v -i  simsun.ttf
         這條命令將看到字體的詳細信息,我們主要是看字體包含那些字號的點陣和它的flag。這里看到13、15、18點陣字體的flag=0。
         Sbit目錄中有一個文件sample.met,用記事本打開它,可以看到其中只有幾個字符ppemxx,我們將其改為ppem13,然后保存。
          D:sbit>sbit32-x simsun.ttf sample.met 13.bdf
         這條命令就將simsun.ttf文件中內(nèi)嵌的13點位圖點陣保存為13.bdf了。我們再修改sample.met文件為ppem15,然后用sbit32-x simsun.ttf sample.met 15.bdf15點位圖字體保存下來了,同理,把18點位圖字體保存下來。
          3.刪除simsun.ttf字體中內(nèi)嵌的flag=0的點陣字體
          sample.met文件的內(nèi)容改為ppem13,再用這個命令得到一個不包含13點位圖字體的simsun1.ttf
          D:\sbit>sbit32-d simsun.ttf sample.met simsun1.ttf
         再修改sample.met內(nèi)容為ppem15,用下面這個命令得到一個不包含1315點位圖字體的simsun2.ttf
          D:\sbit>sbit32-d simsun1.ttf sample.met simsun2.ttf
         同樣的方法,得到一個不包含1315、18點位圖字體的simsun3.ttf
          4.將剛才保存的bdf文件全部加入simsun3.ttf
          修改sample.met文件為ppem13,運行下面這條命令得到simsun4.ttf,包含了13點位圖字體。
          D:\sbit>sbit32-a simsun3.ttf 13.bdf sample.met simsun4.ttf
         同樣的方法,可由simsun4.ttf得到simsun5.ttf,再得到包含了1019所有位圖字體的simsun6.ttf。我們迂回地做了這么多工作得到的simsun6.ttf,其實就是把13、15、18點位圖字體的flag變?yōu)榱?/font>1,其它與simsun.ttf一模一樣。有的讀者可能會問,直接把第2步生成的bdf文件導入fontforge編輯不就行了嗎?憒憾的是fontforge并不能正常地打開這些bdf文件。以下的工作,我們就用fontforge打開simsun6.ttf來添加英文點陣了。
          5.使用fontforge編輯字體。
         fontforge的安裝是非常簡單的,對于Fedora,除了在上面給出的地址下載安裝外,還可以使用yuminstallfontforge命令自動安裝。在終端下輸入fontforge開始運行,你可能覺得界面也太丑了,不過還好是中文的。開始運行時就提示你打開一個字體,選擇剛才生成的simsun6.ttf,等會兒會提示你載入位圖字體,這時你應(yīng)該可以看到10-1910種位圖字體(如果少了幾種,那么剛才的工作就沒做好),點[選擇全部],再點[是]打開字體。主界面以方格的形式顯示每個字的形狀。
         點[查看]菜單,菜單最下面可看到10-19十項菜單,點選它們主界面就切換到點陣位圖字體查看狀態(tài),雙擊其中一個字,就可對這個字進行點陣信息編輯。我們的目標是對添加英文字體位圖點陣,你可以手動一個個編輯,也可以將其它英文位圖字體導入,這是一項十分繁瑣的工作,不過不用擔心,我已經(jīng)幫大家做好了。
         firefox瀏覽網(wǎng)頁時,你可能發(fā)現(xiàn)文字總是緊貼著下劃線,十分不舒服,不過我們可以下移下劃線的位置。點[基礎(chǔ)]->[字體信息],彈出字體信息對話框,你可以對字體的很多信息進行查看和修改,但是建議不要亂動里面的信息。點左邊的[一般],在右邊找到[下劃線位置],其默認為-22,把它改為-50,點確定,如果還出現(xiàn)提示信息,仍然點確定。
         最后,點[文件]->[生成字體],在生成字體對話框中,為新字體取一個名字,下面分別選擇TrueTypeTTF/OTF,點[確定],出現(xiàn)dpi選項,選[估計]就可以了。需要注意的是如果使用了前面字體替換技術(shù),這里的下劃線設(shè)置就不起作用!不過由于現(xiàn)在我們已經(jīng)對字體加入了英文位圖點陣,也就不在擔心英文顯示太丑,所以在我的設(shè)置中沒有使用字體替換技術(shù)。
         把這個新字體考到字體目錄中,刪掉原來的宋體,重啟xfs服務(wù),你會看到Linux下的宋體不管是中文還是英文,都已經(jīng)和windows下的樣子沒有區(qū)別!

          (全文完)

          關(guān)于作者
          姓名:茍廷勇
          論壇IDwotooa
          MSNicecard@hotmail.com
         論壇ID的由來:其實這也和Linux有關(guān)。Ubuntu7.04剛發(fā)布時,我就去下載回來體驗,它給我的第一感覺就是太漂亮了,因此決定由Fedora轉(zhuǎn)向Ubuntu,并且開始向我的朋友灌輸Ubuntu的好,才向朋友灌輸?shù)倪^程中,發(fā)現(xiàn)我將ubuntu念成了“我不吐”!但用了之后才發(fā)現(xiàn),我RedHat/Fedora的功底在Ubuntu里都用不上,很多以前用得很熟悉的命令都不能用,常見的配置文件也找不到,以前可以輕松搞定的事在這里做不了,我得重新學過!過了一個多月,實在忍受不了,我終于“吐了”!“我吐啊”(wotooa)這個名字就這么出來了!這個名字實在有點不雅,不過既然與Linux有關(guān),還是暫時留著吧!
          我又換回了久違的Fedora,狠下心來做美化,于是就有了這篇文章,呵呵

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多