Wie kann ich verhindern, dass die LGR-Kodierung die Schriftgröße ändert?

Wie kann ich verhindern, dass die LGR-Kodierung die Schriftgröße ändert?

Ich verwende 12pt-Schriftarten mit dem, was im Wesentlichen die articleKlasse ist. (Das heißt, ich verwende eine benutzerdefinierte Klasse, die parasitär ist article.cls.)

Um headheightmit eine passende Schriftgröße fancyhdreinzustellen \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 utf8und, inputencwodurch 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 \normalsizesie ausgegeben wurde. Dies ist Teil von \begin{document}.

Ich sehe kein Problem darin, \headheightals Teil von

\AtBeginDocument{...}

\AtEndPreambleanstatt . Allerdings

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

druckt

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

in der .logDatei.

Antwort2

Die Datei lgrenc.defenthält die Zeile

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

und dies bewirkt die Änderung der Schriftgröße. Dieser Befehl setzt \f@sizeunter 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}

verwandte Informationen