This section describes features that were added to the MiKTeX TeX implementation.

Automatic Package Installation

MiKTeX can be configured in such a way that missing packages are automatically installed (see the section called “Automatic Package Installation”).

It is possible to override the global configuration setting with these command line options:


Missing packages will not be installed.


Missing packages will be installed.

Finding out Package Usages

The command line option --record-package-usages can be used to find out which packages are used in a job.

For example, you would say

latex -record-package-usages=packages.txt test

to create the file packages.txt, which contains the names of the packages used by test.tex.

If test.tex looks like this:

Hello, world!

Then the resulting packages.txt would contain these lines:


The package list can be handed over to the package manager (see mpm(1)), e.g.

mpm --update-some=packages.txt

would ensure that you have the latest versions installed.

Suppressing Screen Output

The option --quiet suppresses all diagnostic messages. No screen output is produced, unless there are errors. The --quiet option implies --c-style-errors and --interaction=batchmode, i.e. errors will be shown in a C style form and do not stop the compilation process.

For example, the input file foo.tex

What's \This?

would cause TeX to print one error message, as in the following example:

> latex -quiet foo.tex
foo.tex:3: Undefined control sequence

Setting the Name of the Output File

You can change the name of all output files by using the option --job-name=name. This switch actually sets the name of the TeX job and has an effect of the output file names, because these names are derived from the job name. Look at the following example:

> latex -job-name=foo sample2e
This is pdfTeX, Version 3.14159265-2.6-1.40.18 (MiKTeX 2.9.6350 64-bit)
entering extended mode
("C:/Program Files/MiKTeX 2.9/tex/latex/base/sample2e.tex"
LaTeX2e <2017-04-15>
Babel <3.10> and hyphenation patterns for 75 language(s) loaded.
("C:/Program Files/MiKTeX 2.9/tex/latex/base/article.cls"
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
("C:/Program Files/MiKTeX 2.9/tex/latex/base/size10.clo")) (foo.aux)
("C:/Program Files/MiKTeX 2.9/tex/latex/base/omscmr.fd") [1] [2] [3] (foo.aux)
Output written on foo.dvi (3 pages, 7484 bytes).
Transcript written on foo.log.

Note the altered output file names: foo.aux, foo.dvi and foo.log.

Auto-insertion of Source Specials

What Are Source Specials?

Source specials are pieces of information embedded in a DVI file. They make a connection between the source file location (e.g., line 100 in foo.tex) and the DVI location (e.g., page 2 in foo.dvi). Source specials can improve the edit-compile-view-edit cycle:

  1. You edit the source file with a TeX editor.

  2. You compile the source file.

  3. You execute a special editor command to open the previewer Yap, going directly to the page that corresponds to the cursor location in your editor window.

  4. You navigate through the viewed document.

  5. You double-click somewhere inside the viewed document; this causes Yap to bring the editor window back to the front, moving the text cursor directly to the line that corresponds to the view location.

How to Insert Source Specials

The TeX compiler option --src-specials directs TeX to insert source specials into the DVI file.

You would say

latex -src-specials foo.tex

to create the DVI file foo.dvi with embedded source specials.

Quoted File Names

The TeX compiler can handle quoted file names. This makes it possible to specify long file names that contain spaces.

For example, to compile the input file long file name.tex, you start TeX as follows:

latex "long file name"

This produces the DVI file "long file name.dvi". The log file is named "long file name.log".

You can, to some extent, use quoted file names inside the TeX document. For example:

\input{"extra long file name"}

This would cause TeX to read the file "extra long file name.tex".

Things get a little bit complicated if you want to use the LaTeX primitive \include. You have to write something like the following:

\include{"extra\space long\space file\space name"}

Specifying Additional Input Directories

The command-line option --include-directory=dir causes the program to include dir into the list of input directories.

For example:

latex --include-directory="C:\My Styles" foo.tex

This prepends C:\My Styles to the input search path, i.e., C:\My Styles will be searched first, when TeX tries to find an input file.

Specifying the Output Directory

The option --output-directory=dir causes TeX to create all output files in another directory.

For example:

> mkdir C:\texoutput
> latex -output-directory=C:\texoutput sample2e.tex

This ensures that all output files (foo.dvi, foo.log, ) will be created in C:\texoutput.

Specifying the Directory for Auxiliary Files

The option --aux-directory=dir causes TeX to create auxiliary files in another directory. For example:

> mkdir C:\texoutput
> mkdir C:\tobedeleted
> latex -output-directory=C:\texoutput -aux-directory=C:\tobedeleted foo.tex

This ensures that 1) foo.dvi will be created in C:\texoutput and 2) all other files (foo.log, ) will be created in C:\tobedeleted.

Running Programs From Within TeX


TeX handles output stream 18 in a special way: the token list is interpreted as a command line. If the \write18 feature is enabled (see below), then \write18{toklist} starts the system command interpreter (usually cmd.exe for Windows and sh for other systems) to carry out the command specified by toklist. For example:

\write18{miktex-kpsewhich sample2e.tex}

prints the fully qualified path to the LaTeX input file sample2e.tex.


The \write18 feature is only partially enabled by default to avoid security problems: only well known commands are allowed. You can examine the list of allowed commands by running initexmf --show-config-value [Core]AllowedShellCommands[]. You fully enable the feature by specifying --enable-write18 on the TeX command-line. But please keep in mind that this tears a huge security hole.

Piped Input and Output

TeX's input/output primitives can be used for unidirectional interprocess communication by prepending a pipe symbol to the file name.

If this feature is enabled, then \input "|command" starts the command interpreter (usually cmd.exe for Windows and sh for other systems) to carry out the command. The output of the command becomes the input of TeX. For example:

\input "|miktex-kpsewhich sample2e.tex"

typesets he fully qualified path to the LaTeX input file sample2e.tex.

Likewise, it is possible to let TeX write something into the input stream of a command. For example:

\immediate\openout1 = "|sort"
\immediate\write 1 {b}
\immediate\write 1 {a}
\immediate\write 1 {c}


Piped input and output is disabled by default. You enable the feature by specifying --enable-pipes on the TeX command-line. But please keep in mind that this tears a huge security hole.

TCX Files: Character Translations

This section is borrowed from the Web2C manual.

TCX (TeX character translation) files help TeX support direct input of 8-bit international characters if fonts containing those characters are being used. Specifically, they map an input (keyboard) character code to the internal TeX character code (a superset of ASCII).

Of the various proposals for handling more than one input encoding, TCX files were chosen because they follow Knuth's original ideas for the use of the xchr and xord tables. He ventured that these would be changed in the WEB source in order to adjust the actual version to a given environment. It turned out, however, that recompiling the WEB sources is not as simple task as Knuth predicted; therefore, TCX files, providing the possibility of changing of the conversion tables on on-the-fly, has been implemented instead.

This approach limits the portability of TeX documents, as some implementations do not support it (or use a different method for input-internal reencoding). It may also be problematic to determine the encoding to use for a TeX document of unknown provenance; in the worst case, failure to do so correctly may result in subtle errors in the typeset output.

While TCX files can be used with any format, using them breaks the LaTeX inputenc package. This is why you should either use tcxfile or inputenc in LaTeX input files, but never both.

This is entirely independent of the MLTeX extension: whereas a TCX file defines how an input keyboard character is mapped to TeX's internal code, MLTeX defines substitutions for a non-existing character glyph in a font with a \accent construction made out of two separate character glyphs. TCX files involve no new primitives; it is not possible to specify that an input (keyboard) character maps to more than one character.

Specifying TCX files:

  • You can specify a TCX file to be used for a particular TeX run by specifying the command-line option -translate-file=tcxfile or (preferably) specifying it explicitly in the first line of the main document:

    %& -translate-file=tcxfile

  • TCX files are searched for along the TCXPath path.

  • initex ignores TCX files.

MiKTeX comes with at least two TCX files, il1-t1.tcx and il2-t1.tcx. These support ISO Latin 1 and ISO Latin 2, respectively, with Cork-encoded fonts (a.k.a.: the T1 encoding). TCX files for Czech, Polish, and Slovak are also provided.

Syntax of TCX files:

  1. Line-oriented. Blank lines are ignored.

  2. Whitespace is ignored except as a separator.

  3. Comments start with % and continue to the end of the line.

  4. Otherwise, a line consists of one or two character codes:

    src [dest]
  5. Each character code may be specified in octal with a leading 0, hexadecimal with a leading 0x, or decimal otherwise. Values must be between 0 and 255, inclusive (decimal).

  6. If the dest code is not specified, it is taken to be the same as src.

  7. If the same src code is specified more than once, it is the last definition that counts.

Finally, here's what happens: when TeX sees an input character with code src: it 1) changes src to dest; and 2) makes code the dest printable, i.e., printed as-is in diagnostics and the log file instead of in ^^ notation.

By default, no characters are translated, and character codes between 32 and 126 inclusive (decimal) are printable. It is not possible to make these (or any) characters unprintable.

Specifying translations for the printable ASCII characters (codes 32127) will yield unpredictable results. Additionally you shouldn't make the following characters printable: ^^I (TAB), ^^J (line feed), ^^M (carriage return), and ^^? (delete), since TeX uses them in various ways.

Thus, the idea is to specify the input (keyboard) character code for src, and the output (font) character code for dest.