Skip to content

Instantly share code, notes, and snippets.

@zr-tex8r
Created June 24, 2016 14:00
Show Gist options
  • Save zr-tex8r/443a3ad9ec9ca09f3967c2affe54db3c to your computer and use it in GitHub Desktop.
Save zr-tex8r/443a3ad9ec9ca09f3967c2affe54db3c to your computer and use it in GitHub Desktop.
LaTeX: \selectfont がアレかコレかを判定する
%! 本体開始時のフックで \selectfont の再定義が行われる場合もあるため,
%! \AtBeginDocument だけでなく \AtEndDocument でも検査を行う.
%! \document を再定義するのも一つの手であるが, \document を再定義する
%! パッケージがあるかも知れない....
\AtBeginDocument{\pltx@verify@kanji@selectfont}
\AtEndDocument{\pltx@verify@kanji@selectfont}
%! 検査用のマクロ.
\def\pltx@verify@kanji@selectfont{%
\begingroup
%! (1) \selectfont_ の定義本体に '\kenc@update' が含まれるかを
%! 判定し, 含まれれば正常とする.
%! 文字列化した上で \in@ を使う.
\edef\next{\noexpand\in@
{\string\kenc@update}%
{\expandafter\meaning\csname selectfont \endcsname}}%
%! "\letで元定義保存"の要領でパッチを当てている場合は, (1) の
%! 検査は通らない.
\next \ifin@ \else
%! [(1) が通らなかった]
%! (2) pLaTeX カーネルの \selectfont の定義には
%! \let\tmp@error@fontshape\error@fontshape
%! が含まれる. これを利用して, 実際に \selectfont を実行して
%! \tmp@error@fontshape への代入が起こるかを調べる.
%! ほとんど全ての場合に, \selectfont を余分に(局所化状態で)
%! 実行するのは無害である.
\let\tmp@error@fontshape\relax
\selectfont
\ifx\tmp@error@fontshape\relax
%! [(2) も通らなかった]
%! \selectfont が正常でないと見なしてエラーを出す.
\@latex@error
{The definition of \string\selectfont\space is incompatible
with (u)pLaTeX}%
{Some of the packages in use is incompatible with (u)pLaTeX.%
\MessageBreak\@ehc}
%! 2回エラーが出るのを避ける.
\global\let\pltx@verify@kanji@selectfont\relax
\fi
\fi
\endgroup}
% pLaTeX 文書
\documentclass[a4paper]{jarticle}
\usepackage{check-selectfont}
\begin{document}
{p\LaTeX}が新しくなってアレ!
\end{document}
% upLaTeX 文書
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{check-selectfont}
\usepackage{tracefnt,uptrace}% これはOK
\begin{document}
{p\LaTeX}が新しくなってアレ!
\end{document}
% upLaTeX 文書
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{check-selectfont}
\usepackage{letltxmacro}
% "\letで元定義保存"方式でパッチを当てた場合
\LetLtxMacro{\ORGselectfont}{\selectfont}
\DeclareRobustCommand*{\selectfont}{\typeout{(^_^;)}\ORGselectfont}
\begin{document}
{p\LaTeX}が新しくなってアレ!
\end{document}
% pLaTeX 文書
\documentclass[a4paper]{jarticle}
\usepackage{check-selectfont}
\usepackage{CJKutf8}% CJKは非互換
\begin{document}
{p\LaTeX}が新しくなってアレ!
\end{document}
% upLaTeX 文書
\documentclass[uplatex,a4paper]{jsarticle}
\usepackage{check-selectfont}
\usepackage{tracefnt}% tracefntは非互換
% これは \end{document} でエラーになる
\begin{document}
{p\LaTeX}が新しくなってアレ!
\end{document}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment