Estou usando fontes de 12pt com o que é essencialmente a article
classe. (Ou seja, estou usando uma classe personalizada que é parasita de article.cls
.)
Para definir um uso apropriado headheight
, testo o tamanho da fonte no final do preâmbulo fancyhdr
usando from . A altura é então ajustada de acordo com o uso de 10pt, 11pt ou 12pt.\geometry{}
\AtEndPreamble{}
etoolbox
Tudo isso funciona bem com o seguinte 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}
O registro contém:
Package mine Warning: font size is 12 on input line 13.
No entanto, se eu precisar compor o grego, quero 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ó agora o log contém:
Package mine Warning: font size is 10 on input line 13.
Por que carregar a codificação LGR altera o tamanho da fonte? E por que isso muda mesmo quando T1 é a codificação padrão?
Como posso prevenir ou contornar esse problema?
Observe que estou ciente de que poderia usar XeTeX ou LuaTeX ou ConTeXt para evitar isso. No entanto, para o bem ou para o mal, esta questão é sobre uma solução (pdf)TeX.
Se houver uma forma alternativa de compor pequenas quantidades de texto grego usando (pdf)TeX, isso seria perfeitamente satisfatório. Eu uso o acima com utf8
e inputenc
que me permite inserir frases gregas estranhas em caracteres Unicode e ter tudo bem composto. Qualquer coisa que suporte isso funcionaria bem.
Essa questãoparecia relacionado, mas estou usando o TeX Live e já tenho as fontes type1 relevantes instaladas (por exemplo /usr/local/texlive/2014/texmf-dist/fonts/type1/public/cbfonts/grmn1200.pfb
, ).
Responder1
Você pode confiar no tamanho da fonte somente depois de \normalsize
emitida. Isso faz parte \begin{document}
.
Não vejo problema em definir \headheight
como parte de
\AtBeginDocument{...}
em vez de \AtEndPreamble
. No entanto, fazendo
\AtEndPreamble{%
\normalsize
\PackageWarning{mine}{font size is \f@size}
}
estampas
Package mine Warning: font size is 12 on input line 11.
no .log
arquivo.
Responder2
O arquivo lgrenc.def
inclui a linha
\DeclareErrorFont{LGR}{cmr}{m}{n}{10}
e é isso que causa a mudança no tamanho da fonte. Este comando redefine \f@size
entre outras coisas (retirado 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 você pode ver, isso se baseia na ideia de que alguma outra redefinição ocorrerá mais tarde.
Outras codificações não alteram o substituto, então você nunca vê o fato de que isso também redefine o tamanho.
Eu acho que em termos de 'como posso evitar isso', você teria que desabilitar localmente \DeclareErrorFont
(não é o 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}