¿Cómo puedo evitar que la codificación LGR cambie el tamaño de fuente?

¿Cómo puedo evitar que la codificación LGR cambie el tamaño de fuente?

Estoy usando fuentes de 12 puntos con lo que es esencialmente la articleclase. (Es decir, estoy usando una clase personalizada que es parásita article.cls).

Para establecer un uso apropiado headheight, pruebo el tamaño de fuente al final del preámbulo fancyhdrusando from . Luego, la altura se ajusta según si se utilizan 10 puntos, 11 puntos o 12 puntos.\geometry{}\AtEndPreamble{}etoolbox

Todo esto funciona bien con el siguiente código:

\documentclass[12pt]{article}
\usepackage{etoolbox}
\usepackage[T1]{fontenc}
\makeatletter
\AtEndPreamble{%
  \PackageWarning{mine}{font size is \f@size}
}
\makeatother

\begin{document}

some text

\end{document}

El registro contiene:

Package mine Warning: font size is 12 on input line 13.

Sin embargo, si necesito escribir griego, quiero usar:

\documentclass[12pt]{article}
\usepackage{etoolbox}
\usepackage[LGR,T1]{fontenc}
\makeatletter
\AtEndPreamble{%
  \PackageWarning{mine}{font size is \f@size}
}
\makeatother

\begin{document}

some text

\end{document}

Sólo que ahora el registro contiene:

Package mine Warning: font size is 10 on input line 13.

¿Por qué cargar la codificación LGR cambia el tamaño de fuente? ¿Y por qué lo cambia incluso cuando T1 es la codificación predeterminada?

¿Cómo puedo prevenir o solucionar este problema?

Tenga en cuenta que soy consciente de que podría usar XeTeX, LuaTeX o ConTeXt para evitar esto. Sin embargo, para bien o para mal, esta pregunta trata sobre una solución TeX (pdf).

Si existe una forma alternativa de componer pequeñas cantidades de texto griego usando (pdf)TeX, sería perfectamente satisfactoria. Utilizo lo anterior con utf8y inputencque me permite ingresar alguna que otra frase griega en caracteres Unicode y tener todo bien escrito. Cualquier cosa que respalde eso funcionaría bien.

Esta preguntaParecía relacionado, pero estoy usando TeX Live y ya tengo instaladas las fuentes tipo 1 relevantes (por ejemplo /usr/local/texlive/2014/texmf-dist/fonts/type1/public/cbfonts/grmn1200.pfb).

Respuesta1

Puede confiar en el tamaño de fuente sólo después de \normalsizehaber sido emitido. Esto es parte de \begin{document}.

No veo ningún problema en establecerlo \headheightcomo parte de

\AtBeginDocument{...}

en vez de \AtEndPreamble. Sin embargo, haciendo

\AtEndPreamble{%
  \normalsize
  \PackageWarning{mine}{font size is \f@size}
}

huellas dactilares

Package mine Warning: font size is 12 on input line 11.

en el .logarchivo.

Respuesta2

El archivo lgrenc.defincluye la línea

\DeclareErrorFont{LGR}{cmr}{m}{n}{10}

y es esto lo que provoca el cambio de tamaño de fuente. Este comando restablece\f@size entre otras cosas (tomado de ltfssbas.dtx):

%  \begin{macro}{\DeclareErrorFont}
%    Declare the last resort shape! We assume that in this fontshape
%    there is a 10pt font but it doesn't really matter. We only loose
%    one macro name if the assumption is false. But at least the font
%    should be there!
%    \begin{macrocode}
\def\DeclareErrorFont#1#2#3#4#5{%
      \xdef\error@fontshape{%
          \noexpand\expandafter\noexpand\split@name\noexpand\string
          \expandafter\noexpand\csname#1/#2/#3/#4/#5\endcsname
          \noexpand\@nil}%
%    \end{macrocode}
%    Initialize all those internal variables which may or may not have
%    values in the first seconds of NFSS' bootstraping process. Later
%    on such values will be updated when an encoding is selected, etc.
%
%    We definitely don't want to set |\f@encoding|; we can set all the
%    others since if they are left ``blank'' any selection would grap
%    ``error default values'' as well. However, this probably should
%    go also.
% \changes{v2.1n}{1994/05/14}{Don't set \cs{f@encoding}}
%    \begin{macrocode}
%      \gdef\f@encoding{#1}%
      \gdef\default@family{#2}%
      \gdef\default@series{#3}%
      \gdef\default@shape{#4}%
      \global\let\f@family\default@family
      \global\let\f@series\default@series
      \global\let\f@shape\default@shape
      \gdef\f@size{#5}%
      \gdef\f@baselineskip{#5pt}%
}
\@onlypreamble\DeclareErrorFont
%    \end{macrocode}
%  \end{macro}

Como puede ver, esto se basa en la idea de que se realizará otro reinicio más adelante.

Otras codificaciones no alteran el retroceso, por lo que nunca verás el hecho de que esto también restablece el tamaño.

Supongo que en términos de "¿cómo evito esto?", tendrías que desactivarlo localmente \DeclareErrorFont(¡no es lo ideal!).

\documentclass[12pt]{article}
\usepackage{etoolbox}
\let\savedDeclareErrorFont\DeclareErrorFont
\def\DeclareErrorFont#1#2#3#4#5{}
\usepackage[LGR,T1]{fontenc}
\let\DeclareErrorFont\savedDeclareErrorFont
\makeatletter
\AtEndPreamble{%
  \PackageWarning{mine}{font size is \f@size}
}
\makeatother

\begin{document}

some text

\end{document}

información relacionada