This is the file hbf2gf.txt of the CJK macro package ver. 4.6.0 (11-Aug-2005). Using hbf2gf ------------- hbf2gf converts CJK bitmaps with an HBF header file into GF files. Additional documentation can be found in the man page utils/hbf2gf/hbf2gf.1 (pre-formatted versions of this document can be found in the `cjk-doc' bundle of CJK). Syntax: hbf2gf [-q] configuration_file[.cfg] hbf2gf [options] subfont_name x_resolution [y_scale | y_resolution] hbf2gf -t [-q] font_name hbf2gf --version | --help Options: -q make hbf2gf quiet -p don't create a PL file -g don't create a GF file -n use no resolution in extension (only `.gf') -t test for font_name (returns 0 on success) Keywords in the configuration file must start a line, the appropriate values being on the same line separated with one or more blanks or tabs. Environment variables names start with `$'; to get a dollar sign you must type `$$'. The expansion of environment variables in hbf2gf itself (without the help of the kpathsea library) is very limited; this feature has been carried over from previous versions. It can't expand variables set in texmf.cnf; it also can't handle more than one directory as the variable's value. Don't use it except for the `pk_directory' and `tfm_directory' parameters! Here is an example configuration file gsfs14.cfg (please refer to hbf2gf.1 and hbf2gf.dvi for a description of the keywords) to be run under OS/2: hbf_header jfs56.hbf mag_x 1 design_size 14.4 y_offset -13 comment jianti fansongti 56x56 pixel font scaled and adapted to 14.4pt nmb_files -1 tfm_files yes output_name gsfs14 checksum 123456789 dpi_x 300 coding codingscheme GB 2312-80 encoded TeX text pk_directory $HBF_TARGET\pixel.lj\432dpi\ tfm_directory $HBF_TARGET\tfm\ rm_command del cp_command copy long_extension off job_extension .cmd Installation of a complete set of subfonts ------------------------------------------ Here are the results of a sample run of the above configuration file (assuming that the environment variable %HBF_TARGET% points to d:\china): input files: jfs56.a - jfs56.e, jfs56.hbf program call: hbf2gf gsfs14.cfg intermediate files: gsfs14.cmd, gsfs1401.gf - gsfs1432.gf, gsfs14.pl batch file call: gsfs14.cmd output files: d:\china\pixel.lj\432dpi\gsfs1401.pk - gsfs1432.pk, d:\china\tfm\gsfs1401.tfm - gsfs1432.tfm [gsfs: GuoBiao simple encoded FanSong style ^ ^ ^ ^ It's hard to overcome the DOS restriction of 8 characters in a file name if you need two characters as a running number...] Using MakeTeXPK or mktexpk -------------------------- ***************************************************************************** * * * For teTeX >=1.0 and web2c >= 7.3.1, no patches are necessary for either * * mktexpk or mktextfm. * * * ***************************************************************************** The simpler way to create PK fonts is to apply the patches in the utils/hbf2gf/scripts directory. In case you can't become root make sure that the patched file is found in the path *before* the original MakeTeXPK (or mktexpk) script. First of all, move the HBF files together with the bitmap font files to its final destination which has to be added to the variables $MISCFONTS (kpathsea version >= 3.3), or $T1FONTS (kpathsea > 2.6), or $DVIPSHEADERS (kpathsea <= 2.6), which can be either modified in texmf.cnf or set in the environment (please read the kpathsea info files how to do that). Now do the same with all `.cfg' files; the corresponding configuration variable is $HBF2GFINPUTS (kpathsea >= 3.2) or $TEXCONFIG (kpathsea < 3.2). Then, create a set of TFM files for the specified CJK bitmap font. This should be done with the hbf2gf configuration parameters `tfm_files yes' and `pk_files no' (to be modified in the `.cfg' files; see hbf2gf.dvi for a detailed description of all needed keywords). After calling the produced shell script the TFM files are installed. Note that if you change any hbf2gf parameters which alter the appearance of the font (the metrics, to be more exact) you must repeat this step so that TFM and PK files fit together. The previous step can be omitted in case you patch MakeTeXTFM or mktextfm too so that TFM files can be created on-the-fly. Please note further that in case you write a new hbf2gf configuration file, the name of that file must be the name stem of the CJK subfont (as defined in the appropriate FD file and the hbf2gf configuration file) plus `.cfg': Example: searched: gsfs1021.pk configuration file: gsfs10.cfg The final step for web2c 6.x or teTeX 0.4 is to edit texmf.cnf (the kpathsea configuration file, usually in /usr/local/lib/texmf/web2c) and change the two variables $PKFONTS.xdvi $PKFONTS by appending :$pkdir/hbf2gf to define an own `mode' for hbf2gf, similar to the modes `cx', `ljfour', etc. The TeX Directory Structure (TDS) standard suggests `modeless' for this name which is already defined in teTeX 1.0 and web2c 7.x. Example: PKFONTS.xdvi=.:$pkdir/$MAKETEX_MODE:$pkdir/gsftopk: $pkdir/ps2pk:$pkdir/hbf2gf PKFONTS=.:$TEXMF/fonts//pk/$MAKETEX_MODE:$pkdir/hbf2gf The line break above is given for convenience only and should not appear in the texmf.cnf file (no space before and after the `:'). [If you cannot become root, copy texmf.cnf into your home directory and do the modifications there; make sure that your personal config file is found in the search path first since web2c uses the first definition of each variable encountered.] If you use hbf2gf with two parameters (as in MakeTeXPK), only one GF file and one PL file is produced, and no batch file is created; the `pk_files' parameter is ignored. You can control with the switches -g and -p whether a GF or PL file is created at all. Using dvidrv.btm [emTeX for DOS and OS/2] ------------------------------------------- This batch file does the same as MakeTeXPK and mktexpk; it is a replacement for dvidrv.exe of emTeX which can handle ttf2pk, hbf2gf, and ps2pk additionally (the ps2pk part is untested yet; it uses ps2pkmfj of the 4allTeX distribution and was basically copied from a similar script, also part of 4allTeX). First of all, create and install a set of TFM files as described in the previous section. Then configure the following variables in dvidrv.btm: ps2pk ... set it to `yes' if you want to use this program ttf2pk ... ditto hbf2gf ... ditto pkdir ... the place where PK files created by ps2pk, ttf2pk, or hbf2gf should go to. dvidrv.btm adds `\modeless\XXXdpi' resp. `\modeless\dpiXXX' to this string (depending on the variables `pre_dpi' and `post_dpi') ttfonts ... where the TrueType fonts files reside ttfcfg ... where the auxiliary data files of ttf2pk reside hbfonts ... where the HBF files reside hbfcfg ... the place where the hbf2gf configuration files are The last four variables in the above list support trailing `!' and `!!' for recursive directory searching (see the dvidrv.doc of the emTeX package for details). Alternatively, you can set these variables in the environment; please note that no spaces are allowed before and after the equal sign, e.g., set foo=bar is OK, but set foo = bar fails. Rename dvidrv.exe to dvidrv.ori or something similar and copy dvidrv.btm to a directory in the path. Don't forget to update the DVIDRVFONTS and TEXTFM environment variables if necessary. Under OS/2 dvips calls mfjob or hbf2gf itself; under DOS it creates a batch file which must be called afterwards. Adjusting the font parameters ----------------------------- It is possible to convert bitmap fonts to PK files almost automatically. The HBF header file already has the entry `HBF_BITMAP_BOUNDING_BOX' which defines vertical and horizontal offsets (in pixels), but these values are not in all cases optimal for the desired target size. If you omit `x_offset' and `y_offset' in the CFG file, the third and fourth parameter of `HBF_BITMAP_BOUNDING_BOX' is used (except for rotated glyphs), scaled to design size (to say it with other words: x_offset and y_offset always apply to the design size to be synchronous with the TFM files). Don't confuse scaling and magnification: Scaling here means that you choose a (arbitrary) design size and compute scaling values (mag_x and mag_y; the parameter names are a bit misleading) which scales the bitmap to this particular design size at a certain (arbitrarily chosen) resolution (dpi_x and dpi_y). Magnification means that the scaled bitmap is then magnified to a certain target size while still using the font parameters (i.e., TFM file) of the design size. In the sample, you have a 56x56 bitmap font which is scaled to 14.4pt having a resolution of 300 dpi; here we compute the theoretical scaling value to reach the design size (14.4pt): 1 pt are 300 / 72.27 = 4.1511 pixel; 14.4 pt are 4.1511 x 14.4 = 59.78 pixel; thus the theoretical magnification value is 59.78 / 56 = 1.0675 . But especially for small sizes, this may be not the best value if the font should harmonize with, say, Knuth's Computer Modern fonts. I recommend to to compute, say, five PK fonts, then check the CJK font with different TeX fonts to see whether the offsets and/or the magnification value is good. The greater the design size the finer you can control the offsets---as an example you could use a design size of 30pt (nevertheless there is an arbitrary compile-time constant MAX_CHAR_SIZE which limits the maximal character size; default is 1023 pixels). Testing has shown that in the above example a magnification value of 1 is better than 1.07; additionally if you use this font at 14.4pt you get the original bitmap without any distortions introduced by scaling. If you have found optimal offsets, you can produce many different magnifications of the CJK font using the same set of TFM files in analogy to ordinary TeX fonts; as a simplification, we assume that PK files with a resolution of XXXdpi and a design size of 10pt have the extension `.XXXpk' (respectively come into a `XXXdpi' subdirectory)---this is the reason why in the above example for the 14.4pt design size with 300dpi a `432dpi' target directory has been used. Now we can use the following formula: your_target_size needed_dpi = your_horizontal_resolution * ---------------- 10.0 Example: Assuming that your printer has a resolution of 300 x 400dpi, and you want 14.4pt: 14.4 300 * ---- = 432 10.0 The vertical scaling value is 400 / 300 = 1.3333. Use these values now to call hbf2gf in METAFONT--like mode: hbf2gf hbf2gf.cfg 432 1.3333 Assuming you have created a complete set of hanja fonts (ksmj10) for 10pt design size, the proper entry in c60mj.fd would be \DeclareFontShape{C60}{mj}{m}{n}{<5><6><7><8><9><10> <10.95><12><14.4> <17.28><20.74><24.88> CJK * ksmj10}{} If you use the (modified) mktexpk to create PK fonts on demand it is sufficient to write \DeclareFontShape{C60}{mj}{m}{n}{<-> CJK * ksmj10}{} if one CJK bitmap font should cover the whole size range. Compiling hbf2gf ---------------- You need an ANSI C compiler. Under Unix-like systems say ./configure --prefix=/usr/local/TeX \ --with-kpathsea-include= \ --with-kpathsea-lib= make make install for a normal compilation and installation. Replace `/usr/local/TeX' with a path to your TeX distribution. [Note 1: Try to find `libkpathsea.*' on your system. Use this directory as the argument for --with-kpathsea-lib. Then try to find `kpathsea/tex-file.h' and use the parent directory of kpathsea as the argument for --with-kpathsea-include. This should work in most cases. If you can't find the library, you probably have a web2c package with statically linked binaries. This means that you have to get the web2c sources from CTAN, configure it with something like ./configure --prefix=/usr/local/TeX --datadir=/usr/local/TeX \ --enable-shared --disable-static according to your setup; then change to the kpathsea directory and say `make' and `make install' (Do the latter with caution not to overwrite original binaries like kpsewhich). It even works with the source tree from the TeX Live CD! You just have to add a proper --srcdir option to the configure script. Note 2: It seems that c-auto.h created during the kpathsea library compiling process won't be installed for some older web2c versions. You should add it manually, i.e., copy /kpathsea/c-auto.h to the location where the other kpathsea header files have been installed. Note 3: As a last resort or for testing purposes, you can even compile hbf2gf without any search library; a simple call to fopen() is used instead.] Use Makefile.gnu for emx + GNU make and say make -f Makefile.gnu to get a help screen with the possible options. [Note: It should work with djgpp too, but I haven't tested this.] If necessary, `touch' hbf2gf.c (in case you don't have ctangle) to made the time stamp of the file more recent; otherwise, the `make' program complains. Under some older SunOS versions, gcc (without the GNU C-library) has problems; if possible, install the GNU C-library. Otherwise you get a bunch of warning messages about missing prototypes which can be ignored. The only missing function is strtoul(). If your system has gdb or some other GNU utils, you are almost done. Search for the libiberty.a library (usually in /usr/local/lib), copy it into the hbf2gf subdir and link it with the other modules: LDFLAGS=-liberty ./configure ... If you don't have libiberty, replace strtoul() with strtol() in the hbf2gf.w (or hbf2gf.c) file. It was reported that on the NeXT an older version of gcc has difficulties to process the '%i' printf parameter correctly; simply replace all occurrences with '%d' (most notably in hbf.c). ---End of hbf2gf.txt---