Я использую шрифты размером 12pt с тем, что по сути является article
классом. (То есть я использую пользовательский класс, который паразитирует на article.cls
.)
Чтобы установить подходящий размер headheight
для fancyhdr
использования \geometry{}
, я проверяю размер шрифта в конце преамбулы, используя \AtEndPreamble{}
frometoolbox
. Затем высота корректируется в соответствии с тем, используется ли 10pt, 11pt или 12pt.
Все это прекрасно работает со следующим кодом:
\documentclass[12pt]{article}
\usepackage{etoolbox}
\usepackage[T1]{fontenc}
\makeatletter
\AtEndPreamble{%
\PackageWarning{mine}{font size is \f@size}
}
\makeatother
\begin{document}
some text
\end{document}
Журнал содержит:
Package mine Warning: font size is 12 on input line 13.
Однако, если мне нужно набрать текст на греческом языке, я хочу использовать:
\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}
Только теперь журнал содержит:
Package mine Warning: font size is 10 on input line 13.
Почему загрузка кодировки LGR вообще меняет размер шрифта? И почему она меняет его даже если кодировкой по умолчанию является T1?
Как можно предотвратить или обойти эту проблему?
Обратите внимание, что я знаю, что я мог бы использовать XeTeX или LuaTeX или ConTeXt, чтобы избежать этого. Однако, к лучшему или к худшему, этот вопрос касается решения (pdf)TeX.
Если есть альтернативный способ набора небольших объемов греческого текста с помощью (pdf)TeX, это было бы вполне удовлетворительно. Я использую вышеприведенный способ с utf8
и inputenc
, который позволяет мне вводить странные греческие фразы в символах юникода и все красиво набирать. Все, что поддерживает это, будет работать нормально.
Этот вопросказалось бы, это связано, но я использую TeX Live и у меня уже установлены соответствующие шрифты type1 (например, /usr/local/texlive/2014/texmf-dist/fonts/type1/public/cbfonts/grmn1200.pfb
).
решение1
Вы можете положиться на размер шрифта только после того, как \normalsize
был выпущен. Это часть \begin{document}
.
Я не вижу никаких проблем в том, чтобы установить \headheight
как часть
\AtBeginDocument{...}
а не \AtEndPreamble
. Однако, делая
\AtEndPreamble{%
\normalsize
\PackageWarning{mine}{font size is \f@size}
}
отпечатки
Package mine Warning: font size is 12 on input line 11.
в .log
файле.
решение2
Файл lgrenc.def
содержит строку
\DeclareErrorFont{LGR}{cmr}{m}{n}{10}
и это то, что вызывает изменение размера шрифта. Эта команда сбрасывает \f@size
среди прочего (взято из 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}
Как видите, это основано на идее, что позже произойдет еще одна перезагрузка.
Другие кодировки не изменяют резервный вариант, поэтому вы никогда не увидите, что он также сбрасывает размер.
Полагаю, что с точки зрения «как это предотвратить», вам придется отключить локально \DeclareErrorFont
(не идеальный вариант!).
\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}