Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

When downloading a new package and running

tex packagename.ins

you always get a bunch of files, including the .def file. It's also mentioned in the .sty file. Apparently it's a definition being used for something.

What exactly is it for though? And can it be omitted when sharing the LaTeX project?

share|improve this question
1  
It depends on the package concerned. Usually, any .def will be needed, and so you should install them. –  Joseph Wright May 13 '12 at 14:01
1  
add comment

1 Answer

up vote 13 down vote accepted

Usually files with the extension .def collect long lists of similar definitions, that would make a .sty file long and unreadable, or that can possibly be shared with other packages.

If tex packagename.ins creates a .def file, then this is part of the package structure and mustn't be omitted.

A typical example are the <encoding>enc.def files, such as t1enc.def loaded by fontenc:

\ProvidesFile{t1enc.def}
 [2005/09/27 v1.99g
         Standard LaTeX file]
\DeclareFontEncoding{T1}{}{}
\DeclareTextAccent{\`}{T1}{0}
\DeclareTextAccent{\'}{T1}{1}
\DeclareTextAccent{\^}{T1}{2}
\DeclareTextAccent{\~}{T1}{3}
<...>
\DeclareTextSymbol{\NG}{T1}{141}
\DeclareTextSymbol{\OE}{T1}{215}
\DeclareTextSymbol{\O}{T1}{216}
\DeclareTextSymbol{\SS}{T1}{223}
\DeclareTextSymbol{\TH}{T1}{222}
\DeclareTextSymbol{\ae}{T1}{230}
\DeclareTextSymbol{\dh}{T1}{240}
\DeclareTextSymbol{\dj}{T1}{158}
\DeclareTextSymbol{\guillemotleft}{T1}{19}
\DeclareTextSymbol{\guillemotright}{T1}{20}
<...>

where having the long list in a separate file makes it more easily maintainable and searchable. Similarly inputenc uses .def files for lists of pairings between input characters and their connected output.

Some other packages use some .def files for "context dependent" code. Examples are graphics/graphicx and hyperref that put the engine dependent code (for latex/dvilualatex, pdflatex/lualatex and xelatex) in .def files such as pdftex.def and dvips.def (graphics) or hpdftex.def and hdvips.def (hyperref).

Other packages, notably bidi, xepersian or minitoc, use .def files to load code depending on what packages are loaded in the document.

In some cases perhaps an extension such as .sto ("style option", modelled after .clo used by the standard classes) might have been preferable, but tradition has its influence. So long as the names are unique, the extension used is irrelevant.

share|improve this answer
2  
Also compiler dependent things are put into .def files and the correct one is then loaded (e.g. pdftex.def if pdflatex is used) –  Martin Scharrer May 13 '12 at 14:09
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.