Ich verwende 12pt-Schriftarten mit dem, was im Wesentlichen die article
Klasse ist. (Das heißt, ich verwende eine benutzerdefinierte Klasse, die parasitär ist article.cls
.)
Um headheight
mit eine passende Schriftgröße fancyhdr
einzustellen \geometry{}
, teste ich die Schriftgröße am Ende der Präambel mit \AtEndPreamble{}
von etoolbox
. Anschließend wird die Höhe angepasst, je nachdem ob 10pt, 11pt oder 12pt verwendet wird.
Dies alles funktioniert problemlos mit dem folgenden Code:
\documentclass[12pt]{article}
\usepackage{etoolbox}
\usepackage[T1]{fontenc}
\makeatletter
\AtEndPreamble{%
\PackageWarning{mine}{font size is \f@size}
}
\makeatother
\begin{document}
some text
\end{document}
Das Protokoll enthält:
Package mine Warning: font size is 12 on input line 13.
Wenn ich jedoch Griechisch setzen muss, möchte ich Folgendes verwenden:
\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}
Erst jetzt enthält das Protokoll:
Package mine Warning: font size is 10 on input line 13.
Warum ändert sich die Schriftgröße überhaupt, wenn die LGR-Kodierung geladen wird? Und warum ändert sich die Schriftgröße sogar dann, wenn T1 die Standardkodierung ist?
Wie kann ich dieses Problem verhindern oder umgehen?
Beachten Sie, dass ich mir bewusst bin, dass ich XeTeX oder LuaTeX oder ConTeXt verwenden könnte, um dies zu vermeiden. Allerdings handelt diese Frage, ob gut oder schlecht, von einer (pdf)TeX-Lösung.
Wenn es eine alternative Möglichkeit gibt, kleine Mengen griechischen Textes mit (pdf)TeX zu setzen, wäre das vollkommen zufriedenstellend. Ich verwende das obige mit utf8
und, inputenc
wodurch ich die eine oder andere griechische Phrase in Unicode-Zeichen eingeben und alles sauber setzen lassen kann. Alles, was das unterstützt, würde gut funktionieren.
Diese Frageschien damit zusammenzuhängen, aber ich verwende TeX Live und habe die entsprechenden Type1-Schriftarten bereits installiert (z. B. /usr/local/texlive/2014/texmf-dist/fonts/type1/public/cbfonts/grmn1200.pfb
).
Antwort1
Auf die Schriftgröße können Sie sich erst verlassen, nachdem \normalsize
sie ausgegeben wurde. Dies ist Teil von \begin{document}
.
Ich sehe kein Problem darin, \headheight
als Teil von
\AtBeginDocument{...}
\AtEndPreamble
anstatt . Allerdings
\AtEndPreamble{%
\normalsize
\PackageWarning{mine}{font size is \f@size}
}
druckt
Package mine Warning: font size is 12 on input line 11.
in der .log
Datei.
Antwort2
Die Datei lgrenc.def
enthält die Zeile
\DeclareErrorFont{LGR}{cmr}{m}{n}{10}
und dies bewirkt die Änderung der Schriftgröße. Dieser Befehl setzt \f@size
unter anderem Folgendes zurück (entnommen aus 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}
Wie Sie sehen, basiert dies auf der Annahme, dass später ein weiterer Reset stattfinden wird.
Andere Kodierungen ändern den Fallback nicht, sodass Sie nie bemerken, dass dadurch auch die Größe zurückgesetzt wird.
Ich schätze, was die Frage „Wie verhindere ich dies?“ betrifft, müssten Sie es lokal deaktivieren \DeclareErrorFont
(nicht 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}