diff options
Diffstat (limited to 'Build/source/texk/kpathsea/doc/kpathsea.info')
-rw-r--r-- | Build/source/texk/kpathsea/doc/kpathsea.info | 4017 |
1 files changed, 4017 insertions, 0 deletions
diff --git a/Build/source/texk/kpathsea/doc/kpathsea.info b/Build/source/texk/kpathsea/doc/kpathsea.info new file mode 100644 index 00000000000..66b0a4e2f90 --- /dev/null +++ b/Build/source/texk/kpathsea/doc/kpathsea.info @@ -0,0 +1,4017 @@ +This is kpathsea.info, produced by makeinfo version 5.1 from +kpathsea.texi. + +This file documents the Kpathsea library for path searching. + + Copyright (C) 1996-2021 Karl Berry & Olaf Weber. + + Permission is granted to make and distribute verbatim copies of this +manual provided the copyright notice and this permission notice are +preserved on all copies. + + Permission is granted to copy and distribute modified versions of +this manual under the conditions for verbatim copying, provided that the +entire resulting derived work is distributed under the terms of a +permission notice identical to this one. + + Permission is granted to copy and distribute translations of this +manual into another language, under the above conditions for modified +versions, except that this permission notice may be stated in a +translation approved by the TeX Users Group. +INFO-DIR-SECTION TeX +START-INFO-DIR-ENTRY +* Kpathsea: (kpathsea). File lookup along search paths. +* kpsewhich: (kpathsea)Invoking kpsewhich. TeX file searching. +* mktexfmt: (kpathsea)mktex scripts. Format (fmt/base/mem) generation. +* mktexlsr: (kpathsea)Filename database. Update ls-R. +* mktexmf: (kpathsea)mktex scripts. MF source generation. +* mktexpk: (kpathsea)mktex scripts. PK bitmap generation. +* mktextex: (kpathsea)mktex scripts. TeX source generation. +* mktextfm: (kpathsea)mktex scripts. TeX font metric generation. +END-INFO-DIR-ENTRY + + +File: kpathsea.info, Node: Top, Next: Introduction, Up: (dir) + +Kpathsea library +**************** + +This manual documents the Kpathsea library for path searching. It +corresponds to version 6.3.3, released in February 2021. + +* Menu: + +* Introduction:: Overview and history. + +* unixtex.ftp:: Obtaining TeX software. +* Security:: Who can write what files, etc. +* TeX directory structure:: Managing the horde of TeX input files. + +* Path searching:: How filename lookups work. +* TeX support:: Special support for TeX-related file lookups. + +* Programming:: How to use Kpathsea features in your program. + +* Reporting bugs:: Where and how to report bugs. +* Index:: General index. + + +File: kpathsea.info, Node: Introduction, Next: unixtex.ftp, Prev: Top, Up: Top + +1 Introduction +************** + +This manual corresponds to version 6.3.3 of the Kpathsea library, +released in February 2021. + + The library's fundamental purpose is to return a filename from a list +of directories specified by the user, similar to what shells do when +looking up program names to execute. + + The following software, all of which is maintained in parallel, uses +this library: + + * Dviljk (see the 'dvilj' man page) + * Dvipsk (*note (dvips)::) + * GNU font utilities (*note (fontu)::) + * Web2c (*note (web2c)::) + * Xdvik (see the 'xdvi' man page) + +Other software that we do not maintain also uses it. + + Kpathsea is now maintained as part of the TeX Live distribution +(<https://tug.org/texlive>), which includes several more Kpathsea-using +programs. For information on configuration, building, installing, and +more, *note (tlbuild)::. + + The library is still actively maintained. If you have comments or +suggestions, please send along (*note Reporting bugs::). + + The Kpathsea library is distributed under the GNU Library General +Public License (LGPL), version 2.1 or (at your option) any later +version. In short, this means if you write a program using the library, +you must (offer to) distribute the source to the library, along with any +changes you have made, and allow anyone to modify the library source and +distribute their modifications. It does not mean you have to distribute +the source to your program using the library, although we hope you will. +See accompanying files for the text of the GNU licenses, or +<https://gnu.org/licenses>. + + If you know enough about TeX to be reading this manual, then you (or +your institution) should consider joining the TeX Users Group (if you're +already a member, thanks!). TUG produces the periodical 'TUGboat', +sponsors an annual meeting and publishes the proceedings, and arranges +courses on TeX for all levels of users throughout the world. See +<https://tug.org> for information. + +* Menu: + +* History:: + + +File: kpathsea.info, Node: History, Up: Introduction + +1.1 History +=========== + +This section is for those people who are curious about how the library +came about. If you like to read historical accounts of software, we +urge you to seek out the GNU Autoconf manual and the "Errors of TeX" +paper by Don Knuth, published in his book 'Digital Typography', among +other places. + + [Karl writes.] My first ChangeLog entry for Web2c seems to be +February 1990, but I may have done some work before then. In any case, +Tim Morgan and I were jointly maintaining it for a time. (I should +mention here that Tim had made Web2c into a real distribution long +before I had ever used it or even heard of it, and Tom Rokicki did the +original implementation. When I started, I was using 'pxp' and 'pc' on +VAX 11/750's and the hot new Sun 2 machines.) + + It must have been later in 1990 and 1991 that I started working on +'TeX for the Impatient'. Dvips, Xdvi, Web2c, and the GNU fontutils +(which I was also writing at the time) all used different environment +variables, and, more importantly, had different bugs in their path +searching. This became extremely painful, as I was stressing everything +to the limit working on the book. I also desperately wanted to +implement subdirectory searching, since I couldn't stand putting +everything in one big directory, and also couldn't stand having to +explicitly specify 'cm', 'pandora', ... in a path. + + In the first incarnation, I just hacked separately on each +program--that was the original subdirectory searching code in both Xdvi +and Dvips. That is, I tried to go with the flow in each program, rather +than changing the program's calling sequences to conform to new +routines. + + Then, as bugs inevitably appeared, I found I was fixing the same +thing three times (Web2c and fontutils were already sharing code, since +I maintained both of those--there was no Dvipsk or Xdvik or Dviljk at +this point). After a while, I finally started sharing source files. +They weren't yet a library, though. I just kept things up to date with +shell scripts. (I was developing on a 386 running ISC 2.2 at the time, +and so didn't have symbolic links. An awful experience.) + + The ChangeLogs for Xdvik and Dvipsk record initial releases of those +distributions in May and June 1992. I think it was because I was tired +of the different configuration strategies of each program, not so much +because of the path searching. Autoconf was being developed by David +MacKenzie and others, and I was adapting it to TeX and friends. + + I started to make a separate library that other programs could link +with on my birthday in April 1993, according to the ChangeLog. I don't +remember exactly why I finally took the time to make it a separate +library; a conversation with david zuhn initiated it. Just seemed like +it was time. + + Dviljk got started in March 1994 after I bought a Laserjet 4. +(Kpathsea work got suspended while Norm Walsh and I, with Gustaf +Neumann's help, implemented a way for TeX to get at all those neat +builtin LJ4 fonts ... such a treat to have something to typeset in +besides Palatino!) + + By spring of 1995, I had implemented just about all the +path-searching features in Kpathsea that I plan to, driven beyond my +initial goals by Thomas Esser and others. I then started to integrate +Web2c with Kpathsea. After the release of a stable Web2c, I hope to be +able to stop development, and turn most of my attention back to making +fonts for GNU. (Always assuming Micros**t hasn't completely obliterated +Unix by then, or that software patents haven't stopped software +development by anybody smaller than a company with a +million-dollar-a-year legal budget. Which is actually what I think is +likely to happen, but that's another story...) + + [Olaf writes.] At the end of 1997, Unix is still alive and kicking, +individuals still develop software, and Web2c development still +continues. Karl had been looking for some time for someone to take up +part of the burden, and I volunteered. + + [Karl writes again.] Indeed, time goes on. As of 2006 or so, Olaf's +available time for Kpathsea was reduced, and I started taking overall +care of it again, although I did not do any significant new development. +In 2009, Taco Hoekwater implemented a major rearrangement to make the +library suitable for use within the MetaPost library (*note Programming +overview::). Also, for some years now, Peter Breitenlohner has made +many improvements to the infrastructure and kept it up-to-date with +respect to the overall TeX Live build, where Kpathsea is now maintained. + + +File: kpathsea.info, Node: unixtex.ftp, Next: Security, Prev: Introduction, Up: Top + +2 'unixtex.ftp': Obtaining TeX +****************************** + +This is <ftp://tug.org/tex/unixtex.ftp>, a.k.a. +<https://tug.org/unixtex.ftp>, last updated 29 February 2020. Email +<tex-k@tug.org> with comments or questions. + + The principal free TeX distribution for Unix-like systems is TeX +Live, on the web at <http://tug.org/texlive>. The pages there describe +many ways to acquire and/or build TeX, over the Internet or on physical +media, both the sources and precompiled binaries for many systems, +either standalone or as part of various operating system distributions. + + Web2c, Kpathsea, Dvips, and Dviljk, among others, are no longer +released as a separate packages. Their sources are now maintained as +part of TeX Live. + + The host ftp.cs.stanford.edu is the original source for the files for +which Donald Knuth is directly responsible: 'tex.web', 'plain.tex', etc. +However, unless you want to undertake the project of building your TeX +system from scratch, it is more reliable and less work to retrieve these +files as part of a larger package. + + In any case, the Stanford ftp site is not the canonical source for +anything except what was created as part of Knuth's original TeX, so do +not rely on any other files available there being up-to-date. The best +place to check for up-to-date files is CTAN (the Comprehensive TeX +Archive Network), <https://ctan.org>. + + +File: kpathsea.info, Node: Security, Next: TeX directory structure, Prev: unixtex.ftp, Up: Top + +3 Security +********** + +None of the programs in the TeX system require any special system +privileges, so there's no first-level security concern of people gaining +illegitimate root access. + + A TeX document, however, can write to arbitrary files, e.g., +'~/.rhosts', and thus an unwitting user who runs TeX on a random +document is vulnerable to a trojan horse attack. This loophole is +closed by default, but you can be permissive if you so desire in +'texmf.cnf'. *Note (web2c)tex invocation::. MetaPost has the same +issue. + + Dvips, Xdvi, and TeX can also execute shell commands under some +circumstances. To disable this, see the '-R' option in *note +(dvips)Option details::, the xdvi man page, and *note (web2c)tex +invocation::, respectively. + + Another security issue arises because it's very useful--almost +necessary--to make arbitrary fonts on user demand with 'mktexpk' and +friends. Where do these files get installed? By default, the 'mktexpk' +distributed with Kpathsea assumes a world-writable '/var/tmp' directory; +this is a simple and convenient approach, but it may not suit your +situation because it means that a local cache of fonts is created on +every machine. + + To avoid this duplication, many people consider a shared, globally +writable font tree desirable, in spite of the potential security +problems. To do this you should change the value of 'VARTEXFONTS' in +'texmf.cnf' to refer to some globally known directory. *Note mktex +configuration::. + + The first restriction you can apply is to make newly-created +directories under 'texmf' be append-only with an option in 'mktex.cnf'. +*Note mktex configuration::. + + Another approach is to establish a group (or user) for TeX files, +make the 'texmf' tree writable only to that group (or user), and make +'mktexpk' et al. setgid to that group (or setuid to that user). Then +users must invoke the scripts to install things. (If you're worried +about the inevitable security holes in scripts, then you could write a C +wrapper to exec the script.) + + The 'mktex...' scripts install files with the same read and write +permissions as the directory they are installed in. The executable, +sgid, suid, and sticky bits are always cleared. + + Any directories created by the 'mktex...' scripts have the same +permissions as their parent directory, unless the 'appendonlydir' +feature is used, in which case the sticky bit is always set. + + +File: kpathsea.info, Node: TeX directory structure, Next: Path searching, Prev: Security, Up: Top + +4 TeX directory structure +************************* + +This section describes the default installation hierarchy of the +distribution. It conforms to both the GNU coding standards and the TeX +directory structure (TDS) standard. For rationale and further +explanation, please see those documents. The GNU document is available +from <https://gnu.org/prep/standards>. The TDS document is available +from <http://mirror.ctan.org/tds> (*note unixtex.ftp::). + + In short, here is a skeleton of the default directory structure, +extracted from the TDS document: + + PREFIX/ installation root ('/usr/local' by default) + bin/ executables + man/ man pages + include/ C header files + info/ GNU info files + lib/ libraries ('libkpathsea.*') + share/ architecture-independent files + texmf/ TDS root + bibtex/ BibTeX input files + bib/ BibTeX databases + base/ base distribution (e.g., 'xampl.bib') + misc/ single-file databases + PKG/ name of a package + bst/ BibTeX style files + base/ base distribution (e.g., 'plain.bst', 'acm.bst') + misc/ single-file styles + PKG/ name of a package + doc/ additional documentation + dvips/ '.pro', '.ps', 'psfonts.map' + fonts/ font-related files + TYPE/ file type (e.g., 'tfm', 'pk') + MODE/ type of output device (types 'pk' and 'gf' only) + SUPPLIER/ name of a font supplier (e.g., 'public') + TYPEFACE/ name of a typeface (e.g., 'cm') + dpiNNN/ font resolution (types 'pk' and 'gf' only) + metafont/ Metafont (non-font) input files + base/ base distribution (e.g., 'plain.mf') + misc/ single-file packages (e.g., 'modes.mf') + PKG/ name of a package (e.g., 'mfpic') + metapost/ MetaPost input files + base/ base distribution (e.g., 'plain.mp') + misc/ single-file packages + PKG/ name of a package + support/ support files for MetaPost-related utilities (e.g., 'trfonts.map') + mft/ 'MFT' inputs (e.g., 'plain.mft') + tex/ TeX input files + FORMAT/ name of a format (e.g., 'plain') + base/ base distribution for FORMAT (e.g., 'plain.tex') + misc/ single-file packages (e.g., 'webmac.tex') + local/ local additions to or local configuration files for FORMAT + PKG/ name of a package (e.g., 'graphics', 'mfnfss') + generic/ format-independent packages + hyphen/ hyphenation patterns (e.g., 'hyphen.tex') + images/ image input files (e.g., Encapsulated PostScript) + misc/ single-file format-independent packages (e.g., 'null.tex'). + PKG/ name of a package (e.g., 'babel') + web2c/ implementation-dependent files ('.pool', '.fmt', 'texmf.cnf', etc.) + + Some concrete examples for most file types: + + /usr/local/bin/tex + /usr/local/man/man1/xdvi.1 + /usr/local/info/kpathsea.info + /usr/local/lib/libkpathsea.a + /usr/local/share/texmf/bibtex/bst/base/plain.bst + /usr/local/share/texmf/fonts/pk/ljfour/public/cm/cmr10.600pk + /usr/local/share/texmf/fonts/source/public/pandora/pnr10.mf + /usr/local/share/texmf/fonts/tfm/public/cm/cmr10.tfm + /usr/local/share/texmf/fonts/type1/adobe/utopia/putr.pfa + /usr/local/share/texmf/metafont/base/plain.mf + /usr/local/share/texmf/metapost/base/plain.mp + /usr/local/share/texmf/tex/plain/base/plain.tex + /usr/local/share/texmf/tex/generic/hyphen/hyphen.tex + /usr/local/share/texmf/web2c/tex.pool + /usr/local/share/texmf/web2c/tex.fmt + /usr/local/share/texmf/web2c/texmf.cnf + + +File: kpathsea.info, Node: Path searching, Next: TeX support, Prev: TeX directory structure, Up: Top + +5 Path searching +**************** + +This chapter describes the generic path searching mechanism Kpathsea +provides. For information about searching for particular file types +(e.g., TeX fonts), see the next chapter. + + This section, with minor differences, has been translated into +several other languages (Chinese, Spanish, Russian, Japanese, French, +German, ...) as part of the TeX Live guide; see +<https://tug.org/texlive/doc.html> for links. + +* Menu: + +* Searching overview:: Basic scheme for searching. +* Path sources:: Where search paths can be defined. +* Path expansion:: Special constructs in search paths. +* Casefolding search:: Fallback to case-insensitive search. +* Filename database:: Using an externally-built list to search. +* Invoking kpsewhich:: Standalone path lookup. + + +File: kpathsea.info, Node: Searching overview, Next: Path sources, Up: Path searching + +5.1 Searching overview +====================== + +A "search path" is a colon-separated list of "path elements", which are +directory names with a few extra frills. A search path can come from (a +combination of) many sources; see below. To look up a file 'foo' along +a path '.:/dir', Kpathsea checks each element of the path in turn: first +'./foo', then '/dir/foo', returning the first match (or possibly all +matches). + + The "colon" and "slash" mentioned here aren't necessarily ':' and '/' +on non-Unix systems. Kpathsea tries to adapt to other operating +systems' conventions. + + To check a particular path element E, Kpathsea first sees if a +prebuilt database (*note Filename database::) applies to E, i.e., if the +database is in a directory that is a prefix of E. If so, the path +specification is matched against the contents of the database. + + If the database does not exist, or does not apply to this path +element, or contains no matches, the filesystem is searched (if this was +not forbidden by the specification with '!!' and if the file being +searched for must exist). Kpathsea constructs the list of directories +that correspond to this path element, and then checks in each for the +file being searched for. (To help speed future lookups of files in the +same directory, the directory in which a file is found is floated to the +top of the directory list.) + + The "file must exist" condition comes into play with VF files and +input files read by the TeX '\openin' command. These files might very +well not exist (consider 'cmr10.vf'), and so it would be wrong to search +the disk for them. Therefore, if you fail to update 'ls-R' when you +install a new VF file, it will not be found. + + Each path element is checked in turn: first the database, then the +disk. If a match is found, the search stops and the result is returned +(unless the search explicitly requested all matches). This avoids +possibly-expensive processing of path specifications that are never +needed on a particular run. + + On Unix-like systems, if no match is found by any of the above, and +the path element allows checking the filesystem (per the above), a final +check is made for a case-insensitive match. Thus, looking for a name +like './FooBar.TeX' will match a file './foobar.tex', and vice versa. +This is not done on Windows. *Note Casefolding search::. + + Although the simplest and most common path element is a directory +name, Kpathsea supports additional features in search paths: layered +default values, environment variable names, config file values, users' +home directories, and recursive subdirectory searching. Thus, we say +that Kpathsea "expands" a path element, meaning transforming all the +magic specifications into the basic directory name or names. This +process is described in the sections below. It happens in the same +order as the sections. + + Exception to all of the above: If the filename being searched for is +absolute or explicitly relative, i.e., starts with '/' or './' or '../', +Kpathsea simply checks if that file exists, with a fallback to a +casefolding match if needed and enabled, as described above. + + Ordinarily, if Kpathsea tries to access a file or directory that +cannot be read, it gives a warning. This is so you will be alerted to +directories or files that accidentally lack any read permission (for +example, a 'lost+found' directory). If you prefer not to see these +warnings, include the value 'readable' in the 'TEX_HUSH' environment +variable or config file value. + + This generic path searching algorithm is implemented in +'kpathsea/pathsearch.c'. It is employed by a higher-level algorithm +when searching for a file of a particular type (*note File lookup::, and +*note Glyph lookup::). + + +File: kpathsea.info, Node: Path sources, Next: Path expansion, Prev: Searching overview, Up: Path searching + +5.2 Path sources +================ + +A search path or other configuration value can come from many sources. +In the order in which Kpathsea looks for them: + + 1. A command-line option such as '--cnf-line', available in + 'kpsewhich' and most TeX engines. *Note Path searching options::. + + A user-set environment variable, e.g., 'TEXINPUTS'. Environment + variables with an underscore and the program name appended + override; for example, 'TEXINPUTS_latex' overrides 'TEXINPUTS' if + the program being run is named 'latex'. + + 2. A program-specific configuration file, e.g., an 'S /a:/b' line in + Dvips' 'config.ps' (*note (dvips)Config files::). + + 3. A line in a Kpathsea configuration file 'texmf.cnf', e.g., + 'TEXINPUTS=/c:/d' (see below). + + 4. The compile-time default (specified in 'kpathsea/paths.h'). + + You can see each of these values for a given search path by using the +debugging options (*note Debugging::). + + These sources may be combined via default expansion (*note Default +expansion::). + +* Menu: + +* Config files:: Kpathsea's runtime config files (texmf.cnf). + + +File: kpathsea.info, Node: Config files, Up: Path sources + +5.2.1 Config files +------------------ + +As mentioned above, Kpathsea reads "runtime configuration files" named +'texmf.cnf' for search path and other definitions. The search path used +to look for these configuration files is named 'TEXMFCNF', and is +constructed in the usual way, as described above, except that +configuration files cannot be used to define the path, naturally; also, +an 'ls-R' database is not used to search for them. + + Kpathsea reads _all_ 'texmf.cnf' files in the search path, not just +the first one found; definitions in earlier files override those in +later files. Thus, if the search path is '.:$TEXMF', values from +'./texmf.cnf' override those from '$TEXMF/texmf.cnf'. + + If Kpathsea cannot find any 'texmf.cnf' file, it reports a warning +including all the directories it checked. If you don't want to see this +warning, set the environment variable 'KPATHSEA_WARNING' to the single +character '0' (zero, not oh). + + While (or instead of) reading this description, you may find it +helpful to look at the distributed 'texmf.cnf', which uses or at least +mentions most features. The format of 'texmf.cnf' files follows: + + * Comments start with '%', either at the beginning of a line or + preceded by whitespace, and continue to the end of the line. That + is, similar to most shells, a '%' in the "middle" of a value does + not start a comment. Examples: + + % this is a comment + var = a%b % but the value of var will be "a%b" + + * Blank lines are ignored. + + * A '\' at the end of a line acts as a continuation character, i.e., + the next line is appended. Whitespace at the beginning of + continuation lines is not ignored. + + * Each remaining line will look like: + + VARIABLE [. PROGNAME] [=] VALUE + + where the '=' and surrounding whitespace is optional. + + * The VARIABLE name may contain any character other than whitespace, + '=', or '.', but sticking to 'A-Za-z_' is safest. + + * If '.PROGNAME' is present (preceding spaces are ignored), the + definition only applies if the program that is running is named + (i.e., the last component of 'argv[0]' is) PROGNAME or + 'PROGNAME.{exe,bat,cmd,...}'. Most notably, this allows different + flavors of TeX to have different search paths. The PROGNAME value + is used literally, without variable or other expansions. + + * Considered as strings, VALUE may contain any character. However, + in practice most 'texmf.cnf' values are related to path expansion, + and since various special characters are used in expansion, such as + braces and commas, they cannot be used in directory names. + + The '$VAR.PROG' feature is not available on the right-hand side; + instead, you must use an additional variable (see below for + example). + + A ';' in VALUE is translated to ':' if running under Unix, in order + to have a single 'texmf.cnf' that can support both Unix and Windows + systems. This translation happens with any value, not just search + paths, but fortunately in practice ';' is not needed in other + values. + + * All definitions are read before anything is expanded, so you can + use variables before they are defined (like Make, unlike most other + programs). + +Here is a configuration file fragment illustrating most of these points: + + % TeX input files -- i.e., anything to be found by \input or \openin ... + latex209_inputs = .:$TEXMF/tex/latex209//:$TEXMF/tex// + latex2e_inputs = .:$TEXMF/tex/latex//:$TEXMF/tex// + TEXINPUTS = .:$TEXMF/tex// + TEXINPUTS.latex209 = $latex209_inputs + TEXINPUTS.latex2e = $latex2e_inputs + TEXINPUTS.latex = $latex2e_inputs + + This format has some similarity to Bourne shell scripts--change the +comment character to '#', disallow spaces around the '=', and get rid of +the '.NAME' convention, and it could be run through the shell. However, +there seemed little advantage in this, since all the information would +have to passed back to Kpathsea and parsed there anyway, since the 'sh' +process couldn't affect its parent's environment. + + The combination of spaces being ignored before the '.' of a program +name qualifer and the optional '=' for the assignment has an unexpected +consequence: if the value begins with a literal '.' and the '=' is +omitted, the intended value is interpreted as a program name. For +example, a line 'var .;/some/path' is taken as an empty value for 'var' +running under the program named ';/some/path'. To diagnose this, +Kpathsea warns if the program name contains a path separator or other +special character. The simplest way to avoid the problem is to use the +'='. + + Exactly when a character will be considered special or act as itself +depends on the context in which it is used. The rules are inherent in +the multiple levels of interpretation of the configuration (parsing, +expansion, search, ...) and so cannot be concisely stated, +unfortunately. There is no general escape mechanism; in particular, '\' +is not an "escape character" in 'texmf.cnf' files. When it comes +choosing directory names for installation, it is safest to avoid them +all. + + The implementation of all this is in 'kpathsea/cnf.c'. + + +File: kpathsea.info, Node: Path expansion, Next: Casefolding search, Prev: Path sources, Up: Path searching + +5.3 Path expansion +================== + +Kpathsea recognizes certain special characters and constructions in +search paths, similar to that in shells. As a general example: +'~$USER/{foo,bar}//baz' expands to all subdirectories under directories +'foo' and 'bar' in $USER's home directory that contain a directory or +file 'baz'. + + These expansions are explained in the sections below. + +* Menu: + +* Default expansion:: a: or :a or a::b expands to a default. +* Variable expansion:: $foo and ${foo} expand to environment values. +* Tilde expansion:: ~ and ~user expand to home directories. +* Brace expansion:: a{foo,bar}b expands to afoob abarb. +* KPSE_DOT expansion:: . is replaced with $KPSE_DOT if it is defined. +* Subdirectory expansion:: a// and a//b recursively expand to subdirs. + + +File: kpathsea.info, Node: Default expansion, Next: Variable expansion, Up: Path expansion + +5.3.1 Default expansion +----------------------- + +If the highest-priority search path (*note Path sources::) contains an +"extra colon" (i.e., leading, trailing, or doubled), Kpathsea inserts at +that point the next-highest-priority search path that is defined. If +that inserted path has an extra colon, the same happens with the +next-highest. (An extra colon in the compile-time default value has +unpredictable results, so installers beware.) + + For example, given an environment variable setting + + setenv TEXINPUTS /home/karl: + +and a 'TEXINPUTS' value from 'texmf.cnf' of + + .:$TEXMF//tex + +then the final value used for searching will be: + + /home/karl:.:$TEXMF//tex + + Put another way, default expansion works on "formats" (search paths), +and not directly on environment variables. Example, showing the +trailing ':' ignored in the first case and expanded in the second: + + $ env TTFONTS=/tmp: kpsewhich --expand-path '$TTFONTS' + /tmp + $ env TTFONTS=/tmp: kpsewhich --show-path=.ttf + /tmp:.:/home/olaf/texmf/fonts/truetype//:... + + Since Kpathsea looks for multiple configuration files, it would be +natural to expect that (for example) an extra colon in './texmf.cnf' +would expand to the path in '$TEXMF/texmf.cnf'. Or, with Dvips' +configuration files, that an extra colon in 'config.$PRINTER' would +expand to the path in 'config.ps'. This doesn't happen. It's not clear +this would be desirable in all cases, and trying to devise a way to +specify the path to which the extra colon should expand seemed truly +baroque. + + Technicality: Since it would be useless to insert the default value +in more than one place, Kpathsea changes only one extra ':' and leaves +any others in place (they will eventually be ignored). Kpathsea checks +first for a leading ':', then a trailing ':', then a doubled ':'. + + You can trace this by debugging "paths" (*note Debugging::). Default +expansion is implemented in the source file 'kpathsea/kdefault.c'. + + +File: kpathsea.info, Node: Variable expansion, Next: Tilde expansion, Prev: Default expansion, Up: Path expansion + +5.3.2 Variable expansion +------------------------ + +'$foo' or '${foo}' in a path element is replaced by (1) the value of an +environment variable 'foo' (if defined); (2) the value of 'foo' from +'texmf.cnf' (if defined); (3) the empty string. + + If the character after the '$' is alphanumeric or '_', the variable +name consists of all consecutive such characters. If the character +after the '$' is a '{', the variable name consists of everything up to +the next '}' (braces may not be nested around variable names). +Otherwise, Kpathsea gives a warning and ignores the '$' and its +following character. + + You must quote the $'s and braces as necessary for your shell. +_Shell_ variable values cannot be seen by Kpathsea, i.e., ones defined +by 'set' in C shells and without 'export' in Bourne shells. + + For example, given + setenv tex /home/texmf + setenv TEXINPUTS .:$tex:${tex}prev +the final 'TEXINPUTS' path is the three directories: + .:/home/texmf:/home/texmfprev + + The '.PROGNAME' suffix on variables and '_PROGNAME' on environment +variable names are not implemented for general variable expansions. +These are only recognized when search paths are initialized (*note Path +sources::). + + Variable expansion is implemented in the source file +'kpathsea/variable.c'. + + +File: kpathsea.info, Node: Tilde expansion, Next: Brace expansion, Prev: Variable expansion, Up: Path expansion + +5.3.3 Tilde expansion +--------------------- + +A leading '~' in a path element is replaced by the value of the +environment variable 'HOME', or '.' if 'HOME' is not set. On Windows, +the environment variable 'USERPROFILE' is checked instead of 'HOME'. + + A leading '~USER' in a path element is replaced by USER's home +directory from the system 'passwd' database. + + For example, + setenv TEXINPUTS ~/mymacros: + +will prepend a directory 'mymacros' in your home directory to the +default path. + + As a special case, if a home directory ends in '/', the trailing +slash is dropped, to avoid inadvertently creating a '//' construct in +the path. For example, if the home directory of the user 'root' is '/', +the path element '~root/mymacros' expands to just '/mymacros', not +'//mymacros'. + + Tilde expansion is implemented in the source file 'kpathsea/tilde.c'. + + +File: kpathsea.info, Node: Brace expansion, Next: KPSE_DOT expansion, Prev: Tilde expansion, Up: Path expansion + +5.3.4 Brace expansion +--------------------- + +'x{A,B}y' expands to 'xAy:xBy'. For example: + + foo/{1,2}/baz + +expands to 'foo/1/baz:foo/2/baz'. ':' is the path separator on the +current system; e.g., on a Windows system, it's ';'. + + Braces can be nested; for example, 'x{A,B{1,2}}y' expands to +'xAy:xB1y:xB2y'. + + Multiple non-nested braces are expanded from right to left; for +example, 'x{A,B}{1,2}y' expands to 'x{A,B}1y:x{A,B}2y', which expands to +'xA1y:xB1y:xA2y:xB2y'. + + This feature can be used to implement multiple TeX hierarchies, by +assigning a brace list to '$TEXMF', as mentioned in 'texmf.in'. + + You can also use the path separator instead of the comma. The last +example could have been written 'x{A:B}{1:2}y' (on Unix). + + Brace expansion is implemented in the source file +'kpathsea/expand.c'. + + +File: kpathsea.info, Node: KPSE_DOT expansion, Next: Subdirectory expansion, Prev: Brace expansion, Up: Path expansion + +5.3.5 'KPSE_DOT' expansion +-------------------------- + +When 'KPSE_DOT' is defined in the environment, it names a directory that +should be considered the current directory for the purpose of looking up +files in the search paths. This feature is needed by the 'mktex...' +scripts *note mktex scripts::, because these change the working +directory. You should not ever define it yourself. + + +File: kpathsea.info, Node: Subdirectory expansion, Prev: KPSE_DOT expansion, Up: Path expansion + +5.3.6 Subdirectory expansion +---------------------------- + +Two or more consecutive slashes in a path element following a directory +D is replaced by all subdirectories of D: first those subdirectories +directly under D, then the subsubdirectories under those, and so on. At +each level, the order in which the directories are searched is +unspecified. (It's "directory order", and definitely not alphabetical.) + + If you specify any filename components after the '//', only +subdirectories which match those components are included. For example, +'/a//b' would expand into directories '/a/1/b', '/a/2/b', '/a/1/1/b', +and so on, but not '/a/b/c' or '/a/1'. + + You can include multiple '//' constructs in the path. + + '//' at the beginning of a path is ignored; you didn't really want to +search every directory on the system, did you? + + I should mention one related implementation trick, which I took from +GNU find. Matthew Farwell suggested it, and David MacKenzie implemented +it. + + The trick is that in every real Unix implementation (as opposed to +the POSIX specification), a directory which contains no subdirectories +will have exactly two links (namely, one for '.' and one for '..'). +That is to say, the 'st_nlink' field in the 'stat' structure will be +two. Thus, we don't have to stat everything in the bottom-level (leaf) +directories--we can just check 'st_nlink', notice it's two, and do no +more work. + + But if you have a directory that contains a single subdirectory and +500 regular files, 'st_nlink' will be 3, and Kpathsea has to stat every +one of those 501 entries. Therein lies slowness. + + You can disable the trick by undefining 'ST_NLINK_TRICK' in +'kpathsea/config.h'. (It is undefined by default except under Unix.) + + Unfortunately, in some cases files in leaf directories are 'stat''d: +if the path specification is, say, '$TEXMF/fonts//pk//', then files in a +subdirectory '.../pk', even if it is a leaf, are checked. The reason +cannot be explained without reference to the implementation, so read +'kpathsea/elt-dirs.c' (search for 'may descend') if you are curious. +And if you find a way to solve the problem, please let me know. + + Subdirectory expansion is implemented in the source file +'kpathsea/elt-dirs.c'. + + +File: kpathsea.info, Node: Casefolding search, Next: Filename database, Prev: Path expansion, Up: Path searching + +5.4 Casefolding search +====================== + +In Kpathsea version 6.3.0 (released with TeX Live 2018), a new fallback +search was implemented on Unix-like systems, including Macs: for each +path element in turn, if no match is found by the normal search, and the +path element allows for checking the filesystem, a second check is made +for a case-insensitive match. + + This is enabled at compile-time on Unix systems, and enabled at +runtime by setting the configuration variable 'texmf_casefold_search', +to a true value, e.g., '1'; this is done by default in TeX Live. + +* Menu: + +* Rationale: Casefolding rationale. +* Examples: Casefolding examples. + + +File: kpathsea.info, Node: Casefolding rationale, Next: Casefolding examples, Up: Casefolding search + +5.4.1 Casefolding rationale +--------------------------- + +The purpose of the fallback casefolding search is to ease moving complex +documents between case-insensitive (file)systems and case-sensitive +ones. In particular, Apple decided to make the default filesystem on +Macs be case-insensitive some years ago, and this has exacerbated a +problem of people creating documents that use, say, an image under the +name 'foo.jpg', while the actual file is named 'foo.JPG' or 'Foo.jpg'. +It works on the Mac but if the document is transferred and run on a +standard case-sensitive Unix (file)system, the file can't be found, due +only to differences in case. + + This same problematic scenario has always existed on Windows, but for +whatever reason, it has become much more common since Apple also went to +a case-insensitive filesystem. Hence the relatively late change to the +Kpathsea behavior. + + The fallback case-insensitive search is omitted at compile-time on +Windows, where (for practical purposes) all file names are +case-insensitive at the kernel level, and so the normal search will +already have definitively matched or not. Therefore, search results in +unusual cases can be different on Windows and Unix--but this has always +been true. + + +File: kpathsea.info, Node: Casefolding examples, Prev: Casefolding rationale, Up: Casefolding search + +5.4.2 Casefolding examples +-------------------------- + +The casefolding implementation prefers exact matches to casefolded +matches within a given path element, so as to retain most compatibility. +Backward compatibility is not perfect, however, as a casefolded match +may be found in an earlier path element than an exact match was +previously found (see example #4 below). Still, preferring the match in +the earlier element seemed potentially less confusing than otherwise, +and is in fact consistent with past behavior on Windows. Since case +mismatches are rare to begin with, and name collisions with respect only +to case thus even more rare, the hope is that it will not cause +difficulties in practice. + + If it's desirable in a given situation to have the exact same search +behavior as previously, that can be accomplished by setting the +configuration variable 'texmf_casefold_search' to '0' (*note Path +sources::). + + Some examples to illustrate the new behavior follow. + + Example #1: suppose the file './foobar.tex' exists. Now, searching +for './FooBar.TeX' (or any other case variation) will succeed, returning +'./foobar.tex'--the name as stored on disk. In previous releases, or if +'texmf_casefold_search' is false, the search would fail. + + Example #2: suppose we are using a case-sensitive (file)system, and +the search path is '.:/somedir', and the files './foobar.tex' and +'/somedir/FooBar.TeX' both exist. Both now and previously, searching +for 'foobar.tex' returns './foobar.tex'. However, searching for +'FooBar.TeX' now returns './foobar.tex' instead of +'/somedir/FooBar.TeX'; this is the incompatibility mentioned above. +Also (as expected), searching for 'FOOBAR.TEX' (or whatever variation) +will now return './foobar.tex', whereas before it would fail. Searching +for all ('kpsewhich --all') 'foobar.tex' will return both matches. + + Example #3: same as example #2, but on a case-insensitive +(file)system: both now and previously, searching for 'FooBar.TeX' +returns './foobar.tex', since the system considers that a match. The +Kpathsea casefolding never comes into play. + + Example #4: if we have (on a case-sensitive system) both +'./foobar.tex' and './FOOBAR.TEX', searching with the exact case returns +that exact match, now and previously. Searching for 'FooBar.tex' will +now return one or the other (chosen arbitrarily), rather than failing. +Perhaps unexpectedly, searching for all 'foobar.tex' or 'FooBar.tex' +will also return only one or the other, not both (see more below). + + Example #5: the font file 'STIX-Regular.otf' is included in TeX Live +in the system directory 'texmf-dist/fonts/opentype/public/stix'. +Because Kpathsea never searches the disk in the big system directory, +the casefolding is not done, and a search for 'stix-regular.otf' will +fail (on case-sensitive systems), as it always has. + + The caveat about not searching the disk amounts to saying that +casefolding does not happen in the trees specified with '!!' (*note +ls-R::), that is, where only database ('ls-R') searching is done. In +TeX Live, that is the 'texmf-local' and 'texmf-dist' trees (also +'$TEXMFSYSCONFIG' and '$TEXMFSYSVAR', but those are rarely noticed). +The rationale for this is that in practice, case mangling happens with +user-created files, not with packages distributed as part of the TeX +system. + + One more caveat: the purpose of 'kpsewhich' is to exercise the path +searching in Kpathsea as it is actually done. Therefore, as shown +above, 'kpsewhich --all' will not return all matches regardless of case +within a given path element. If you want to find all matches in all +directories, 'find' is the best tool, although the setup takes a couple +steps: + + kpsewhich -show-path=tex >/tmp/texpath # search path specification + kpsewhich -expand-path="`cat /tmp/texpath`" >/tmp/texdirs # all dirs + tr ':' '\n' </tmp/texdirs >/tmp/texdirlist # colons to newlines + find `cat /tmp/texdirlist` -iname somefile.tex -print </tmp/texdirlist + + Sorry that it's annoyingly lengthy, but implementing this inside +Kpathsea would be a lot of error-prone trouble for something that is +only useful for debugging. If your 'find' does not support '-iname', +you can get GNU Find from <https://gnu.org/software/findutils>. + + The casefolding search is implemented in the source file +'kpathsea/pathsearch.c'. Two implementation points: + + * Kpathsea never tries to check if a given directory resides on a + case-insensitive filesystem, because there is no efficient and + portable way to do so. All it does is try to see if a potential + file name is a readable normal file (with, usually, the 'access' + system call). + + * Kpathsea does not do any case-insensitive matching of the + directories along the path. It's not going to find + '/Some/Random/file.tex' when looking for '/some/random/file.tex'. + The casefolding only happens with the elements of the leaf + directory. + + +File: kpathsea.info, Node: Filename database, Next: Invoking kpsewhich, Prev: Casefolding search, Up: Path searching + +5.5 Filename database ('ls-R') +============================== + +Kpathsea goes to some lengths to minimize disk accesses for searches +(*note Subdirectory expansion::). Nevertheless, in practice searching +every possible directory in typical TeX installations takes an +excessively long time. + + Therefore, Kpathsea can use an externally-built "filename database" +file named 'ls-R' that maps files to directories, thus avoiding the need +to exhaustively search the disk. + + A second database file 'aliases' allows you to give additional names +to the files listed in 'ls-R'. + + The 'ls-R' and 'aliases' features are implemented in the source file +'kpathsea/db.c'. + +* Menu: + +* ls-R:: The main filename database. +* Filename aliases:: Aliases for those names. +* Database format:: Syntax details of the database file. + + +File: kpathsea.info, Node: ls-R, Next: Filename aliases, Up: Filename database + +5.5.1 'ls-R' +------------ + +As mentioned above, you must name the main filename database 'ls-R'. +You can put one at the root of each TeX installation hierarchy you wish +to search ('$TEXMF' by default, which expands to a braced list of +several hierarchies in TeX Live). + + Kpathsea looks for 'ls-R' files along the 'TEXMFDBS' path. It is +best for this to contain all and only those hierarchies from '$TEXMF' +which are specified with '!!'--and also to specify them with '!!' in +'TEXMFDBS'. (See the end of this section for more on '!!'.) + + The recommended way to create and maintain 'ls-R' is to run the +'mktexlsr' script, which is installed in '$(bindir)' ('/usr/local/bin' +by default). That script goes to some trouble to follow symbolic links +as necessary, etc. It's also invoked by the distributed 'mktex...' +scripts. + + At its simplest, though, you can build 'ls-R' with the command + cd /YOUR/TEXMF/ROOT && ls -LAR ./ >ls-R + +presuming your 'ls' produces the right output format (see the section +below). GNU 'ls', for example, outputs in this format. Also presuming +your 'ls' hasn't been aliased in a system file (e.g., '/etc/profile') to +something problematic, e.g., 'ls --color=tty'. In that case, you will +have to disable the alias before generating 'ls-R'. For the precise +definition of the file format, see *note Database format::. + + Regardless of whether you use the supplied script or your own, you +will almost certainly want to invoke it via 'cron', so when you make +changes in the installed files (say if you install a new LaTeX package), +'ls-R' will be automatically updated. However, for those using TeX Live +or system distributions, the package managers should run 'mktexlsr' as +needed. + + The '-A' option to 'ls' includes files beginning with '.' (except for +'.' and '..'), such as the file '.tex' included with the LaTeX tools +package. (On the other hand, _directories_ whose names begin with '.' +are always ignored.) + + If your system does not support symbolic links, omit the '-L'. + + 'ls -LAR /YOUR/TEXMF/ROOT' will also work. But using './' avoids +embedding absolute pathnames, so the hierarchy can be easily +transported. It also avoids possible trouble with automounters or other +network filesystem conventions. + + Kpathsea warns you if it finds an 'ls-R' file, but the file does not +contain any usable entries. The usual culprit is running plain 'ls -R' +instead of 'ls -LR ./' or 'ls -R /YOUR/TEXMF/ROOT'. Another possibility +is some system directory name starting with a '.' (perhaps if you are +using AFS); Kpathsea ignores everything under such directories. + + If a particular path element begins with '!!', _only_ the database +will be searched for that element, never the disk; and if the database +does not exist, nothing at all will be searched. In TeX Live, most of +the trees are specified with '!!'. + + For path elements that do not begin with '!!', if the database +exists, it will be used, and the disk will not be searched. However, in +this case, if the database does not exist, the disk will be searched. +In TeX Live, the most notable case of this is the 'TEXMFHOME' tree, to +allow users to add and remove files from their own tree without having +to worry about 'ls-R'. + + (Aside: there are uncommon cases where a '!!' tree will be searched +on disk even if the 'ls-R' file exists; they are too obscure to try to +explain here. See 'pathsearch.c' in the source if you need to know.) + + To sum up: do not create an 'ls-R' file unless you also take care to +keep it up to date. Otherwise newly-installed files will not be found. + + +File: kpathsea.info, Node: Filename aliases, Next: Database format, Prev: ls-R, Up: Filename database + +5.5.2 Filename aliases +---------------------- + +In some circumstances, you may wish to find a file under several names. +For example, suppose a TeX document was created using a DOS system and +tries to read 'longtabl.sty'. But now it's being run on a Unix system, +and the file has its original name, 'longtable.sty'. The file won't be +found. You need to give the actual file 'longtable.sty' an alias +'longtabl.sty'. + + You can handle this by creating a file 'aliases' as a companion to +the 'ls-R' for the hierarchy containing the file in question. (You must +have an 'ls-R' for the alias feature to work.) + + The format of 'aliases' is simple: two whitespace-separated words per +line; the first is the real name 'longtable.sty', and second is the +alias ('longtabl.sty'). These must be base filenames, with no directory +components. 'longtable.sty' must be in the sibling 'ls-R'. + + Also, blank lines and lines starting with '%' or '#' are ignored in +'aliases', to allow for comments. + + If a real file 'longtabl.sty' exists, it is used regardless of any +aliases. + + +File: kpathsea.info, Node: Database format, Prev: Filename aliases, Up: Filename database + +5.5.3 Database format +--------------------- + +The "database" read by Kpathsea is a line-oriented file of plain text. +The format is that generated by GNU (and most other) 'ls' programs given +the '-R' option, as follows. + + * Blank lines are ignored. + + * If a line begins with '/' or './' or '../' and ends with a colon, + it's the name of a directory. ('../' lines aren't useful, however, + and should not be generated.) + + * All other lines define entries in the most recently seen directory. + /'s in such lines will produce possibly-strange results. + + * Files with no preceding directory line are ignored. + + For example, here's the first few lines of 'ls-R' (which totals about +30K bytes) on my system: + + bibtex + dvips + fonts + ls-R + metafont + metapost + tex + web2c + + ./bibtex: + bib + bst + doc + + ./bibtex/bib: + asi.bib + btxdoc.bib + ... + + +File: kpathsea.info, Node: Invoking kpsewhich, Prev: Filename database, Up: Path searching + +5.6 'kpsewhich': Standalone path searching +========================================== + +The Kpsewhich program exercises the path searching functionality +independent of any particular application. This can also be useful as a +sort of 'find' program to locate files in your TeX hierarchies, perhaps +in administrative scripts. It is used heavily in the distributed +'mktex...' scripts. + + Synopsis: + + kpsewhich OPTION... FILENAME... + + The options and filename(s) to look up can be intermixed. Options +can start with either '-' or '--', and any unambiguous abbreviation is +accepted. + +* Menu: + +* Path searching options:: Changing the mode, resolution, etc. +* Specially-recognized files:: Default formats for texmf.cnf, etc. +* Auxiliary tasks:: Path and variable expansion, etc. +* Standard options:: '--help' and '--version'. + + +File: kpathsea.info, Node: Path searching options, Next: Specially-recognized files, Up: Invoking kpsewhich + +5.6.1 Path searching options +---------------------------- + +Kpsewhich looks up each non-option argument on the command line as a +filename, and returns the first file found. + + Various options alter the path searching behavior: + +'--all' + Report all matches found, one per line. By default, if there is + more than one match, just one will be reported (chosen effectively + at random). Exception: with the glyph formats ('pk', 'gf'), this + option has no effect and only the first match is returned. + +'--casefold-search' +'--no-casefold-search' + Explicitly enable or disable the fallback to a case-insensitive + search on Unix platforms (*note Casefolding search::); no effect on + Windows. The default is enabled, set in 'texmf.cnf'. Disabling + ('--no-casefold-search') does not mean that searches magically + become case-sensitive when the underlying (file)system is + case-insensitive, it merely means that Kpathsea does not do any + casefolding itself. + +'--cnf-line=STR' + Parse STR as if it were a line in the 'texmf.cnf' configuration + file (*note Config files::), overriding settings in the actual + configuration files, and also in the environment (*note Path + sources::). This is implemented by making any settings from STR in + the environment, overwriting any value already there. Thus, an + extra colon in a '--cnf-line' value will refer to the value from a + configuration file, not a user-set environment variable. + + Furthermore, any variable set from STR will also be set with the + program name suffix. For example, 'pdftex + --cnf-line=TEXINPUTS=/foo:' will set both 'TEXINPUTS' and + 'TEXINPUTS_pdftex' in the environment (and the value will be '/foo' + followed by the setting from 'texmf.cnf', ignoring any user-set + 'TEXINPUTS'). + + This behavior is desirable because, in practice, many variables in + the distributed 'texmf.cnf' are program-specific, and the intuitive + behavior is for values set on the command line with '--cnf-line' to + override them. + +'--dpi=NUM' + Set the resolution to NUM; this only affects 'gf' and 'pk' lookups. + '-D' is a synonym, for compatibility with Dvips. Default is 600. + +'--engine=NAME' + Set the engine name to NAME. By default it is not set. The engine + name is used in some search paths to allow files with the same name + but used by different engines to coexist. + + In particular, since the memory dump files ('.fmt'/'.base'/'.mem') + are now stored in subdirectories named for the engine ('tex', + 'pdftex', 'xetex', etc.), you must specify an engine name in order + to find them. For example, 'cont-en.fmt' typically exists for both + 'pdftex' and 'xetex'. With the default path settings, you can use + '--engine=/' to look for any dump file, regardless of engine; if a + dump file exists for more than one engine, it's indeterminate which + one is returned. (The '/' ends up specifying a normal recursive + search along the path where the dumps are stored, namely + '$TEXMF/web2c{/$engine,}'.) + +'--format=NAME' + Set the format for lookup to NAME. By default, the format is + guessed from the filename, with 'tex' being used if nothing else + fits. The recognized filename extensions (including any leading + '.') are also allowable NAMEs. + + All formats also have a name, which is the only way to specify + formats with no associated suffix. For example, for Dvips + configuration files you can use '--format="dvips config"'. (The + quotes are for the sake of the shell.) + + Here's the current list of recognized names and the associated + suffixes. *Note Supported file formats::, for more information on + each of these. + + The strings in parentheses are abbreviations recognized only by + 'kpsewhich' (not the underlying library calls). They are provided + when it would otherwise require an argument containing a space to + specify the format, to simplify quoting of calls from shells. + + gf: gf + pk: pk + bitmap font (bitmapfont): + tfm: .tfm + afm: .afm + base: .base + bib: .bib + bst: .bst + cnf: .cnf + ls-R: ls-R ls-r + fmt: .fmt + map: .map + mem: .mem + mf: .mf + mfpool: .pool + mft: .mft + mp: .mp + mppool: .pool + MetaPost support (mpsupport): + ocp: .ocp + ofm: .ofm .tfm + opl: .opl .pl + otp: .otp + ovf: .ovf .vf + ovp: .ovp .vpl + graphic/figure: .eps .epsi + tex: .tex .sty .cls .fd .aux .bbl .def .clo .ldf + TeX system documentation (doc): + texpool: .pool + TeX system sources (source): .dtx .ins + PostScript header: .pro + Troff fonts (trofffont): + type1 fonts: .pfa .pfb + vf: .vf + dvips config (dvipsconfig): + ist: .ist + truetype fonts: .ttf .ttc .TTF .TTC .dfont + type42 fonts: .t42 .T42 + web2c files (web2c): + other text files (othertext): + other binary files (otherbin): + misc fonts (miscfont): + web: .web .ch + cweb: .w .web .ch + enc files: .enc + cmap files (cmap): + subfont definition files: .sfd + opentype fonts: .otf + pdftex config (pdftexconfig): + lig files: .lig + texmfscripts: + lua: .lua .luatex .luc .luctex .texlua .texluc .tlu + font feature files: .fea + cid maps: .cid .cidmap + mlbib: .mlbib .bib + mlbst: .mlbst .bst + clua: .dll .so + ris: .ris + bltxml: .bltxml + + This option and '--path' are mutually exclusive. + +'--interactive' + After processing the command line, read additional filenames to + look up from standard input. + +'--mktex=FILETYPE' +'--no-mktex=FILETYPE' + Turn on or off the 'mktex' script associated with FILETYPE. Usual + values for FILETYPE are 'pk', 'mf', 'tex', and 'tfm'. By default, + all are off in Kpsewhich, even if they are enabled for TeX. This + option implies setting '--must-exist'. *Note mktex scripts::. + +'--mode=STRING' + Set the mode name to STRING; this also only affects 'gf' and 'pk' + lookups. No default: any mode will be found. *Note mktex script + arguments::. + +'--must-exist' + Do everything possible to find the files, notably including + searching the disk and running the 'mktex' scripts. By default, + only the 'ls-R' database is checked, in the interest of efficiency. + +'--path=STRING' + Search along the path STRING (colon-separated as usual), instead of + guessing the search path from the filename. '//' and all the usual + expansions are supported (*note Path expansion::). This option and + '--format' are mutually exclusive. To output the complete + directory expansion of a path, instead of doing a one-shot lookup, + see '--expand-path' and '--show-path' in the following section. + +'--progname=NAME' + Set the program name to NAME; default is 'kpsewhich'. This can + affect the search paths via the '.PROGNAM' feature in configuration + files (*note Config files::). + +'--subdir=STRING' + Report only those matches whose directory part _ends_ with STRING + (compared literally, except case is ignored on a case-insensitive + operating system). For example, suppose there are two matches for + a given name: + + kpsewhich foo.sty + => /some/where/foo.sty + /another/place/foo.sty + + Then we can narrow the result to what we are interested in with + '--subdir': + + kpsewhich --subdir=where foo.sty + => /some/where/foo.sty + + kpsewhich --subdir=place foo.sty + => /another/place/foo.sty + + The string to match must be at the end of the directory part of the + match, and it is taken literally, with no pattern matching: + + kpsewhich --subdir=another foo.sty + => + + The string to match may cross directory components: + + kpsewhich --subdir=some/where foo.sty + => /some/where/foo.sty + + '--subdir' implies '--all'; if there is more than one match, they + will all be reported (in our example, both 'where' and 'place' end + in 'e'): + + kpsewhich --subdir=e + => /some/where/foo.sty + /another/place/foo.sty + + Because of the above rules, the presence of a leading '/' is + important, since it "anchors" the match to a full component name: + + kpsewhich --subdir=/lace foo.sty + => + + However, a trailing '/' is immaterial (and ignored), since the + match always takes place at the end of the directory part: + + kpsewhich --subdir=lace/ foo.sty + => /another/place/foo.sty + + The purpose of these rules is to make it convenient to find results + only within a particular area of the tree. For instance, a given + script named 'foo.lua' might exist within both + 'texmf-dist/scripts/pkg1/' and 'texmf-dist/scripts/pkg2/'. By + specifying, say, '--subdir=/pkg1', you can be sure of getting the + one you are interested in. + + We only match at the end because a site might happen to install TeX + in '/some/coincidental/pkg1/path/', and we wouldn't want to match + 'texmf-dist/scripts/pkg2/' that when searching for '/pkg1'. + + +File: kpathsea.info, Node: Specially-recognized files, Next: Auxiliary tasks, Prev: Path searching options, Up: Invoking kpsewhich + +5.6.2 Specially-recognized files for 'kpsewhich' +------------------------------------------------ + +'kpsewhich' recognizes a few special filenames on the command line and +defaults to using the 'known' file formats for them, merely to save the +time and trouble of specifying the format. This is only a feature of +'kpsewhich'; when using the Kpathsea library itself, none of these +special filenames are recognized, and it's still up to the caller to +specify the desired format. + + Here is the list of special filenames to 'kpsewhich', along with +their corresponding format: + +'config.ps' + 'dvips config' + +'dvipdfmx.cfg' + 'other text files' + +'fmtutil.cnf' + 'web2c files' + +'glyphlist.txt' + 'map' + +'mktex.cnf' + 'web2c files' + +'pdfglyphlist.txt' + 'map' + +'pdftex.cfg' + 'pdftex config' (although 'pdftex.cfg' is not used any more; look + for the file 'pdftexconfig.tex' instead.) + +'texmf.cnf' + 'cnf' + +'XDvi' + 'other text files' + + A user-specified format will override the above defaults. + + Another useful configuration file in this regard is 'tcfmgr.map', +found in 'texmf/texconfig/tcfmgr.map', which records various information +about the above configuration files (among others). + + +File: kpathsea.info, Node: Auxiliary tasks, Next: Standard options, Prev: Specially-recognized files, Up: Invoking kpsewhich + +5.6.3 Auxiliary tasks +--------------------- + +Kpsewhich provides some features in addition to path lookup as such: + +'--debug=NUM' + Set debugging options to NUM. *Note Debugging::. + +'--expand-braces=STRING' + Output variable, tilde, and brace expansion of STRING, which is + assumed to be a single path element. *Note Path expansion::. + +'--expand-path=STRING' + Output the complete expansion of STRING, with each element + separated by the usual path separator on the current system (';' on + Windows, ':' otherwise). This may be useful to construct a custom + search path for a format not otherwise supported. To retrieve the + search path for a format that is already supported, see + '--show-path'. + + Nonexistent directories are culled from the output: + + $ kpsewhich --expand-path '/tmp' + => /tmp + $ kpsewhich --expand-path '/nonesuch' + => + + For one-shot uses of an arbitrary (not built in to Kpathsea) path, + see '--path' (*note Path searching options::). + +'--expand-var=STRING' + Output the variable and tilde expansion of STRING. For example, + with the usual 'texmf.cnf', 'kpsewhich --expand-var='$TEXMF'' + returns the TeX system hierarchy root(s). *Note Path expansion::. + The specified STRING can contain anything, though, not just + variable references. This calls 'kpse_var_expand' (*note + Programming with config files::). + +'--help-formats' + Output information about each supported format (*note Supported + file formats::), including the names and abbreviations, variables + looked for, and the original path. + +'--safe-in-name=NAME' +'--safe-out-name=NAME' + Exit successfully if NAME is safe to open for reading or writing, + respectively, else unsuccessfully. No output is written. These + tests take account of the related Kpathsea configuration settings + (*note Calling sequence::). + +'--show-path=NAME' + Show the path that would be used for file lookups of file type + NAME. Either a filename extension ('pk', '.vf', etc.) or an + integer can be used, just as with '--format', described in the + previous section. + +'--var-brace-value=VARIABLE' + Like '--var-value' (next), but also expands '{...}' constructs. + (*note Brace expansion::). Thus, the value is assumed to possibly + be several path elements, and '~' is expanded at the beginning of + each. The path separator is changed to that of the current system + in the expansion. + + Example: 'FOO='.;~' kpsewhich --var-brace-value=FOO' outputs (on a + Unix-ish system) '.:/home/karl', supposing the latter is the + current user's home directory. Note that the ';' in the source + value, as commonly used in 'texmf.cnf', has changed to a ':', as + the normal path separator on the current system. On a Windows-ish + system, the ';' would remain. + +'--var-value=VARIABLE' + Outputs the value of VARIABLE (a simple identifier like + 'TEXMFDIST', with no '$' or other constructs), expanding '$' (*note + Variable expansion::) and '~' (*note Tilde expansion::) constructs + in the value. '~' expansion happens at the beginning of the + overall value and at the beginning of a variable expansion, but not + arbitrarily within the string. Braces are not expanded. + + Example: '--var-value=texmf_casefold_search' outputs (if the + default is not changed) '1'. + + Example to contrast with '--var-brace-value': 'FOO='.;~' kpsewhich + --var-value=FOO' outputs '.;~', i.e., the same as the input value, + on all systems. + + +File: kpathsea.info, Node: Standard options, Prev: Auxiliary tasks, Up: Invoking kpsewhich + +5.6.4 Standard options +---------------------- + +Kpsewhich accepts the standard GNU options: + + * '--help' prints a help message on standard output and exits + successfully. + + * '--version' prints the Kpathsea version number and exits + successfully. + + +File: kpathsea.info, Node: TeX support, Next: Programming, Prev: Path searching, Up: Top + +6 TeX support +************* + +Although the basic features in Kpathsea can be used for any type of path +searching, it came about, as usual, with a specific application in mind: +I wrote Kpathsea specifically for TeX system programs. I had been +struggling with the programs I was using (Dvips, Xdvi, and TeX itself) +having slightly different notions of how to specify paths; and debugging +was painful, since no code was shared. + + Therefore, Kpathsea provides some TeX-specific formats and features. +Indeed, many of the purportedly generic path searching features were +provided because they seemed useful in that conTeXt (font lookup, +particularly). + + Kpathsea provides a standard way to search for files of any of the +supported file types; glyph fonts are a bit different than all the rest. +Searches are based solely on names of files, not their contents--if a GF +file is (mis)named 'cmr10.600pk', it will be found as a PK file. + +* Menu: + +* Supported file formats:: File types Kpathsea knows about. +* File lookup:: Searching for most kinds of files. +* Glyph lookup:: Searching for bitmap fonts. +* Suppressing warnings:: Avoiding warnings via TEX_HUSH. +* mktex scripts:: Generating files at runtime. + + +File: kpathsea.info, Node: Supported file formats, Next: File lookup, Up: TeX support + +6.1 Supported file formats +========================== + +Kpathsea has support for a number of file types. Each file type has a +list of environment and config file variables that are checked to define +the search path, and most have a default suffix that plays a role in +finding files (see the next section). Some also define additional +suffixes, and/or a program to be run to create missing files on the fly. + + Since environment variables containing periods, such as +'TEXINPUTS.latex', are not allowed on some systems, Kpathsea looks for +environment variables with an underscore, e.g., 'TEXINPUTS_latex' (*note +Config files::). + + The following table lists the above information. You can also get +the list by giving the '--help-formats' option to 'kpsewhich' (*note +Auxiliary tasks::). + +'afm' + (Adobe font metrics, *note (dvips)Metric files::) 'AFMFONTS'; + suffix '.afm'. + +'base' + (Metafont memory dump, *note (web2c)Memory dumps::) 'MFBASES', + 'TEXMFINI'; suffix '.base'. + +'bib' + (BibTeX bibliography source, *note (web2c)bibtex invocation::) + 'BIBINPUTS', 'TEXBIB'; suffix '.bib'. + +'bltxml' + (BibLaTeXML bibliography files for Biber, + <https://ctan.org/pkg/biber>) 'BLTXMLINPUTS' suffix '.bltxml'. + +'bst' + (BibTeX style, *note Basic BibTeX style files: (web2c)Basic BibTeX + style files.) 'BSTINPUTS'; suffix '.bst'. + +'clua' + (dynamic libraries for Lua, <https://ctan.org/pkg/luatex>) + 'CLUAINPUTS' suffixes '.dll' and '.so'. + +'cmap' + (character map files) 'CMAPFONTS'; suffix '.cmap'. + +'cnf' + (Runtime configuration files, *note Config files::) 'TEXMFCNF'; + suffix '.cnf'. + +'cweb' + (CWEB input files) 'CWEBINPUTS'; suffixes '.w', '.web'; additional + suffix '.ch'. + +'dvips config' + (Dvips 'config.*' files, such as 'config.ps', *note (dvips)Config + files::) 'TEXCONFIG'. + +'enc files' + (encoding vectors) 'ENCFONTS'; suffix '.enc'. + +'fmt' + (TeX memory dump, *note (web2c)Memory dumps::) 'TEXFORMATS', + 'TEXMFINI'; suffix '.fmt'. + +'font cid map' + (CJK mapping) 'FONTCIDMAPS' suffix '.cid'. + +'font feature files' + (primarily for OpenType font features) 'FONTFEATURES' suffix + '.fea'. + +'gf' + (generic font bitmap, *note (dvips)Glyph files::) 'PROGRAMFONTS', + 'GFFONTS', 'GLYPHFONTS', 'TEXFONTS'; suffix 'gf'. + +'graphic/figure' + (Encapsulated PostScript figures, *note (dvips)PostScript + figures::) 'TEXPICTS', 'TEXINPUTS'; additional suffixes: '.eps', + '.epsi'. + +'ist' + (makeindex style files) 'TEXINDEXSTYLE', 'INDEXSTYLE'; suffix + '.ist'. + +'lig files' + (ligature definition files) 'LIGFONTS'; suffix '.lig'. + +'ls-R' + (Filename databases, *note Filename database::) 'TEXMFDBS'. + +'map' + (Fontmaps, *note Fontmap::) 'TEXFONTMAPS'; suffix '.map'. + +'mem' + (MetaPost memory dump, *note (web2c)Memory dumps::) 'MPMEMS', + 'TEXMFINI'; suffix '.mem'. + +'MetaPost support' + (MetaPost support files, used by DMP; *note (web2c)dmp + invocation::) 'MPSUPPORT'. + +'mf' + (Metafont source, *note (web2c)mf invocation::) 'MFINPUTS'; suffix + '.mf'; dynamic creation program: 'mktexmf'. + +'mfpool' + (Metafont program strings, *note (web2c)pooltype invocation::) + 'MFPOOL', 'TEXMFINI'; suffix '.pool'. + +'mft' + ('MFT' style file, *note (web2c)mft invocation::) 'MFTINPUTS'; + suffix '.mft'. + +'misc fonts' + (font-related files that don't fit the other categories) + 'MISCFONTS' + +'mlbib' + (MlBibTeX bibliography source) 'MLBIBINPUTS', 'BIBINPUTS', + 'TEXBIB'; suffixes '.mlbib', '.mlbib'. + +'mlbst' + (MlBibTeX style) 'MLBSTINPUTS', 'BSTINPUTS'; suffixes '.mlbst', + '.bst'. + +'mp' + (MetaPost source, *note (web2c)mpost invocation::) 'MPINPUTS'; + suffix '.mp'. + +'mppool' + (MetaPost program strings, *note (web2c)pooltype invocation::) + 'MPPOOL', 'TEXMFINI'; suffix '.pool'. + +'ocp' + (Omega compiled process files) 'OCPINPUTS'; + suffix '.ocp'; dynamic creation program: 'MakeOmegaOCP'. + +'ofm' + (Omega font metrics) 'OFMFONTS', 'TEXFONTS'; + suffixes '.ofm', '.tfm'; dynamic creation program: 'MakeOmegaOFM'. + +'opentype fonts' + (OpenType fonts) 'OPENTYPEFONTS'. + +'opl' + (Omega property lists) 'OPLFONTS', 'TEXFONTS'; suffix '.opl'. + +'otp' + (Omega translation process files) 'OTPINPUTS'; suffix '.otp'. + +'ovf' + (Omega virtual fonts) 'OVFFONTS', 'TEXFONTS'; suffix '.ovf'. + +'ovp' + (Omega virtual property lists) 'OVPFONTS', 'TEXFONTS'; suffix + '.ovp'. + +'pdftex config' + (PDFTeX-specific configuration files) 'PDFTEXCONFIG'. + +'pk' + (packed bitmap fonts, *note (dvips)Glyph files::) 'PROGRAMFONTS' + (PROGRAM being 'XDVI', etc.), 'PKFONTS', 'TEXPKS', 'GLYPHFONTS', + 'TEXFONTS'; suffix 'pk'; dynamic creation program: 'mktexpk'. + +'PostScript header' + (downloadable PostScript, *note (dvips)Header files::) + 'TEXPSHEADERS', 'PSHEADERS'; additional suffix '.pro'. + +'ris' + (RIS bibliography files, primarily for Biber, + <https://ctan.org/pkg/biber>) 'RISINPUTS' suffix '.ris'. + +'subfont definition files' + (subfont definition files) 'SFDFONTS' suffix '.sfd'. + +'tex' + (TeX source, *note (web2c)tex invocation::) 'TEXINPUTS'; suffix + '.tex'; additional suffixes: none, because such a list cannot be + complete; dynamic creation program: 'mktextex'. + +'TeX system documentation' + (Documentation files for the TeX system) 'TEXDOCS'. + +'TeX system sources' + (Source files for the TeX system) 'TEXSOURCES'. + +'texmfscripts' + (Architecture-independent executables distributed in the texmf + trees) 'TEXMFSCRIPTS'. + +'texpool' + (TeX program strings, *note (web2c)pooltype invocation::) + 'TEXPOOL', 'TEXMFINI'; suffix '.pool'. + +'tfm' + (TeX font metrics, *note (dvips)Metric files::) 'TFMFONTS', + 'TEXFONTS'; suffix '.tfm'; dynamic creation program: 'mktextfm'. + +'Troff fonts' + (Troff fonts, used by DMP; *note (web2c)DMP invocation::) + 'TRFONTS'. + +'truetype fonts' + (TrueType outline fonts) 'TTFONTS'; suffixes '.ttf' and '.TTF', + '.ttc' and '.TTC', '.dfont'. + +'type1 fonts' + (Type 1 PostScript outline fonts, *note (dvips)Glyph files::) + 'T1FONTS', 'T1INPUTS', 'TEXPSHEADERS', 'DVIPSHEADERS'; suffixes + '.pfa', '.pfb'. + +'type42 fonts' + (Type 42 PostScript outline fonts) 'T42FONTS'. + +'vf' + (virtual fonts, *note (dvips)Virtual fonts::) 'VFFONTS', + 'TEXFONTS'; suffix '.vf'. + +'web' + (WEB input files) 'WEBINPUTS'; suffix '.web'; additional suffix + '.ch'. + +'web2c files' + (files specific to the web2c implementation) 'WEB2C'. + + There are two special cases, because the paths and environment +variables always depend on the name of the program: the variable name is +constructed by converting the program name to upper case, and then +appending 'INPUTS'. Assuming the program is called 'foo', this gives us +the following table. + +'other text files' + (text files used by 'foo') 'FOOINPUTS'. + +'other binary files' + (binary files used by 'foo') 'FOOINPUTS'. + + If an environment variable by these names are set, the corresponding +'texmf.cnf' definition won't be looked at (unless, as usual, the +environment variable value has an extra ':'). *Note Default +expansion::. + + For the font variables, the intent is that: + * 'TEXFONTS' is the default for everything. + + * 'GLYPHFONTS' is the default for bitmap (or, more precisely, + non-metric) files. + + * Each font format has a variable of its own. + + * Each program has its own font override path as well; e.g., + 'DVIPSFONTS' for Dvipsk. Again, this is for bitmaps, not metrics. + + +File: kpathsea.info, Node: File lookup, Next: Glyph lookup, Prev: Supported file formats, Up: TeX support + +6.2 File lookup +=============== + +This section describes how Kpathsea searches for most files (bitmap font +searches are the exception, as described in the next section). + + Here is the search strategy for a file NAME: + + 1. If the file format defines default suffixes, and the suffix of NAME + name is not already a known suffix for that format, try the name + with each default appended, and use alternative names found in the + fontmaps if necessary. Example: given 'foo.bar', look for + 'foo.bar.tex'. + + 2. Search for NAME, and if necessary for alternative names found in + the fontmaps. Example: given 'foo.bar', we also look for + 'foo.bar'. + + 3. If the file format defines a program to invoke to create missing + files, run it (*note mktex scripts::). + + The order in which we search for "suffixed" name (item 1) or the +"as-is" name (item 2) is controlled by the 'try_std_extension_first' +configuration value. The default set in 'texmf.cnf' is true, since +common suffixes are already recognized: 'babel.sty' will only look for +'babel.sty', not 'babel.sty.tex', regardless of this setting. + + When the suffix is unknown (e.g., 'foo.bar'), both names are always +tried; the difference is the order in which they are tried. + + 'try_std_extension_first' only affects names being looked up which +*already* have an extension. A name without an extension (e.g., 'tex +story') will always have an extension added first. + + This algorithm is implemented in the function 'kpathsea_find_file' in +the source file 'kpathsea/tex-file.c'. You can watch it in action with +the debugging options (*note Debugging::). + + +File: kpathsea.info, Node: Glyph lookup, Next: Suppressing warnings, Prev: File lookup, Up: TeX support + +6.3 Glyph lookup +================ + +This section describes how Kpathsea searches for a bitmap font in GF or +PK format (or either) given a font name (e.g., 'cmr10') and a resolution +(e.g., 600). + + Here is an outline of the search strategy (details in the sections +below) for a file NAME at resolution DPI. The search stops at the first +successful lookup. + + 1. Look for an existing file NAME.DPIFORMAT in the specified + format(s). + + 2. If NAME is an alias for a file F in the fontmap file + 'texfonts.map', look for F.DPI. + + 3. Run an external program (typically named 'mktexpk') to generate the + font (*note mktex scripts::) + + 4. Look for FALLBACK.DPI, where FALLBACK is some last-resort font + (typically 'cmr10'). + + This is implemented in 'kpathsea_find_glyph' in +'kpathsea/tex-glyph.c'. + +* Menu: + +* Basic glyph lookup:: Features common to all glyph lookups. +* Fontmap:: Aliases for fonts. +* Fallback font:: Resolutions and fonts of last resort. + + +File: kpathsea.info, Node: Basic glyph lookup, Next: Fontmap, Up: Glyph lookup + +6.3.1 Basic glyph lookup +------------------------ + +When Kpathsea looks for a bitmap font NAME at resolution DPI in a format +FORMAT, it first checks each directory in the search path for a file +'NAME.DPIFORMAT'; for example, 'cmr10.600pk'. Kpathsea looks for a PK +file first, then a GF file. + + If that fails, Kpathsea looks for 'dpiDPI/NAME.FORMAT'; for example, +'dpi600/cmr10.pk'. This is how fonts are typically stored on +filesystems (such as DOS) that permit only three-character extensions. + + If that fails, Kpathsea looks for a font with a close-enough DPI. +"Close enough" is defined by the macro 'KPSE_BITMAP_TOLERANCE' in +'kpathsea/tex-glyph.h' to be 'DPI / 500 + 1'. This is slightly more +than the 0.2% minimum allowed by the DVI standard +(<CTAN:/dviware/driv-standard/level-0>). + + +File: kpathsea.info, Node: Fontmap, Next: Fallback font, Prev: Basic glyph lookup, Up: Glyph lookup + +6.3.2 Fontmap +------------- + +If a bitmap font or metric file is not found with the original name (see +the previous section), Kpathsea looks through any "fontmap" files for an +"alias" for the original font name. These files are named +'texfonts.map' and searched for along the 'TEXFONTMAPS' +environment/config file variable. All 'texfonts.map' files that are +found are read; earlier definitions override later ones. + + This feature is intended to help in two respects: + + 1. An alias name is limited in length only by available memory, not by + your filesystem. Therefore, if you want to ask for 'Times-Roman' + instead of 'ptmr', you can (you get 'ptmr8r'). + + 2. A few fonts have historically had multiple names: specifically, + LaTeX's "circle font" has variously been known as 'circle10', + 'lcircle10', and 'lcirc10'. Aliases can make all the names + equivalent, so that it no longer matters what the name of the + installed file is; TeX documents will find their favorite name. + + The format of fontmap files is straightforward: + + * Comments start with the last '%' on a line and continue to the end + of the line. (This provides for names that include a %, + ill-advised as that may be.) + + * Blank lines are ignored. + + * Each nonblank line is broken up into a series of "words": a + sequence of non-whitespace characters. + + * If the first word is 'include', the second word is used as a + filename, and it is searched for and read. + + * Otherwise, the first word on each line is the true filename; + + * the second word is the alias; + + * subsequent words are ignored. + + If an alias has an extension, it matches only those files with that +extension; otherwise, it matches anything with the same root, regardless +of extension. For example, an alias 'foo.tfm' matches only when +'foo.tfm' is being searched for; but an alias 'foo' matches 'foo.vf', +'foo.600pk', etc. + + As an example, here is an excerpt from the 'texfonts.map' in the +Web2c distribution. It makes the old and new names of the LaTeX circle +fonts equivalent. + + circle10 lcircle10 + circle10 lcirc10 + lcircle10 circle10 + lcircle10 lcirc10 + lcirc10 circle10 + lcirc10 lcircle10 + ... + + Fontmaps are implemented in the file 'kpathsea/fontmap.c'. The +Fontname distribution has much more information on font naming (*note +(fontname)::). + + +File: kpathsea.info, Node: Fallback font, Prev: Fontmap, Up: Glyph lookup + +6.3.3 Fallback font +------------------- + +If a bitmap font cannot be found or created at the requested size, +Kpathsea looks for the font at a set of "fallback resolutions". You +specify these resolutions as a colon-separated list (like search paths). +Kpathsea looks first for a program-specific environment variable (e.g., +'DVIPSSIZES' for Dvipsk), then the environment variable 'TEXSIZES', then +a default specified at compilation time (the Make variable +'default_texsizes'). You can set this list to be empty if you prefer to +find fonts at their stated size or not at all. + + Finally, if the font cannot be found even at the fallback +resolutions, Kpathsea looks for a fallback font, typically 'cmr10'. +Programs must enable this feature by calling 'kpathsea_init_prog' (*note +Calling sequence::); the default is no fallback font. + + +File: kpathsea.info, Node: Suppressing warnings, Next: mktex scripts, Prev: Glyph lookup, Up: TeX support + +6.4 Suppressing warnings +======================== + +Kpathsea provides a way to suppress selected usually-harmless warnings; +this is useful at large sites where most users are not administrators, +and thus the warnings are merely a source of confusion, not a help. To +do this, you set the environment variable or configuration file value +'TEX_HUSH' to a colon-separated list of values. Here are the +possibilities: + +'all' + Suppress everything possible. + +'checksum' + Suppress mismatched font checksum warnings. + +'lostchar' + Suppress warnings when a character is missing from a font that a + DVI or VF file tries to typeset. + +'none' + Don't suppress any warnings. + +'readable' + Suppress warnings about attempts to access a file whose permissions + render it unreadable. + +'special' + Suppresses warnings about an unimplemented or unparsable '\special' + command. + +'tex-hush.c' defines the function that checks the variable value. Each +driver implements its own checks where appropriate. + + +File: kpathsea.info, Node: mktex scripts, Prev: Suppressing warnings, Up: TeX support + +6.5 'mktex' scripts +=================== + +If Kpathsea cannot otherwise find a file, for some file types it is +configured by default to invoke an external program to create it +dynamically (*note mktex configuration::). These are collectively known +as "'mktex' scripts", since most of them are named 'mktex...'. + + For example, this is useful for fonts (bitmaps, TFM's, and +arbitrarily-sizable Metafont sources such as the Sauter and EC fonts), +since any given document can use fonts never before referenced. +Building all fonts in advance is therefore impractical, if not +impossible. + + It is also useful for the TeX '.fmt' (and Metafont '.base' and +Metapost '.mem' files, *note (Web2c)Memory dumps::), where +pre-generating every format consumes a lot of both time and space. + + The script is passed the name of the file to create and possibly +other arguments, as explained below. It must echo the full pathname of +the file it created (and nothing else) to standard output; it can write +diagnostics to standard error. + +* Menu: + +* config: mktex configuration. +* names: mktex script names. +* args: mktex script arguments. + + +File: kpathsea.info, Node: mktex configuration, Next: mktex script names, Up: mktex scripts + +6.5.1 'mktex' configuration +--------------------------- + +The list of file types and program names that can run an external +program to create missing files is listed in the next section. In the +absence of 'configure' options specifying otherwise, everything but +'mktextex' will be enabled by default. The 'configure' options to +change the defaults are: + + --without-mktexfmt-default + --without-mktexmf-default + --without-mktexocp-default + --without-mktexofm-default + --without-mktexpk-default + --without-mktextfm-default + --with-mktextex-default + + The 'configure' setting is overridden if the environment variable or +configuration file value named for the script is set; e.g., 'MKTEXPK' +(*note mktex script arguments::). + + 'mktexfmt' reads a file 'fmtutil.cnf', typically located in +'texmf/web2c/' to glean its configuration information. The rest of the +files and features in this section are primarily intended for the font +generation scripts. + + As distributed, all the scripts source a file 'texmf/web2c/mktex.cnf' +if it exists, so you can override various defaults. See 'mktex.opt', +for instance, which defines the default mode, resolution, some special +directory names, etc. If you prefer not to change the distributed +scripts, you can simply create 'mktex.cnf' with the appropriate +definitions (you do not need to create it if you have nothing to put in +it). 'mktex.cnf' has no special syntax; it's an arbitrary Bourne shell +script. The distribution contains a sample 'mktex.cnf' for you to copy +and modify as you please (it is not installed anywhere). + + In addition, you can configure a number of features with the +'MT_FEATURES' variable, which you can define: + + * in 'mktex.opt', as just mentioned; + + * by editing the file 'mktex.opt', either before 'make install' (in + the source hierarchy) or after (in the installed hierarchy); + + * or in the environment. + + If none of the options below are enabled, 'mktexpk', 'mktextfm', and +'mktexmf' follow the following procedure to decide where fonts should be +installed. Find the tree where the font's sources are, and test the +permissions of the 'fonts' directory of that tree to determine whether +it is writable. If it is, put the files in the tree in appropriate +locations. If it isn't writable, see whether the tree is a system tree +(named in 'SYSTEXMF'). If so, the 'VARTEXFONTS' tree is used. In all +other cases the working directory is used. + + The 'appendonlydir' option is enabled by default. + +'appendonlydir' + Tell 'mktexdir' to create directories append-only, i.e., set their + sticky bit (*note (coreutils)Mode Structure::). This feature is + silently ignored on non-Unix platforms (e.g. Windows/NT and + MS-DOS) which don't support similar functionality. This feature is + enabled by default. + +'dosnames' + Use 8.3 names; e.g., 'dpi600/cmr10.pk' instead of 'cmr10.600pk'. + Note that this feature only affects filenames that would otherwise + clash with other TeX-related filenames; 'mktex' scripts do nothing + about filenames which exceed the 8+3 MS-DOS limits but remain + unique when truncated (by the OS) to these limits, and nether do + the scripts care about possible clashes with files which aren't + related with TeX. For example, 'cmr10.600pk' would clash with + 'cmr10.600gf' and is therefore changed when 'dosnames' is in + effect, but 'mf.pool' and 'mp.base' don't clash with any + TeX-related files and are therefore unchanged. + + This feature is turned on by default on MS-DOS. If you do not wish + 'dosnames' to be set on an MS-DOS platform, you need to set the + 'MT_FEATURES' environment variable to a value that doesn't include + 'dosnames'. You can also change the default setting by editing + 'mktex.opt', but only if you use the 'mktex' shell scripts; the + emulation programs don't consult 'mktex.opt'. + +'fontmaps' + Instead of deriving the location of a font in the destination tree + from the location of the sources, the aliases and directory names + from the Fontname distribution are used. (*note Introduction: + (fontname)Top.). + +'nomfdrivers' + Let mktexpk and mktextfm create metafont driver files in a + temporary directory. These will be used for just one metafont run + and not installed permanently. + +'nomode' + Omit the directory level for the mode name; this is fine as long as + you generate fonts for only one mode. + +'stripsupplier' + Omit the font supplier name directory level. + +'striptypeface' + Omit the font typeface name directory level. + +'strip' + Omit the font supplier and typeface name directory levels. This + feature is deprecated in favour of 'stripsupplier' and + 'striptypeface'. + +'varfonts' + When this option is enabled, fonts that would otherwise be written + in system texmf tree go to the 'VARTEXFONTS' tree instead. The + default value in 'kpathsea/Makefile.in' is '/var/tmp/texfonts'. + The 'Linux File System Standard' recommends '/var/tex/fonts'. + + The 'varfonts' setting in 'MT_FEATURES' is overridden by the + 'USE_VARTEXFONTS' environment variable: if set to '1', the feature + is enabled, and if set to '0', the feature is disabled. + +'texmfvar' + Force generated files that would go into a system tree (as defined + by 'SYSTEXMF') into 'TEXMFVAR'. Starting with teTeX-3.0, the + variable 'TEXMFVAR' is always set. The 'varfonts' feature takes + precedence if also set. + + The 'texmfvar' setting in 'MT_FEATURES' is overridden by the + 'USE_TEXMFVAR' environment variable: if set to '1', the feature is + enabled, and if set to '0', the feature is disabled. + + +File: kpathsea.info, Node: mktex script names, Next: mktex script arguments, Prev: mktex configuration, Up: mktex scripts + +6.5.2 'mktex' script names +-------------------------- + +The following table shows the default name of the script for each of the +file types which support runtime generation. + +'mktexfmt' + ('.fmt', '.base', '.mem') TeX/Metafont/MetaPost formats. This + script is also named 'fmtutil', and reads 'fmtutil.cnf' for + configuration information. + +'mktexmf' + ('.mf') Metafont input files. + +'mkocp' + ('.ocp') Omega compiled process files. + +'mkofm' + ('.ofm') Omega font metric files. + +'mktexpk' + ('pk') Glyph fonts. + +'mktextex' + ('.tex') TeX input files (disabled by default). + +'mktextfm' + ('.tfm') TFM files. + +These names can be overridden by an environment variable specific to the +program--for example, 'DVIPSMAKEPK' for Dvipsk. + + If a 'mktex...' script fails, the invocation is appended to a file +'missfont.log' (by default) in the current directory. You can then +execute the log file to create the missing files after fixing the +problem. + + If the current directory is not writable and the environment variable +or configuration file value 'TEXMFOUTPUT' is set, its value is used. +Otherwise, nothing is written. The name 'missfont.log' is overridden by +the 'MISSFONT_LOG' environment variable or configuration file value. + + +File: kpathsea.info, Node: mktex script arguments, Prev: mktex script names, Up: mktex scripts + +6.5.3 'mktex' script arguments +------------------------------ + +The first argument to a 'mktex' script is always the name of the file to +be created. + + In the default 'mktexpk' implementation, additional arguments may +also be passed: + +'--dpi NUM' + Sets the resolution of the generated font to NUM. +'--mfmode NAME' + Sets the Metafont mode to NAME. +'--bdpi NUM' + Sets the "base dpi" for the font. This must match the mode being + used. +'--mag STRING' + A "magstep" string suitable for the Metafont 'mag' variable. This + must match the combination of BDPI and DPI being used. +'--destdir STRING' + A directory name. If the directory is absolute, it is used as-is. + Otherwise, it is appended to the root destination directory set in + the script. + + +File: kpathsea.info, Node: Programming, Next: Reporting bugs, Prev: TeX support, Up: Top + +7 Programming +************* + +This chapter is for programmers who wish to use Kpathsea. *Note +Introduction::, for the conditions under which you may do so (in short, +it is released under LGPLv2.1 or later). + +* Menu: + +* Overview: Programming overview. Introduction. +* Calling sequence:: Specifics of what to call. +* Program-specific files:: How to handle these. +* Config: Programming with config files. Getting info from texmf.cnf. + + +File: kpathsea.info, Node: Programming overview, Next: Calling sequence, Up: Programming + +7.1 Programming overview +======================== + +Aside from this manual, your best source of information is the source to +the programs that use Kpathsea (*note Introduction::). First, Kpsewhich +is a small utility program whose sole purpose is to exercise the main +path-searching functionality. Of the drivers, Dviljk is probably the +simplest full application program. Xdvik adds VF support and the +complication of X resources. Dvipsk adds the complication of its own +config files. Web2c is source code I also maintain, so it uses Kpathsea +rather straightforwardly, but is of course complicated by the Web to C +translation. + + When looking at these program sources, you should know that previous +versions of the library had a different programming interface; the +current interface supports re-entrancy. Historically, the library +function names were prefixed with 'kpse_' instead of 'kpathsea_', and +they did not need an instance variable as first argument. This change +was made in 2009. The old functions will never disappear, and can +reliably continue to be used when they suffice, as they do for the +programs above. The main application using the re-entrant API is the +MetaPost library used by MetaPost and LuaTeX. + + Beyond these examples, the '.h' files in the Kpathsea source describe +the interfaces and functionality (and of course the '.c' files define +the actual routines, which are the ultimate documentation). +'pathsearch.h' declares the basic searching routine. 'tex-file.h' and +'tex-glyph.h' define the interfaces for looking up particular kinds of +files. In view of the way the headers depend on each other, it is +recommended to use '#include <kpathsea/kpathsea.h>', which includes +every Kpathsea header. + + If you want to include only specific headers, you should still +consider including 'kpathsea/config.h' before including any other +Kpathsea header, as it provides symbols used in the other headers. Note +that 'kpathsea/config.h' includes 'kpathsea/c-auto.h', which is +generated by Autoconf. + + The library provides no way for an external program to register new +file types: 'tex-file.[ch]' must be modified to do this. For example, +Kpathsea has support for looking up Dvips config files, even though no +program other than Dvips will likely ever want to do so. I felt this +was acceptable, since along with new file types should also come new +defaults in 'texmf.cnf' (and its descendant 'paths.h'), since it's +simplest for users if they can modify one configuration file for all +kinds of paths. + + Kpathsea does not parse any formats itself; it barely opens any +files. Its primary purpose is to return filenames. The GNU font +utilities does contain libraries to read TFM, GF, and PK files, as do +the programs above, of course. + + +File: kpathsea.info, Node: Calling sequence, Next: Program-specific files, Prev: Programming overview, Up: Programming + +7.2 Calling sequence +==================== + +The typical way to use Kpathsea in your program goes something like +this: + + 1. Call 'kpathsea_new' to create a new library instance. This + variable must be passed as the first argument to all the following + library functions. The rest of this manual will be using 'kpse' as + a placeholder for the name of this variable. + + 2. Call 'kpathsea_set_program_name' with 'argv[0]' as the second + argument; the third argument is a string or 'NULL'. The third + argument is used by Kpathsea as the program name for the '.PROGRAM' + feature of config files (*note Config files::). If the third + argument is 'NULL', the value of the second argument is used. This + function must be called before any other use of the Kpathsea + library. + + 'kpathsea_set_program_name' always sets the variables + 'kpse->invocation_name' and 'kpse->invocation_short_name'. These + variables are used in the error message macros defined in + 'kpathsea/lib.h'. It sets the variable 'kpse->program_name' to the + program name it uses. + + It also initializes debugging options based on the environment + variable 'KPATHSEA_DEBUG' (if that is set). + + Finally, it sets the environment variables 'SELFAUTOLOC', + 'SELFAUTODIR' and 'SELFAUTOPARENT' to the location, parent and + grandparent directory of the executable, removing '.' and '..' path + elements and resolving symbolic links. These are used in the + default configuration file to allow people to invoke TeX from + anywhere. You can use 'kpsewhich --expand-var=\$SELFAUTOLOC', + etc., to see the values. + + 3. Set debugging options. *Note Debugging::. If your program doesn't + have a debugging option already, you can define one and set + 'kpse->debug' to the number that the user supplies (as in Dviljk + and Web2c), or you can just omit this altogether (people can always + set 'KPATHSEA_DEBUG'). If you do have runtime debugging already, + you need to merge Kpathsea's options with yours (as in Dvipsk and + Xdvik). + + 4. If your program has its own configuration files that can define + search paths, you should assign those paths to the 'client_path' + member in the appropriate element of the 'kpse->format_info' array. + (This array is indexed by file type; see 'tex-file.h'.) See + 'resident.c' in Dvipsk for an example. + + 5. Call 'kpathsea_init_prog' (see 'proginit.c'). It's useful for the + DVI drivers, at least, but for other programs it may be simpler to + extract the parts of it that actually apply. This does not + initialize any paths, it just looks for (and sets) certain + environment variables and other random information. (A search path + is always initialized at the first call to find a file of that + type; this eliminates much useless work, e.g., initializing the + BibTeX search paths in a DVI driver.) + + 6. The routine to actually find a file of type FORMAT is + 'kpathsea_find_file'. You can call 'kpathsea_find_file' after + doing only the first and second of the initialization steps + above--Kpathsea automatically reads the 'texmf.cnf' generic config + files, looks for environment variables, and does expansions at the + first lookup. + + 7. To find PK and/or GF bitmap fonts, the routine is + 'kpathsea_find_glyph', defined in 'tex-glyph.h'. This returns a + structure in addition to the resultant filename, because fonts can + be found in so many ways. See the documentation in the source. + + 8. To actually open a file, not just return a filename, call + 'kpathsea_open_file'. This function takes the name to look up and + a Kpathsea file format as arguments, and returns the usual 'FILE + *'. It always assumes the file must exist, and thus will search + the disk if necessary (unless the search path specified '!!', + etc.). In other words, if you are looking up a VF or some other + file that need not exist, don't use this. + + 9. TeX can write output files, via the '\openout' primitive; this + opens a security hole vulnerable to Trojan horse attack: an + unwitting user could run a TeX program that overwrites, say, + '~/.rhosts'. Analogous security holes exist for many other + programs. To alleviate this, there is a configuration variable + 'openout_any', which selects one of three levels of security. When + it is set to 'a' (for "any"), no restrictions are imposed. When it + is set to 'r' (for "restricted"), filenames beginning with '.' are + disallowed (except '.tex' because LaTeX needs it). When it is set + to 'p' (for "paranoid") additional restrictions are imposed: an + absolute filename must refer to a file in (a subdirectory) of + 'TEXMFOUTPUT', and any attempt to go up a directory level is + forbidden (that is, paths may not contain a '..' component). The + paranoid setting is the default. (For backwards compatibility, 'y' + and '1' are synonyms of 'a', while 'n' and '0' are synonyms for + 'r'.) The function 'kpathsea_out_name_ok', with a filename as + second argument, returns 'true' if that filename is acceptable to + be opend for output or 'false' otherwise. + + 10. Similarly, the function 'kpathsea_in_name_ok', with a filename as + second argument, returns 'true' if that filename is acceptable to + be opend for input or 'false' otherwise, depending on the value of + the configuration variable 'openin_any' (with 'a' as default). + + 11. To close the kpathsea library instance you are using, call + 'kpathsea_finish'. This function closes any open log files and + frees the memory used by the instance. + + Kpathsea also provides many utility routines. Some are generic: hash +tables, memory allocation, string concatenation and copying, string +lists, reading input lines of arbitrary length, etc. Others are +filename-related: default path, tilde, and variable expansion, 'stat' +calls, etc. (Perhaps someday I'll move the former to a separate +library.) + + The 'c-*.h' header files can also help your program adapt to many +different systems. You will almost certainly want to use Autoconf and +probably Automake for configuring and building your software if you use +Kpathsea; I strongly recommend using Autoconf and Automake regardless. +They are available from <https://gnu.org/software>. + + +File: kpathsea.info, Node: Program-specific files, Next: Programming with config files, Prev: Calling sequence, Up: Programming + +7.3 Program-specific files +========================== + +Many programs will need to find some configuration files. Kpathsea +contains some support to make it easy to place them in their own +directories. The Standard TeX directory structure (*note Introduction: +(tds)Top.), specifies that such files should go into a subdirectory +named after the program, like 'texmf/ttf2pk'. + + Two formats, 'kpse_program_text_format' and +'kpse_program_binary_format', use '.:$TEXMF/PROGRAM//' as their +compiled-in search path. To override this default, you can use the +variable 'PROGRAMINPUTS' in the environment and/or 'texmf.cnf'. That is +to say, the name of the variable is constructed by converting the name +of the program to upper case, and appending 'INPUTS'. + + The only difference between these two formats is whether +'kpathsea_open_file' will open the files it finds in text or binary +mode. + + +File: kpathsea.info, Node: Programming with config files, Prev: Program-specific files, Up: Programming + +7.4 Programming with config files +================================= + +You can (and probably should) use the same 'texmf.cnf' configuration +file that Kpathsea uses for your program. This helps installers by +keeping all configuration in one place. + + To retrieve a value for a configuration variable VAR, the best way is +to call 'kpathsea_var_value' on the string 'VAR'. This will look first +for an environment variable VAR, then a config file value. The result +will be the value found or 'NULL'. This function is declared in +'kpathsea/variable.h'. For an example, see the 'shell_escape' code in +'web2c/lib/texmfmp.c'. + + The routine to do full variable and tilde expansion of an arbitrary +string in the context of a search path (as opposed to simply retrieving +a value) is 'kpathsea_var_expand', also declared in +'kpathsea/variable.h'. However, it's generally only necessary to set +the search path structure components as explained in the previous +section instead of using this directly. Because of its usage with any +input string, undefined '$FOO' constructs in the argument to +'kpathsea_var_expand' are returned literally ('"$FOO"'), while undefined +'${FOO}' constructs are expanded to the empty string. + + If for some reason you want to retrieve a value _only_ from a config +file, not automatically looking for a corresponding environment +variable, call 'kpathsea_cnf_get' (declared in 'kpathsea/cnf.h') with +the string VAR. + + No initialization calls are needed. + + +File: kpathsea.info, Node: Reporting bugs, Next: Index, Prev: Programming, Up: Top + +8 Reporting bugs +**************** + +If you have problems or suggestions, please report them to +<tex-k@tug.org> using the bug checklist below. + + Please report bugs in the documentation; not only factual errors or +inconsistent behavior, but unclear or incomplete explanations, typos, +wrong fonts, ... + +* Menu: + +* Bug checklist:: What to include in a good bug report. +* Mailing lists:: Joining the bugs or announcements mailing lists. +* Debugging:: Analyzing runtime problems. +* Logging:: Recording searches. +* Common problems:: When things go wrong. + + +File: kpathsea.info, Node: Bug checklist, Next: Mailing lists, Up: Reporting bugs + +8.1 Bug checklist +================= + +Before reporting a bug, please check below to be sure it isn't already +known (*note Common problems::). + + Bug reports should be sent via electronic mail to <tex-k@tug.org>. + + The general principle is that a good bug report includes all the +information necessary for reproduction. Therefore, to enable +investigation, your report should include the following: + + * The version number(s) of the program(s) involved, and of Kpathsea + itself. You can get the former by giving a sole option '--version' + to the program, and the latter by running 'kpsewhich --version'. + The 'NEWS' and 'ChangeLog' files also contain the version number. + + * The hardware, operating system (including version), compiler, and + 'make' program you are using (the output of 'uname -a' is a start + on the first two, though incomplete). + + * Any options you gave to 'configure'. This is recorded in the + 'config.status' files. + + If you are reporting a bug in 'configure' itself, it's probably + system-dependent, and it will be unlikely the maintainers can do + anything useful if you merely report that thus-and-such is broken. + Therefore, you need to do some additional work: for some bugs, you + can look in the file 'config.log' where the test that failed should + appear, along with the compiler invocation and source program in + question. You can then compile it yourself by hand, and discover + why the test failed. Other 'configure' bugs do not involve the + compiler; in that case, the only recourse is to inspect the + 'configure' shell script itself, or the Autoconf macros that + generated 'configure'. + + * The log of all debugging output, if the bug is in path searching. + You can get this by setting the environment variable + 'KPATHSEA_DEBUG' to '-1' before running the program. Please look + at the log yourself to make sure the behavior is really a bug + before reporting it; perhaps "old" environment variable settings + are causing files not to be found, for example. + + * The contents of any input files necessary to reproduce the bug. + For bugs in DVI-reading programs, for example, this generally means + a DVI file (and any EPS or other files it uses)--TeX source files + are helpful, but the DVI file is required, because that's the + actual program input. + + * If you are sending a patch (do so if you can!), please do so in the + form of a context diff ('diff -c') against the original + distribution source. Any other form of diff is either not as + complete or harder for me to understand. Please also include a + 'ChangeLog' entry. + + * If the bug involved is an actual crash (i.e., core dump), it is + easy and useful to include a stack trace from a debugger (I + recommend the GNU debugger GDB (<https://gnu.org/software/gdb>). + If the cause is apparent (a 'NULL' value being dereferenced, for + example), please send the details along. If the program involved + is TeX or Metafont, and the crash is happening at apparently-sound + code, however, the bug may well be in the compiler, rather than in + the program or the library (*note TeX or Metafont failing: TeX or + Metafont failing.). + + * Any additional information that will be helpful in reproducing, + diagnosing, or fixing the bug. + + +File: kpathsea.info, Node: Mailing lists, Next: Debugging, Prev: Bug checklist, Up: Reporting bugs + +8.2 Mailing lists +================= + +Web2c and Kpathsea in general are discussed on the mailing list +<tex-k@tug.org>. You can subscribe and peruse the archives on the web +<https://lists.tug.org/tex-k>. + + You do not need to join to submit a report, nor will it affect +whether you get a response. Be aware that large data files are +sometimes included in bug reports. If this is a problem for you, do not +join the list. + + If you are looking for general TeX help, such as how to install a +full TeX system or how to use LaTeX, please see +<https://tug.org/begin.html>. + + +File: kpathsea.info, Node: Debugging, Next: Logging, Prev: Mailing lists, Up: Reporting bugs + +8.3 Debugging +============= + +Kpathsea provides a number of runtime debugging options, detailed below +by their names and corresponding numeric values. When the files you +expect aren't being found, the thing to do is enable these options and +examine the output. + + You can set these with some runtime argument (e.g., '-d') to the +program; in that case, you should use the numeric values described in +the program's documentation (which, for Dvipsk and Xdvik, are different +than those below). It's best to give the '-d' (or whatever) option +first, for maximal output. Dvipsk and Xdvik have additional +program-specific debugging options as well. + + You can also set the environment variable 'KPATHSEA_DEBUG'; in this +case, you should use the numbers below. If you run the program under a +debugger and set the instance variable 'kpse->debug', also use the +numbers below. + + In any case, by far the simplest value to use is '-1', which will +turn on all debugging output. This is usually better than guessing +which particular values will yield the output you need. + + Debugging output always goes to standard error, so you can redirect +it easily. For example, in Bourne-compatible shells: + dvips -d -1 ... 2>/tmp/debug + + It is sometimes helpful to run the standalone Kpsewhich utility +(*note Invoking kpsewhich::), instead of the original program. + + In any case, you cannot use the names below; you must always use +somebody's numbers. (Sorry.) To set more than one option, just sum the +corresponding numbers. + +'KPSE_DEBUG_STAT (1)' + Report 'stat'(2) calls. This is useful for verifying that your + directory structure is not forcing Kpathsea to do many additional + file tests (*note Slow path searching::, and *note Subdirectory + expansion::). If you are using an up-to-date 'ls-R' database + (*note Filename database::), this should produce no output unless a + nonexistent file that must exist is searched for. + +'KPSE_DEBUG_HASH (2)' + Report lookups in all hash tables: 'ls-R' and 'aliases' (*note + Filename database::); font aliases (*note Fontmap::); and config + file values (*note Config files::). Useful when expected values + are not being found, e.g.., file searches are looking at the disk + instead of using 'ls-R'. + +'KPSE_DEBUG_FOPEN (4)' + Report file openings and closings. Especially useful when your + system's file table is full, for seeing which files have been + opened but never closed. In case you want to set breakpoints in a + debugger: this works by redefining 'fopen' ('fclose') to be + 'kpse_fopen_trace' ('kpse_fclose_trace'). + +'KPSE_DEBUG_PATHS (8)' + Report general path information for each file type Kpathsea is + asked to search. This is useful when you are trying to track down + how a particular path got defined--from 'texmf.cnf', 'config.ps', + an environment variable, the compile-time default, etc. This is + the contents of the 'kpse_format_info_type' structure defined in + 'tex-file.h'. + +'KPSE_DEBUG_EXPAND (16)' + Report the directory list corresponding to each path element + Kpathsea searches. This is only relevant when Kpathsea searches + the disk, since 'ls-R' searches don't look through directory lists + in this way. + +'KPSE_DEBUG_SEARCH (32)' + Report on each file search: the name of the file searched for, the + path searched in, whether or not the file must exist (when drivers + search for 'cmr10.vf', it need not exist), and whether or not we + are collecting all occurrences of the file in the path (as with, + e.g., 'texmf.cnf' and 'texfonts.map'), or just the first (as with + most lookups). This can help you correlate what Kpathsea is doing + with what is in your input file. + +'KPSE_DEBUG_VARS (64)' + Report the value of each variable Kpathsea looks up. This is + useful for verifying that variables do indeed obtain their correct + values. + +'GSFTOPK_DEBUG (128)' + Activates debugging printout specific to 'gsftopk' program. + +'MAKETEX_DEBUG (512)' + If you use the optional 'mktex' programs instead of the traditional + shell scripts, this will report the name of the site file + ('mktex.cnf' by default) which is read, directories created by + 'mktexdir', the full path of the 'ls-R' database built by + 'mktexlsr', font map searches, 'MT_FEATURES' in effect, parameters + from 'mktexnam', filenames added by 'mktexupd', and some subsidiary + commands run by the programs. + +'MAKETEX_FINE_DEBUG (1024)' + When the optional 'mktex' programs are used, this will print + additional debugging info from functions internal to these + programs. + + Debugging output from Kpathsea is always written to standard error, +and begins with the string 'kdebug:'. (Except for hash table buckets, +which just start with the number, but you can only get that output +running under a debugger. See comments at the 'hash_summary_only' +variable in 'kpathsea/db.c'.) + + +File: kpathsea.info, Node: Logging, Next: Common problems, Prev: Debugging, Up: Reporting bugs + +8.4 Logging +=========== + +Kpathsea can record the time and filename found for each successful +search. This may be useful in finding good candidates for deletion when +your filesystem is full, or in discovering usage patterns at your site. + + To do this, define the environment or config file variable +'TEXMFLOG'. The value is the name of the file to append the information +to. The file is created if it doesn't exist, and appended to if it +does. + + Each successful search turns into one line in the log file: two words +separated by a space. The first word is the time of the search, as the +integer number of seconds since "the epoch", i.e., UTC midnight 1 +January 1970 (more precisely, the result of the 'time' system call). +The second word is the filename. + + For example, after 'setenv TEXMFLOG /tmp/log', running Dvips on +'story.dvi' appends the following lines: + + 774455887 /usr/local/share/texmf/dvips/config.ps + 774455887 /usr/local/share/texmf/dvips/psfonts.map + 774455888 /usr/local/share/texmf/dvips/texc.pro + 774455888 /usr/local/share/texmf/fonts/pk/ljfour/public/cm/cmbx10.600pk + 774455889 /usr/local/share/texmf/fonts/pk/ljfour/public/cm/cmsl10.600pk + 774455889 /usr/local/share/texmf/fonts/pk/ljfour/public/cm/cmr10.600pk + 774455889 /usr/local/share/texmf/dvips/texc.pro + +Only filenames that are absolute are recorded, to preserve some +semblance of privacy. + + In addition to this Kpathsea-specific logging, 'pdftex' provides an +option '-recorder' to write the names of all files accessed during a run +to the file 'BASEFILE.fls'. + + Finally, most systems provide a general tool to output each system +call, thus including opening and closing files. It might be named +'strace', 'truss', 'struss', or something else. + + +File: kpathsea.info, Node: Common problems, Prev: Logging, Up: Reporting bugs + +8.5 Common problems +=================== + +Here are some common problems with configuration, compilation, linking, +execution, ... + +* Menu: + +* Unable to find files:: If your program can't find fonts (or whatever). +* Slow path searching:: If it takes forever to find anything. +* Unable to generate fonts:: If mktexpk fails. +* TeX or Metafont failing:: Likely compiler bugs. + + +File: kpathsea.info, Node: Unable to find files, Next: Slow path searching, Up: Common problems + +8.5.1 Unable to find files +-------------------------- + +If a program complains it cannot find fonts (or other input files), any +of several things might be wrong. In any case, you may find the +debugging options helpful. *Note Debugging::. + + * Perhaps you simply haven't installed all the necessary files; the + basic fonts and input files are distributed separately from the + programs. *Note unixtex.ftp::. + + * You have (perhaps unknowingly) told Kpathsea to use search paths + that don't reflect where the files actually are. One common cause + is having environment variables set from a previous installation, + thus overriding what you carefully set in 'texmf.cnf' (*note + Supported file formats::). System '/etc/profile' or other files + such may be the culprit. + + * Your files reside in a directory that is only pointed to via a + symbolic link, in a leaf directory and is not listed in 'ls-R'. + + Unfortunately, Kpathsea's subdirectory searching has an + irremediable deficiency: If a directory D being searched for + subdirectories contains plain files and symbolic links to other + directories, but no true subdirectories, D will be considered a + leaf directory, i.e., the symbolic links will not be followed. + *Note Subdirectory expansion::. + + You can work around this problem by creating an empty dummy + subdirectory in D. Then D will no longer be a leaf, and the + symlinks will be followed. + + The directory immediately followed by the '//' in the path + specification, however, is always searched for subdirectories, even + if it is a leaf. Presumably you would not have asked for the + directory to be searched for subdirectories if you didn't want it + to be. + + * If the fonts (or whatever) don't already exist, 'mktexpk' (or + 'mktexmf' or 'mktextfm') will try to create them. If these rather + complicated shell scripts fail, you'll eventually get an error + message saying something like 'Can't find font FONTNAME'. The best + solution is to fix (or at least report) the bug in 'mktexpk'; the + workaround is to generate the necessary fonts by hand with + Metafont, or to grab them from a CTAN site (*note unixtex.ftp::). + + * There is a bug in the library. *Note Reporting bugs::. + + +File: kpathsea.info, Node: Slow path searching, Next: Unable to generate fonts, Prev: Unable to find files, Up: Common problems + +8.5.2 Slow path searching +------------------------- + +If your program takes an excessively long time to find fonts or other +input files, but does eventually succeed, here are some possible +culprits: + + * Most likely, you just have a lot of directories to search, and that + takes a noticeable time. The solution is to create and maintain a + separate 'ls-R' file that lists all the files in your main TeX + hierarchy. *Note Filename database::. Kpathsea always uses 'ls-R' + if it's present; there's no need to recompile or reconfigure any of + the programs. + + * Your recursively-searched directories (e.g., + '/usr/local/share/texmf/fonts//'), contain a mixture of files and + directories. This prevents Kpathsea from using a useful + optimization (*note Subdirectory expansion::). + + It is best to have only directories (and perhaps a 'README') in the + upper levels of the directory structure, and it's very important to + have _only_ files, and no subdirectories, in the leaf directories + where the dozens of TFM, PK, or whatever files reside. + + In any case, you may find the debugging options helpful in +determining precisely when the disk or network is being pounded. *Note +Debugging::. + + +File: kpathsea.info, Node: Unable to generate fonts, Next: TeX or Metafont failing, Prev: Slow path searching, Up: Common problems + +8.5.3 Unable to generate fonts +------------------------------ + +Metafont outputs fonts in bitmap format, tuned for a particular device +at a particular resolution, in order to allow for the highest-possible +quality of output. Some DVI-to-whatever programs, such as Dvips, try to +generate these on the fly when they are needed, but this generation may +fail in several cases. + + If 'mktexpk' runs, but fails with this error: + mktexpk: Can't guess mode for NNN dpi devices. + mktexpk: Use a config file to specify the mode, or update me. + you need to ensure the resolution and mode match; just specifying the +resolution, as in '-D 360', is not enough. + + You can specify the mode name with the '-mode' option on the Dvips +command line, or in a Dvips configuration file (*note (dvips)Config +files::), such as 'config.ps' in your document directory, '~/.dvipsrc' +in your home directory, or in a system directory (again named +'config.ps'). (Other drivers use other files, naturally.) + + For example, if you need 360dpi fonts, you could include this in a +configuration file: + D 360 + M lqmed + + If Metafont runs, but generates fonts at the wrong resolution or for +the wrong device, most likely 'mktexpk''s built-in guess for the mode is +wrong, and you should override it as above. + + See <https://ctan.org/pkg/modes> for a list of resolutions and mode +names for most devices (additional submissions are welcome). + + If Metafont runs but generates fonts at a resolution of 2602dpi (and +prints out the name of each character as well as just a character +number, and maybe tries to display the characters), then your Metafont +base file probably hasn't been made properly. (It's using the default +'proof' mode, instead of an actual device mode.) To make a proper +'plain.base', assuming the local mode definitions are contained in a +file 'modes.mf', run the following command (assuming Unix): + + inimf "plain; input modes; dump" + +Then copy the 'plain.base' file from the current directory to where the +base files are stored on your system ('/usr/local/share/texmf/web2c' by +default), and make a link (either hard or soft) from 'plain.base' to +'mf.base' in that directory. *Note (web2c)inimf invocation::. + + If 'mf' is a command not found at all by 'mktexpk', then you need to +install Metafont (*note unixtex.ftp::). + + +File: kpathsea.info, Node: TeX or Metafont failing, Prev: Unable to generate fonts, Up: Common problems + +8.5.4 TeX or Metafont failing +----------------------------- + +If TeX or Metafont get a segmentation fault or otherwise fail while +running a normal input file, the problem is usually a compiler bug +(unlikely as that may sound). Even if the trip and trap tests are +passed, problems may lurk. Optimization occasionally causes trouble in +programs other than TeX and Metafont themselves, too. + + For a workaround, if you enabled any optimization flags, it's best to +omit optimization entirely. In any case, the way to find the facts is +to run the program under the debugger and see where it's failing. + + Also, if you have trouble with a system C compiler, I advise trying +the GNU C compiler. And vice versa, unfortunately; but in that case I +also recommend reporting a bug to the GCC mailing list; see *note +(gcc)Bugs::. + + To report compiler bugs effectively requires perseverance and +perspicacity: you must find the miscompiled line, and that usually +involves delving backwards in time from the point of error, checking +through TeX's (or whatever program's) data structures. Good luck. + + +File: kpathsea.info, Node: Index, Prev: Reporting bugs, Up: Top + +Index +***** + + +* Menu: + +* !! and casefolding: Casefolding examples. + (line 57) +* !! in path specifications: ls-R. (line 57) +* !! in 'TEXMFDBS': ls-R. (line 11) +* $ expansion: Variable expansion. (line 6) +* --all: Path searching options. + (line 12) +* --casefold-search: Path searching options. + (line 19) +* --cnf-line: Path searching options. + (line 28) +* '--cnf-line', source for path: Path sources. (line 9) +* --color=tty: ls-R. (line 25) +* --debug=NUM: Auxiliary tasks. (line 9) +* --dpi=NUM: Path searching options. + (line 49) +* --engine=NAME: Path searching options. + (line 53) +* --expand-braces=STRING: Auxiliary tasks. (line 12) +* --expand-path=STRING: Auxiliary tasks. (line 16) +* --expand-var=STRING: Auxiliary tasks. (line 34) +* --format=NAME: Path searching options. + (line 69) +* --help: Standard options. (line 8) +* --help-formats: Auxiliary tasks. (line 42) +* --interactive: Path searching options. + (line 151) +* --mktex=FILETYPE: Path searching options. + (line 156) +* --mode=STRING: Path searching options. + (line 162) +* --must-exist: Path searching options. + (line 167) +* --no-casefold-search: Path searching options. + (line 19) +* --no-mktex=FILETYPE: Path searching options. + (line 156) +* --path=STRING: Path searching options. + (line 172) +* --progname=NAME: Path searching options. + (line 180) +* --safe-in-name=NAME: Auxiliary tasks. (line 48) +* --safe-out-name=NAME: Auxiliary tasks. (line 48) +* --show-path=NAME: Auxiliary tasks. (line 54) +* --subdir=STRING: Path searching options. + (line 185) +* --var-brace-value=VARIABLE: Auxiliary tasks. (line 60) +* --var-value=VARIABLE: Auxiliary tasks. (line 74) +* --version: Standard options. (line 11) +* --with-mktextex-default: mktex configuration. (line 12) +* --without-mktexfmt-default: mktex configuration. (line 12) +* --without-mktexmf-default: mktex configuration. (line 12) +* --without-mktexocp-default: mktex configuration. (line 12) +* --without-mktexofm-default: mktex configuration. (line 12) +* --without-mktexpk-default: mktex configuration. (line 12) +* --without-mktextfm-default: mktex configuration. (line 12) +* -1 debugging value: Debugging. (line 23) +* -A option to 'ls': ls-R. (line 39) +* -D NUM: Path searching options. + (line 49) +* -iname, find predicate: Casefolding examples. + (line 78) +* -L option to 'ls': ls-R. (line 44) +* . directories, ignored: ls-R. (line 39) +* . files: ls-R. (line 39) +* .2602gf: Unable to generate fonts. + (line 36) +* .afm: Supported file formats. + (line 22) +* .base: Supported file formats. + (line 26) +* .bib: Supported file formats. + (line 30) +* .bltxml: Supported file formats. + (line 34) +* .bst: Supported file formats. + (line 38) +* .cid: Supported file formats. + (line 68) +* .cmap: Supported file formats. + (line 46) +* .cnf: Supported file formats. + (line 49) +* .dll: Supported file formats. + (line 42) +* .enc: Supported file formats. + (line 61) +* .eps: Supported file formats. + (line 79) +* .epsi: Supported file formats. + (line 79) +* .fea: Supported file formats. + (line 71) +* .fmt: Supported file formats. + (line 64) +* .ist: Supported file formats. + (line 84) +* .lig: Supported file formats. + (line 88) +* .map: Supported file formats. + (line 94) +* .mem: Supported file formats. + (line 97) +* .mf: Supported file formats. + (line 105) +* .mft: Supported file formats. + (line 113) +* .mlbib: Supported file formats. + (line 121) +* .mlbst: Supported file formats. + (line 125) +* .mp: Supported file formats. + (line 129) +* .ocp: Supported file formats. + (line 137) +* .ofm: Supported file formats. + (line 141) +* .opl: Supported file formats. + (line 148) +* .otp: Supported file formats. + (line 151) +* .ovf: Supported file formats. + (line 154) +* .ovp: Supported file formats. + (line 157) +* .pfa: Supported file formats. + (line 211) +* .pfb: Supported file formats. + (line 211) +* .pk: Supported file formats. + (line 164) +* .pool: Supported file formats. + (line 109) +* .pool <1>: Supported file formats. + (line 133) +* .pool <2>: Supported file formats. + (line 195) +* .pro: Supported file formats. + (line 169) +* .PROGNAME qualifier in 'texmf.cnf': Config files. (line 50) +* .rhosts, writable by TeX: Security. (line 10) +* .ris: Supported file formats. + (line 173) +* .sfd: Supported file formats. + (line 177) +* .so: Supported file formats. + (line 42) +* .tex: Supported file formats. + (line 180) +* .tex file, included in 'ls-R': ls-R. (line 39) +* .tfm: Supported file formats. + (line 199) +* .ttc: Supported file formats. + (line 207) +* .ttf: Supported file formats. + (line 207) +* .vf: Supported file formats. + (line 219) +* .w: Supported file formats. + (line 53) +* .web: Supported file formats. + (line 53) +* .web <1>: Supported file formats. + (line 223) +* / may not be /: Searching overview. (line 13) +* /, trailing in home directory: Tilde expansion. (line 19) +* //: Subdirectory expansion. + (line 6) +* /etc/profile: Unable to find files. + (line 14) +* /etc/profile and aliases: ls-R. (line 25) +* /var/tmp/texfonts: mktex configuration. (line 113) +* 2602gf: Unable to generate fonts. + (line 36) +* 8.3 filenames, using: mktex configuration. (line 68) +* : may not be :: Searching overview. (line 13) +* :: expansion: Default expansion. (line 6) +* ; translated to ':' in 'texmf.cnf': Config files. (line 66) +* = omitted in 'texmf.cnf' and misparsing: Config files. (line 93) +* \, line continuation in 'texmf.cnf': Config files. (line 37) +* \openin: Searching overview. (line 31) +* \special, suppressing warnings about: Suppressing warnings. + (line 31) +* { expansion: Brace expansion. (line 6) +* ~ expansion: Tilde expansion. (line 6) +* absolute filenames: Searching overview. (line 58) +* access system call: Casefolding examples. + (line 86) +* access warnings: Searching overview. (line 63) +* AFMFONTS: Supported file formats. + (line 22) +* aliases for fonts: Fontmap. (line 6) +* aliases, for filenames: Filename aliases. (line 6) +* all: Suppressing warnings. + (line 13) +* all matches, finding: Path searching options. + (line 12) +* alphabetical order, not: Subdirectory expansion. + (line 6) +* announcement mailing list: Mailing lists. (line 6) +* API, re-entrant: Programming overview. + (line 16) +* append-only directories and 'mktexpk': Security. (line 36) +* appendonlydir: mktex configuration. (line 60) +* Apple filesystem, case-insensitive: Casefolding rationale. + (line 6) +* arguments to 'mktex': mktex script arguments. + (line 6) +* argv[0]: Calling sequence. (line 14) +* autoconf, recommended: Calling sequence. (line 117) +* automounter, and 'ls-R': ls-R. (line 46) +* auxiliary tasks: Auxiliary tasks. (line 6) +* Bach, Johann Sebastian: Default expansion. (line 41) +* backslash-newline: Config files. (line 37) +* basic glyph lookup: Basic glyph lookup. (line 6) +* Berry, Karl: History. (line 12) +* BIBINPUTS: Supported file formats. + (line 30) +* BIBINPUTS <1>: Supported file formats. + (line 121) +* blank lines, in 'texmf.cnf': Config files. (line 35) +* BLTXMLINPUTS: Supported file formats. + (line 34) +* brace expansion: Brace expansion. (line 6) +* Breitenlohner, Peter: History. (line 78) +* BSTINPUTS: Supported file formats. + (line 38) +* BSTINPUTS <1>: Supported file formats. + (line 125) +* bug address: Reporting bugs. (line 6) +* bug checklist: Bug checklist. (line 6) +* bug mailing list: Mailing lists. (line 6) +* bugs, reporting: Reporting bugs. (line 6) +* c-*.h: Calling sequence. (line 117) +* c-auto.h: Programming overview. + (line 35) +* cache of fonts, local: Security. (line 22) +* calling sequence: Calling sequence. (line 6) +* casefolding examples: Casefolding examples. + (line 6) +* casefolding fallback rationale: Casefolding rationale. + (line 6) +* casefolding search: Casefolding search. (line 6) +* ChangeLog entry: Bug checklist. (line 52) +* checklist for bug reports: Bug checklist. (line 6) +* checksum: Suppressing warnings. + (line 16) +* circle fonts: Fontmap. (line 19) +* client_path in 'kpse->format_info': Calling sequence. (line 47) +* CLUAINPUTS: Supported file formats. + (line 42) +* CMAPFONTS: Supported file formats. + (line 46) +* cmr10, as fallback font: Fallback font. (line 15) +* cmr10.vf: Searching overview. (line 31) +* cnf.c: Config files. (line 112) +* cnf.h: Programming with config files. + (line 27) +* comments, in fontmap files: Fontmap. (line 27) +* comments, in 'texmf.cnf': Config files. (line 27) +* comments, making: Introduction. (line 29) +* common features in glyph lookup: Basic glyph lookup. (line 6) +* common problems: Common problems. (line 6) +* compilation value, source for path: Path sources. (line 23) +* compiler bugs: TeX or Metafont failing. + (line 6) +* compiler bugs, finding: TeX or Metafont failing. + (line 21) +* conditions for use: Introduction. (line 32) +* config files: Config files. (line 6) +* config files, for Kpathsea-using programs: Calling sequence. + (line 47) +* config files, programming with: Programming with config files. + (line 6) +* config.h: Programming overview. + (line 35) +* config.log: Bug checklist. (line 24) +* config.ps: Specially-recognized files. + (line 16) +* config.ps, search path for: Supported file formats. + (line 57) +* config.status: Bug checklist. (line 27) +* configuration bugs: Bug checklist. (line 27) +* configuration file, source for path: Path sources. (line 20) +* configuration files as shell scripts.: Config files. (line 86) +* configuration of 'mktex' scripts: mktex configuration. (line 6) +* 'configure' options for 'mktex' scripts: mktex configuration. + (line 12) +* context diff: Bug checklist. (line 52) +* continuation character: Config files. (line 37) +* core dumps, reporting: Bug checklist. (line 58) +* crashes, reporting: Bug checklist. (line 58) +* CWEBINPUTS: Supported file formats. + (line 53) +* database search: Searching overview. (line 17) +* database, for filenames: Filename database. (line 6) +* database, format of: Database format. (line 6) +* debug.h: Debugging. (line 6) +* debugger: Bug checklist. (line 58) +* debugging: Debugging. (line 6) +* debugging options, in Kpathsea-using program: Calling sequence. + (line 39) +* debugging output: Debugging. (line 27) +* default expansion: Default expansion. (line 6) +* default_texsizes: Fallback font. (line 6) +* device, wrong: Unable to generate fonts. + (line 29) +* directories, making append-only: mktex configuration. (line 61) +* directory permissions: Security. (line 51) +* directory structure, for TeX files: TeX directory structure. + (line 6) +* disabling 'mktex' scripts: mktex configuration. (line 6) +* disk search: Searching overview. (line 22) +* disk searching, avoiding: ls-R. (line 57) +* disk usage, reducing: Logging. (line 6) +* doc files: Supported file formats. + (line 185) +* DOS compatible names: mktex configuration. (line 68) +* dosnames: mktex configuration. (line 67) +* dot files: ls-R. (line 39) +* doubled colons: Default expansion. (line 6) +* dpiNNN directories: mktex configuration. (line 68) +* DVILJMAKEPK: mktex script names. (line 32) +* DVILJSIZES: Fallback font. (line 6) +* dvipdfmx.cfg: Specially-recognized files. + (line 19) +* DVIPSFONTS: Supported file formats. + (line 254) +* DVIPSHEADERS: Supported file formats. + (line 211) +* DVIPSMAKEPK: mktex script names. (line 32) +* DVIPSSIZES: Fallback font. (line 6) +* dynamic creation of files: mktex scripts. (line 6) +* EC fonts, and dynamic source creation: mktex scripts. (line 6) +* elt-dirs.c: Subdirectory expansion. + (line 41) +* elt-dirs.c <1>: Subdirectory expansion. + (line 48) +* enabling 'mktex' scripts: mktex configuration. (line 6) +* ENCFONTS: Supported file formats. + (line 61) +* engine name: Path searching options. + (line 53) +* environment variable, source for path: Path sources. (line 12) +* environment variables for TeX: Supported file formats. + (line 6) +* environment variables in paths: Variable expansion. (line 6) +* environment variables, old: Unable to find files. + (line 14) +* epoch, seconds since: Logging. (line 15) +* error message macros: Calling sequence. (line 22) +* examples, of casefolding searches: Casefolding examples. + (line 6) +* excessive startup time: Slow path searching. (line 6) +* expand.c: Brace expansion. (line 26) +* expanding symlinks: Calling sequence. (line 31) +* expansion, default: Default expansion. (line 6) +* expansion, path element: Searching overview. (line 49) +* expansion, search path: Path expansion. (line 6) +* expansion, subdirectory: Subdirectory expansion. + (line 6) +* expansion, tilde: Tilde expansion. (line 6) +* expansion, variable: Variable expansion. (line 6) +* explicitly relative filenames: Searching overview. (line 58) +* extensions, filename: File lookup. (line 24) +* externally-built filename database: Filename database. (line 6) +* extra colons: Default expansion. (line 6) +* failed 'mktex...' script invocation: mktex script names. (line 35) +* fallback font: Fallback font. (line 6) +* fallback resolutions: Fallback font. (line 6) +* FAQ, Kpathsea: Common problems. (line 6) +* Farwell, Matthew: Subdirectory expansion. + (line 22) +* file formats, supported: Supported file formats. + (line 6) +* file lookup: File lookup. (line 6) +* file permissions: Security. (line 47) +* file types, registering new: Programming overview. + (line 41) +* filename aliases: Filename aliases. (line 6) +* filename database: Filename database. (line 6) +* filenames, absolute or explicitly relative: Searching overview. + (line 58) +* files, unable to find: Unable to find files. + (line 6) +* filesystem search: Searching overview. (line 22) +* filesystem, case-(in)sensitive: Casefolding rationale. + (line 6) +* Findutils, GNU package: Casefolding examples. + (line 78) +* floating directories: Searching overview. (line 22) +* fmtutil: mktex script names. (line 10) +* fmtutil.cnf: Specially-recognized files. + (line 22) +* fmtutils.cnf: mktex configuration. (line 24) +* font alias files: Fontmap. (line 6) +* font generation failures: Unable to generate fonts. + (line 6) +* font of last resort: Fallback font. (line 6) +* font set, infinite: mktex scripts. (line 6) +* FONTCIDMAPS: Supported file formats. + (line 68) +* FONTFEATURES: Supported file formats. + (line 71) +* fontmap files: Fontmap. (line 6) +* fontmaps: mktex configuration. (line 86) +* fontmaps <1>: mktex configuration. (line 87) +* fontname: mktex configuration. (line 87) +* fontnames, arbitrary length: Fontmap. (line 15) +* FOOINPUTS: Supported file formats. + (line 236) +* FOOINPUTS <1>: Supported file formats. + (line 239) +* fopen, redefined: Debugging. (line 54) +* format of external database: Database format. (line 6) +* ftp.cs.stanford.edu: unixtex.ftp. (line 20) +* ftp.tug.org: unixtex.ftp. (line 6) +* fundamental purpose of Kpathsea: Introduction. (line 6) +* gdb, recommended: Bug checklist. (line 58) +* gf: Supported file formats. + (line 75) +* GFFONTS: Supported file formats. + (line 75) +* globally writable directories: Security. (line 30) +* glyph lookup: Glyph lookup. (line 6) +* glyph lookup bitmap tolerance: Basic glyph lookup. (line 15) +* GLYPHFONTS: Supported file formats. + (line 75) +* GLYPHFONTS <1>: Supported file formats. + (line 164) +* glyphlist.txt: Specially-recognized files. + (line 25) +* GNU C compiler bugs: TeX or Metafont failing. + (line 16) +* GNU General Public License: Introduction. (line 32) +* group-writable directories: Security. (line 40) +* GSFTOPK_DEBUG (128): Debugging. (line 88) +* hash table buckets, printing: Debugging. (line 105) +* hash table routines: Calling sequence. (line 110) +* hash_summary_only variable for debugging: Debugging. (line 105) +* history of Kpathsea: History. (line 6) +* Hoekwater, Taco: History. (line 78) +* home directories in paths: Tilde expansion. (line 6) +* HOME, as ~ expansion: Tilde expansion. (line 6) +* identifiers, characters valid in: Config files. (line 47) +* include fontmap directive: Fontmap. (line 36) +* INDEXSTYLE: Supported file formats. + (line 84) +* input lines, reading: Calling sequence. (line 110) +* interactive query: Path searching options. + (line 151) +* interface, not frozen: Introduction. (line 29) +* introduction: Introduction. (line 6) +* 'kdebug:': Debugging. (line 105) +* kdefault.c: Default expansion. (line 48) +* Knuth, Donald E.: History. (line 6) +* Knuth, Donald E., archive of programs by: unixtex.ftp. (line 20) +* Kpathsea config file, source for path: Path sources. (line 20) +* kpathsea.h: Programming overview. + (line 26) +* kpathsea_cnf_get: Programming with config files. + (line 27) +* KPATHSEA_DEBUG: Calling sequence. (line 28) +* KPATHSEA_DEBUG <1>: Debugging. (line 18) +* kpathsea_find_file: File lookup. (line 38) +* kpathsea_find_file <1>: Calling sequence. (line 62) +* kpathsea_find_glyph: Glyph lookup. (line 26) +* kpathsea_finish: Calling sequence. (line 106) +* kpathsea_init_prog: Fallback font. (line 15) +* kpathsea_init_prog <1>: Calling sequence. (line 53) +* kpathsea_in_name_ok: Calling sequence. (line 101) +* kpathsea_new: Calling sequence. (line 9) +* kpathsea_open_file: Calling sequence. (line 74) +* kpathsea_out_name_ok: Calling sequence. (line 82) +* kpathsea_set_program_name: Calling sequence. (line 14) +* kpathsea_var_value: Programming with config files. + (line 10) +* KPATHSEA_WARNING: Config files. (line 18) +* kpse->debug: Debugging. (line 6) +* kpse->debug <1>: Debugging. (line 18) +* kpse->debug variable: Calling sequence. (line 39) +* kpse->format_info: Calling sequence. (line 47) +* kpse->invocation_name: Calling sequence. (line 22) +* kpse->invocation_short_name: Calling sequence. (line 22) +* kpse->program_name: Calling sequence. (line 22) +* kpsewhich: Invoking kpsewhich. (line 6) +* Kpsewhich, and debugging: Debugging. (line 31) +* KPSE_BITMAP_TOLERANCE: Basic glyph lookup. (line 15) +* KPSE_DEBUG_EXPAND (16): Debugging. (line 68) +* KPSE_DEBUG_FOPEN (4): Debugging. (line 53) +* KPSE_DEBUG_HASH (2): Debugging. (line 46) +* KPSE_DEBUG_PATHS (8): Debugging. (line 60) +* KPSE_DEBUG_SEARCH (32): Debugging. (line 74) +* KPSE_DEBUG_STAT (1): Debugging. (line 38) +* KPSE_DEBUG_VARS (64): Debugging. (line 83) +* KPSE_DOT expansion: KPSE_DOT expansion. (line 6) +* kpse_format_info_type: Debugging. (line 61) +* last-resort font: Fallback font. (line 6) +* lcircle10: Fontmap. (line 19) +* leading colons: Default expansion. (line 6) +* leaf directories wrongly guessed: Unable to find files. + (line 21) +* leaf directory trick: Subdirectory expansion. + (line 22) +* license for using the library: Introduction. (line 32) +* LIGFONTS: Supported file formats. + (line 88) +* lines, reading arbitrary-length: Calling sequence. (line 110) +* Linux File System Standard: mktex configuration. (line 113) +* local cache of fonts: Security. (line 22) +* log file: Logging. (line 6) +* logging successful searches: Logging. (line 6) +* lost+found directory: Searching overview. (line 63) +* lostchar: Suppressing warnings. + (line 19) +* ls-R: Supported file formats. + (line 91) +* ls-R database file: ls-R. (line 6) +* ls-R, simplest build: ls-R. (line 22) +* Mac filesystem, case-insensitive: Casefolding rationale. + (line 6) +* MacKenzie, David: History. (line 44) +* MacKenzie, David <1>: Subdirectory expansion. + (line 22) +* magic characters: Searching overview. (line 13) +* mailing lists: Mailing lists. (line 6) +* MAKETEX_DEBUG (512): Debugging. (line 91) +* MAKETEX_FINE_DEBUG (1024): Debugging. (line 100) +* memory allocation routines: Calling sequence. (line 110) +* metafont driver files: mktex configuration. (line 93) +* Metafont failures: TeX or Metafont failing. + (line 6) +* Metafont installation: Unable to generate fonts. + (line 51) +* Metafont making too-large fonts: Unable to generate fonts. + (line 36) +* Metafont using the wrong device: Unable to generate fonts. + (line 29) +* MFBASES: Supported file formats. + (line 26) +* MFINPUTS: Supported file formats. + (line 105) +* MFPOOL: Supported file formats. + (line 109) +* MFTINPUTS: Supported file formats. + (line 113) +* MISCFONTS: Supported file formats. + (line 117) +* mismatched checksum warnings: Suppressing warnings. + (line 17) +* missfont.log: mktex script names. (line 35) +* MISSFONT_LOG: mktex script names. (line 40) +* missing character warnings: Suppressing warnings. + (line 20) +* mkocp: mktex script names. (line 18) +* mkofm: mktex script names. (line 21) +* 'mktex' script configuration: mktex configuration. (line 6) +* 'mktex' script names: mktex script names. (line 6) +* 'mktex' scripts: mktex scripts. (line 6) +* mktex.cnf: Specially-recognized files. + (line 28) +* mktex.cnf <1>: mktex configuration. (line 29) +* mktex.opt: mktex configuration. (line 29) +* mktex.opt <1>: mktex configuration. (line 39) +* mktexdir: mktex configuration. (line 61) +* mktexfmt: mktex script names. (line 10) +* mktexmf: mktex script names. (line 15) +* mktexpk: mktex script names. (line 24) +* 'mktexpk' can't guess mode: Unable to generate fonts. + (line 12) +* mktextex: mktex script names. (line 27) +* mktextfm: mktex script names. (line 30) +* MLBIBINPUTS: Supported file formats. + (line 121) +* MLBSTINPUTS: Supported file formats. + (line 125) +* mode directory, omitting: mktex configuration. (line 98) +* Morgan, Tim: History. (line 12) +* MPINPUTS: Supported file formats. + (line 129) +* MPMEMS: Supported file formats. + (line 97) +* MPPOOL: Supported file formats. + (line 133) +* MPSUPPORT: Supported file formats. + (line 101) +* MT_FEATURES: mktex configuration. (line 39) +* multiple TeX hierarchies: Brace expansion. (line 20) +* must exist: Searching overview. (line 31) +* names for 'mktex' scripts: mktex script names. (line 6) +* Neumann, Gustaf: History. (line 56) +* NFS and 'ls-R': ls-R. (line 46) +* nomfdrivers: mktex configuration. (line 92) +* nomode: mktex configuration. (line 97) +* none: Suppressing warnings. + (line 23) +* null pointers, dereferencing: Bug checklist. (line 58) +* numeric debugging values: Debugging. (line 34) +* obtaining TeX: unixtex.ftp. (line 6) +* OCPINPUTS: Supported file formats. + (line 137) +* OFMFONTS: Supported file formats. + (line 141) +* online Metafont display, spurious: Unable to generate fonts. + (line 36) +* OPENTYPEFONTS: Supported file formats. + (line 145) +* optimization caveat: TeX or Metafont failing. + (line 12) +* options for debugging: Debugging. (line 6) +* OTPINPUTS: Supported file formats. + (line 151) +* overview of path searching: Searching overview. (line 6) +* overview of programming with Kpathsea: Programming overview. + (line 6) +* OVFFONTS: Supported file formats. + (line 154) +* OVPFONTS: Supported file formats. + (line 157) +* path expansion: Path expansion. (line 6) +* path searching: Path searching. (line 6) +* path searching options: Path searching options. + (line 6) +* path searching, overview: Searching overview. (line 6) +* path searching, standalone: Invoking kpsewhich. (line 6) +* path sources: Path sources. (line 6) +* pathsearch.h: Programming overview. + (line 26) +* pc Pascal compiler: History. (line 12) +* pdfglyphlist.txt: Specially-recognized files. + (line 31) +* pdftex.cfg: Specially-recognized files. + (line 34) +* PDFTEXCONFIG: Supported file formats. + (line 161) +* pdftexconfig.tex: Specially-recognized files. + (line 34) +* permission denied: Searching overview. (line 63) +* permissions, directory: Security. (line 51) +* permissions, file: Security. (line 47) +* PKFONTS: Supported file formats. + (line 164) +* plain.base: Unable to generate fonts. + (line 46) +* privacy, semblance of: Logging. (line 32) +* problems, common: Common problems. (line 6) +* proginit.h: Calling sequence. (line 53) +* program-varying paths: Supported file formats. + (line 12) +* programming overview: Programming overview. + (line 6) +* programming with config files: Programming with config files. + (line 6) +* programming with Kpathsea: Calling sequence. (line 6) +* programs using the library: Introduction. (line 13) +* proof mode: Unable to generate fonts. + (line 36) +* PSHEADERS: Supported file formats. + (line 169) +* pxp Pascal preprocessor: History. (line 12) +* quoting variable values: Variable expansion. (line 17) +* rationale for casefolding fallback: Casefolding rationale. + (line 6) +* re-entrant API: Programming overview. + (line 16) +* readable: Suppressing warnings. + (line 26) +* reading arbitrary-length lines: Calling sequence. (line 110) +* recording successful searches: Logging. (line 6) +* relative filenames: Searching overview. (line 58) +* reporting bugs: Reporting bugs. (line 6) +* resident.c: Calling sequence. (line 47) +* resolution, setting: Path searching options. + (line 49) +* resolutions, last-resort: Fallback font. (line 6) +* retrieving TeX: unixtex.ftp. (line 6) +* right-hand side of variable assignments: Config files. (line 57) +* RISINPUTS: Supported file formats. + (line 173) +* Rokicki, Tom: History. (line 12) +* root user: Tilde expansion. (line 19) +* runtime configuration files: Config files. (line 6) +* runtime debugging: Debugging. (line 6) +* Sauter fonts, and dynamic source creation: mktex scripts. (line 6) +* scripts for file creation: mktex scripts. (line 6) +* search path, defined: Searching overview. (line 6) +* search, case-insensitive: Casefolding search. (line 6) +* searching for files: File lookup. (line 6) +* searching for glyphs: Glyph lookup. (line 6) +* searching overview: Searching overview. (line 6) +* searching the database: Searching overview. (line 17) +* searching the disk: Searching overview. (line 22) +* security considerations: Security. (line 6) +* SELFAUTODIR: Calling sequence. (line 31) +* SELFAUTOLOC: Calling sequence. (line 31) +* SELFAUTOPARENT: Calling sequence. (line 31) +* sending patches: Bug checklist. (line 52) +* setgid scripts: Security. (line 40) +* SFDFONTS: Supported file formats. + (line 177) +* shell scripts as configuration files: Config files. (line 86) +* shell variables: Variable expansion. (line 17) +* shell_escape, example for code: Programming with config files. + (line 10) +* site overrides for 'mktex...': mktex configuration. (line 29) +* skeleton TeX directory: TeX directory structure. + (line 6) +* slow startup time: Slow path searching. (line 6) +* source files: Supported file formats. + (line 188) +* sources for search paths: Path sources. (line 6) +* special: Suppressing warnings. + (line 30) +* stack trace: Bug checklist. (line 58) +* standalone path searching: Invoking kpsewhich. (line 6) +* standard error and debugging output: Debugging. (line 27) +* standard options: Standard options. (line 6) +* startup time, excessive: Slow path searching. (line 6) +* string routines: Calling sequence. (line 110) +* strip: mktex configuration. (line 107) +* stripsupplier: mktex configuration. (line 101) +* striptypeface: mktex configuration. (line 104) +* st_nlink: Subdirectory expansion. + (line 26) +* ST_NLINK_TRICK: Subdirectory expansion. + (line 38) +* subdirectory searching: Subdirectory expansion. + (line 6) +* suffixes, filename: File lookup. (line 24) +* suggestions, making: Introduction. (line 29) +* Sun 2: History. (line 12) +* supplier directory, omitting: mktex configuration. (line 102) +* supplier directory, omitting <1>: mktex configuration. (line 108) +* supported file formats: Supported file formats. + (line 6) +* suppressing warnings: Suppressing warnings. + (line 6) +* symbolic links not found: Unable to find files. + (line 21) +* symbolic links, and 'ls-R': ls-R. (line 44) +* symlinks, resolving: Calling sequence. (line 31) +* system C compiler bugs: TeX or Metafont failing. + (line 16) +* system-dependent casefolding behavior: Casefolding rationale. + (line 6) +* T1FONTS: Supported file formats. + (line 211) +* T1INPUTS: Supported file formats. + (line 211) +* T42FONTS: Supported file formats. + (line 216) +* tcfmgr.map: Specially-recognized files. + (line 46) +* TDS: TeX directory structure. + (line 6) +* TeX directory structure: TeX directory structure. + (line 6) +* TeX environment variables: Supported file formats. + (line 6) +* TeX failures: TeX or Metafont failing. + (line 6) +* TeX file lookup: File lookup. (line 6) +* TeX glyph lookup: Glyph lookup. (line 6) +* TeX support: TeX support. (line 6) +* TeX Users Group: Introduction. (line 43) +* tex-file.c: File lookup. (line 38) +* tex-file.h: Programming overview. + (line 26) +* tex-glyph.c: Glyph lookup. (line 26) +* tex-glyph.h: Programming overview. + (line 26) +* tex-k@tug.org: Mailing lists. (line 6) +* tex-k@tug.org (bug address): Reporting bugs. (line 6) +* tex.web: unixtex.ftp. (line 20) +* TEXBIB: Supported file formats. + (line 30) +* TEXBIB <1>: Supported file formats. + (line 121) +* TEXCONFIG: Supported file formats. + (line 57) +* TEXDOCS: Supported file formats. + (line 185) +* TEXFONTMAPS: Supported file formats. + (line 94) +* TEXFONTS: Supported file formats. + (line 75) +* TEXFONTS <1>: Supported file formats. + (line 164) +* TEXFONTS <2>: Supported file formats. + (line 199) +* TEXFONTS <3>: Supported file formats. + (line 219) +* texfonts.map: Fontmap. (line 6) +* TEXFORMATS: Supported file formats. + (line 64) +* TEXINDEXSTYLE: Supported file formats. + (line 84) +* TEXINPUTS: Supported file formats. + (line 79) +* TEXINPUTS <1>: Supported file formats. + (line 180) +* TEXMF: TeX directory structure. + (line 6) +* texmf.cnf: Specially-recognized files. + (line 38) +* 'texmf.cnf' missing, warning about: Config files. (line 18) +* texmf.cnf, and variable expansion: Variable expansion. (line 6) +* texmf.cnf, definition for: Config files. (line 6) +* texmf.cnf, source for path: Path sources. (line 20) +* TEXMFCNF: Config files. (line 6) +* TEXMFCNF <1>: Supported file formats. + (line 49) +* TEXMFDBS: ls-R. (line 11) +* TEXMFDBS <1>: Supported file formats. + (line 91) +* TEXMFINI: Supported file formats. + (line 26) +* TEXMFINI <1>: Supported file formats. + (line 64) +* TEXMFINI <2>: Supported file formats. + (line 97) +* TEXMFLOG: Logging. (line 10) +* TEXMFOUTPUT: mktex script names. (line 40) +* TEXMFSCRIPTS: Supported file formats. + (line 191) +* texmfvar: mktex configuration. (line 122) +* TEXMFVAR: mktex configuration. (line 123) +* texmf_casefold_search: Casefolding search. (line 12) +* TEXPICTS: Supported file formats. + (line 79) +* TEXPKS: Supported file formats. + (line 164) +* TEXPOOL: Supported file formats. + (line 195) +* TEXPSHEADERS: Supported file formats. + (line 169) +* TEXPSHEADERS <1>: Supported file formats. + (line 211) +* TEXSIZES: Fallback font. (line 6) +* TEXSOURCES: Supported file formats. + (line 188) +* TEX_HUSH: Searching overview. (line 63) +* TEX_HUSH <1>: Suppressing warnings. + (line 6) +* TFMFONTS: Supported file formats. + (line 199) +* tilde expansion: Tilde expansion. (line 6) +* tilde.c: Tilde expansion. (line 25) +* time system call: Logging. (line 15) +* tolerance for glyph lookup: Basic glyph lookup. (line 15) +* trailing '/' in home directory: Tilde expansion. (line 19) +* trailing colons: Default expansion. (line 6) +* translations, of path searching description: Path searching. + (line 10) +* TRFONTS: Supported file formats. + (line 203) +* trick for detecting leaf directories: Subdirectory expansion. + (line 22) +* trojan horse attack: Security. (line 10) +* try_std_extension_first: File lookup. (line 24) +* TTFONTS: Supported file formats. + (line 207) +* tug.org: unixtex.ftp. (line 6) +* typeface directory, omitting: mktex configuration. (line 105) +* typeface directory, omitting <1>: mktex configuration. (line 108) +* unable to find files: Unable to find files. + (line 6) +* unable to generate fonts: Unable to generate fonts. + (line 6) +* uname: Bug checklist. (line 20) +* unixtex.ftp: unixtex.ftp. (line 6) +* unknown special warnings: Suppressing warnings. + (line 31) +* unreadable file warnings: Suppressing warnings. + (line 27) +* unreadable files: Searching overview. (line 63) +* unusable 'ls-R' warning: ls-R. (line 51) +* usage patterns, finding: Logging. (line 6) +* USERPROFILE, as ~ expansion: Tilde expansion. (line 6) +* USE_TEXMFVAR: mktex configuration. (line 128) +* USE_VARTEXFONTS: mktex configuration. (line 118) +* varfonts: mktex configuration. (line 112) +* variable expansion: Variable expansion. (line 6) +* variable.c: Variable expansion. (line 32) +* variable.h: Programming with config files. + (line 10) +* VARTEXFONTS: mktex configuration. (line 113) +* VAX 11/750: History. (line 12) +* version numbers, determining: Bug checklist. (line 15) +* VF files, not found: Searching overview. (line 31) +* VFFONTS: Supported file formats. + (line 219) +* Vojta, Paul: History. (line 30) +* Walsh, Norman: History. (line 56) +* warning about unusable 'ls-R': ls-R. (line 51) +* warning, about missing 'texmf.cnf': Config files. (line 18) +* warnings, file access: Searching overview. (line 63) +* warnings, suppressing: Suppressing warnings. + (line 6) +* WEB2C: Supported file formats. + (line 227) +* Weber, Olaf: History. (line 73) +* WEBINPUTS: Supported file formats. + (line 223) +* whitespace, in fontmap files: Fontmap. (line 31) +* whitespace, not ignored on continuation lines: Config files. + (line 37) +* Windows and casefolding: Casefolding rationale. + (line 21) +* www.tug.org: unixtex.ftp. (line 6) +* XDvi: Specially-recognized files. + (line 41) +* XDVIFONTS: Supported file formats. + (line 254) +* XDVIMAKEPK: mktex script names. (line 32) +* XDVISIZES: Fallback font. (line 6) +* zuhn, david: History. (line 50) + + + +Tag Table: +Node: Top1480 +Node: Introduction2263 +Node: History4333 +Node: unixtex.ftp8929 +Node: Security10399 +Node: TeX directory structure12903 +Node: Path searching16944 +Node: Searching overview17902 +Node: Path sources21721 +Node: Config files22947 +Node: Path expansion28210 +Node: Default expansion29163 +Node: Variable expansion31233 +Node: Tilde expansion32634 +Node: Brace expansion33614 +Node: KPSE_DOT expansion34553 +Node: Subdirectory expansion35066 +Node: Casefolding search37414 +Node: Casefolding rationale38183 +Node: Casefolding examples39529 +Node: Filename database44575 +Node: ls-R45557 +Node: Filename aliases49233 +Node: Database format50411 +Node: Invoking kpsewhich51424 +Node: Path searching options52379 +Node: Specially-recognized files61977 +Node: Auxiliary tasks63332 +Node: Standard options67057 +Node: TeX support67413 +Node: Supported file formats68767 +Node: File lookup76435 +Node: Glyph lookup78184 +Node: Basic glyph lookup79308 +Node: Fontmap80188 +Node: Fallback font82717 +Node: Suppressing warnings83629 +Node: mktex scripts84756 +Node: mktex configuration85971 +Node: mktex script names91774 +Node: mktex script arguments93160 +Node: Programming94039 +Node: Programming overview94612 +Node: Calling sequence97473 +Node: Program-specific files104002 +Node: Programming with config files105025 +Node: Reporting bugs106612 +Node: Bug checklist107290 +Node: Mailing lists110759 +Node: Debugging111436 +Node: Logging116513 +Node: Common problems118380 +Node: Unable to find files118857 +Node: Slow path searching121267 +Node: Unable to generate fonts122642 +Node: TeX or Metafont failing125114 +Node: Index126316 + +End Tag Table |