LGR 인코딩에서 글꼴 크기가 전환되지 않도록 하려면 어떻게 해야 합니까?

LGR 인코딩에서 글꼴 크기가 전환되지 않도록 하려면 어떻게 해야 합니까?

나는 본질적으로 article클래스에 12pt 글꼴을 사용하고 있습니다. (즉, 에 기생하는 사용자 정의 클래스를 사용하고 있습니다 article.cls.)

를 사용하기 headheight에 적절하게 설정하기 위해 from 을 사용하여 서문 끝 부분의 글꼴 크기를 테스트합니다 . 그런 다음 10pt, 11pt 또는 12pt 사용 여부에 따라 높이가 조정됩니다.fancyhdr\geometry{}\AtEndPreamble{}etoolbox

이 모든 것은 다음 코드에서 잘 작동합니다.

\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}

관련 정보