パッケージをロードし、オプションで言語を設定するパッケージを作成しようとしていますbabel
。オプションの競合を防ぐために、相互に排他的なパッケージ オプションを定義しようとすると、奇妙なエラーが発生しますbabel
。 を作成しましたMWE
。これがファイルですfailedpackage.sty
:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{failedpackage}
\newif\ifbabel@french
\newif\ifbabel@english
\newif\ifbabel@german
%% Option zone
\DeclareOption{french}{\babel@frenchtrue\babel@englishfalse\babel@germanfalse}
\DeclareOption{english}{\babel@frenchfalse\babel@englishtrue\babel@germanfalse}
\DeclareOption{german}{\babel@frenchfalse\babel@englishfalse\babel@germantrue}
\ExecuteOptions{french}
\ProcessOptions
%% end of Option zone
\ifbabel@frenchtrue
\RequirePackage[french]{babel}
\fi
\ifbabel@englishtrue
\RequirePackage[english]{babel}
\fi
\ifbabel@germantrue
\RequirePackage[german]{babel}
\fi
\endinput
.tex
コンパイルするファイルは次のとおりです:
\documentclass[report]
\usepackage[T1]{fontenc}
\usepackage[UTF8]{inputenc}
\usepackage{failedpackage}
\begin{document}
Bonjour TeX.StackExchange !
\end{document}
.log ドキュメントは次のとおりです。http://paf.im/8a8tc
\ifbabel@englishtrue
まあ、問題は、コンパイラが条件文 (例) を未定義として扱うが、それらは の先頭で定義されているという事実によって発生すると思います.sty
。
理解できない。
ご協力をよろしくお願いいたします。
答え1
true
クエリからサフィックスを削除してください\ifbabel@....
。\ifbabel@french
クエリには etc を使用する必要がありますが、'変数' の状態を設定するに\babel@frenchtrue
は or を使用する必要があります。\babel@frenchfalse
\documentclass[report]
への変更\documentclass{report}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{failedpackage}
\newif\ifbabel@french
\newif\ifbabel@english
\newif\ifbabel@german
%% Option zone
\DeclareOption{french}{\babel@frenchtrue\babel@englishfalse\babel@germanfalse}
\DeclareOption{english}{\babel@frenchfalse\babel@englishtrue\babel@germanfalse}
\DeclareOption{german}{\babel@frenchfalse\babel@englishfalse\babel@germantrue}
\ExecuteOptions{french}
\ProcessOptions
%% end of Option zone
\ifbabel@french
\RequirePackage[french]{babel}
\fi
\ifbabel@english
\RequirePackage[english]{babel}
\fi
\ifbabel@german
\RequirePackage[german]{babel}
\fi
\endinput
メイン.tex
\documentclass{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} %
\usepackage{failedpackage}
\begin{document}
Bonjour TeX.StackExchange !
\end{document}