「fontconfig」的「configuration file format」

說明

執行

$ man fonts-conf

找尋「CONFIGURATION FILE FORMAT」,可以找到下面這一段說明。

CONFIGURATION FILE FORMAT
       Configuration files for fontconfig are stored in XML format; this format makes external configuration  tools  easier  to  write  and
       ensures that they will generate syntactically correct configuration files. As XML files are plain text, they can also be manipulated
       by the expert user using a text editor.

       The fontconfig document type definition resides in the external entity "fonts.dtd"; this is normally stored in the default font con‐
       figuration directory (/etc/fonts). Each configuration file should contain the following structure:

            <?xml version="1.0"?>
            <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
            <fontconfig>
       ...
            </fontconfig>

也就是說,「fontconfig」每個設定檔的基本結構如下

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

</fontconfig>

可以觀看「/etc/fonts/fonts.conf」這個檔案的內容。

/etc/fonts/fonts.conf

執行下面指令,觀看「/etc/fonts/fonts.conf」這個檔案的內容。

$ cat /etc/fonts/fonts.conf

顯示

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<!-- /etc/fonts/fonts.conf file to configure system font access -->
<fontconfig>

<!--
        DO NOT EDIT THIS FILE.
        IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED.
        LOCAL CHANGES BELONG IN 'local.conf'.

        The intent of this standard configuration file is to be adequate for
        most environments.  If you have a reasonably normal environment and
        have found problems with this configuration, they are probably
        things that others will also want fixed.  Please submit any
        problems to the fontconfig bugzilla system located at fontconfig.org

        Note that the normal 'make install' procedure for fontconfig is to
        replace any existing fonts.conf file with the new version.  Place
        any local customizations in local.conf which this file references.

        Keith Packard
-->

<!-- Font directory list -->

        <dir>/usr/share/fonts</dir>
        <dir>/usr/local/share/fonts</dir>
        <dir prefix="xdg">fonts</dir>
        <!-- the following element will be removed in the future -->
        <dir>~/.fonts</dir>

<!--
  Accept deprecated 'mono' alias, replacing it with 'monospace'
-->
        <match target="pattern">
                <test qual="any" name="family">
                        <string>mono</string>
                </test>
                <edit name="family" mode="assign" binding="same">
                        <string>monospace</string>
                </edit>
        </match>

<!--
  Accept alternate 'sans serif' spelling, replacing it with 'sans-serif'
-->
        <match target="pattern">
                <test qual="any" name="family">
                        <string>sans serif</string>
                </test>
                <edit name="family" mode="assign" binding="same">
                        <string>sans-serif</string>
                </edit>
        </match>

<!--
  Accept deprecated 'sans' alias, replacing it with 'sans-serif'
-->
        <match target="pattern">
                <test qual="any" name="family">
                        <string>sans</string>
                </test>
                <edit name="family" mode="assign" binding="same">
                        <string>sans-serif</string>
                </edit>
        </match>

<!--
  Load local system customization file
-->
        <include ignore_missing="yes">conf.d</include>

<!-- Font cache directory list -->

        <cachedir>/var/cache/fontconfig</cachedir>
        <cachedir prefix="xdg">fontconfig</cachedir>
        <!-- the following element will be removed in the future -->
        <cachedir>~/.fontconfig</cachedir>

        <config>
<!--
  Rescan configuration every 30 seconds when FcFontSetList is called
 -->
                <rescan>
                        <int>30</int>
                </rescan>
        </config>

</fontconfig>

或是觀看「/etc/fonts/conf.d/」這個資料夾裡面,各個檔案的內容。

例如:

/etc/fonts/conf.d/51-local.conf

執行下面指令,觀看「/etc/fonts/conf.d/51-local.conf」這個檔案的內容。

$ cat /etc/fonts/conf.d/51-local.conf

顯示

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
        <!-- Load local system customization file -->
        <include ignore_missing="yes">local.conf</include>
</fontconfig>

/etc/fonts/conf.d/50-user.conf

執行下面指令,觀看「/etc/fonts/conf.d/50-user.conf」這個檔案的內容。

$ cat /etc/fonts/conf.d/50-user.conf

顯示

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
        <!--
            Load per-user customization files where stored on XDG Base Directory
            specification compliant places. it should be usually:
              $HOME/.config/fontconfig/conf.d
              $HOME/.config/fontconfig/fonts.conf
        -->
        <include ignore_missing="yes" prefix="xdg">fontconfig/conf.d</include>
        <include ignore_missing="yes" prefix="xdg">fontconfig/fonts.conf</include>
        <!-- the following elements will be removed in the future -->
        <include ignore_missing="yes" deprecated="yes">~/.fonts.conf.d</include>
        <include ignore_missing="yes" deprecated="yes">~/.fonts.conf</include>
</fontconfig>

「~/.config/fontconfig/fonts.conf」

執行下面指令,產生「~/.config/fontconfig/fonts.conf」這個檔案

cat > ~/.config/fontconfig/fonts.conf << EOF
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

</fontconfig>
EOF

執行

$ cat ~/.config/fontconfig/fonts.conf

會顯示

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>

</fontconfig>

執行

$ fc-match

並沒有出現任何錯誤訊息。「註:如何產生錯誤訊息,請參考 [1], [2], [3]」。