使用條件定義互斥包選項時出現「Extra \fi」錯誤

使用條件定義互斥包選項時出現「Extra \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@frenchetc 進行查詢,但使用\babel@frenchtrueor\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

主文本文件

\documentclass{report}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}     %

\usepackage{failedpackage}

\begin{document}

Bonjour TeX.StackExchange !

\end{document}

相關內容