Ошибка «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@frenchtrueили \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

Main.tex

\documentclass{report}

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

\usepackage{failedpackage}

\begin{document}

Bonjour TeX.StackExchange !

\end{document}

Связанный контент