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, 0 insertions, 4017 deletions
diff --git a/Build/source/texk/kpathsea/doc/kpathsea.info b/Build/source/texk/kpathsea/doc/kpathsea.info deleted file mode 100644 index 66b0a4e2f90..00000000000 --- a/Build/source/texk/kpathsea/doc/kpathsea.info +++ /dev/null @@ -1,4017 +0,0 @@ -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 |