Error "Extra \fi" al definir opciones de paquete mutuamente excluyentes con condicionales

Error "Extra \fi" al definir opciones de paquete mutuamente excluyentes con condicionales

He estado intentando crear un paquete, que carga el babelpaquete y configura el idioma con una opción. He recibido errores extraños al intentar definir opciones de paquetes mutuamente excluyentes, para evitar babelconflictos de opciones. He armado un MWE. Aquí está el failedpackage.styarchivo:

\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

Aquí está el .texarchivo a compilar:

\documentclass[report]

\usepackage[T1]{fontenc}
\usepackage[UTF8]{inputenc}

\usepackage{failedpackage}

\begin{document}

    Bonjour TeX.StackExchange !

\end{document}

Y aquí está el documento .log:http://paf.im/8a8tc

Bueno, supongo que el problema se debe al hecho de que el compilador trata las declaraciones condicionales (por ejemplo, \ifbabel@englishtrue) como indefinidas, ¡pero se han definido justo al comienzo del .sty!

No entiendo.

Gracias de antemano por tu ayuda.

Respuesta1

  1. ¡Elimine el sufijo truede las \ifbabel@....consultas! Debe utilizar \ifbabel@frenchetc para la consulta, pero \babel@frenchtrueo \babel@frenchfalsepara establecer el estado de la 'variable'.

  2. Cambiar \documentclass[report]a\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

principal.tex

\documentclass{report}

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

\usepackage{failedpackage}

\begin{document}

Bonjour TeX.StackExchange !

\end{document}

información relacionada