[Tex/LaTex] Difference between \encodingdefault{T1} and \usepackage[T1]{fontenc}

font-encodingsfonts

I'm new to LaTeX, like really really new.

From what I've read, the default font encoding of LaTeX is OT1. Now, if I'm not mistaken, in order to change the default encoding to Type 1, I have to put \usepackage[T1]{fontenc} in the preamble. However, what will happen if I put \renewcommand{\encodingdefault}{T1} instead, or both?

Best Answer

When you do

\usepackage[<ENCODING>]{fontenc}

the file <encoding>enc.def is loaded (the encoding name is converted to lowercase for reasons due to uniformity in the various file systems). For instance

\usepackage[T1]{fontenc}

will load t1enc.def. The start of this file is

\ProvidesFile{t1enc.def}
 [2005/09/27 v1.99g
         Standard LaTeX file]
\DeclareFontEncoding{T1}{}{}
\DeclareTextAccent{\`}{T1}{0}
\DeclareTextAccent{\'}{T1}{1}
...

and \ProvidesFile ensures the file is never loaded twice. On the other hand, fontenc.sty is basically a wrapper around \input{<encoding>enc.def}. It also defines some addition to the lowercase and uppercase settings when the requested encoding is in the list of Cyrillic encoding.

At format creation, the following encodings are also loaded

OT1  T1  OML OMS

(the last two are for math). This is the reason why just doing

\renewcommand{\encodingdefault}{T1}

works: the encoding is already known and t1enc.def has been loaded in memory.

For any other encoding, the \renewcommand you propose will issue

! LaTeX Error: Encoding scheme `<ENCODING>' unknown.

because the first duty of <encoding>enc.def is to say

\DeclareFontEncoding{<ENCODING>}{<code>}{<code>}

where the arguments specify code to execute as soon as the encoding is activated (for text and math modes respectively).

So the complete answer is:

the method with \renewcommand only works for OT1 and T1; don't use it.

Note also that the last encoding loaded with fontenc will become the default encoding for the document. More precisely, when

\usepackage[<ENCODING-1>,...,<ENCODING-n>]{fontenc}

is processed, LaTeX will do

\renewcommand{\encodingdefault}{<ENCODING-n>}

(actually executing \let\encodingdefault\CurrentOption).