条件付きで相互に排他的なパッケージ オプションを定義すると、「余分な \fi」エラーが発生する

条件付きで相互に排他的なパッケージ オプションを定義すると、「余分な \fi」エラーが発生する

パッケージをロードし、オプションで言語を設定するパッケージを作成しようとしています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

  1. trueクエリからサフィックスを削除してください\ifbabel@....\ifbabel@frenchクエリには etc を使用する必要がありますが、'変数' の状態を設定するに\babel@frenchtrueは or を使用する必要があります。\babel@frenchfalse

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

関連情報