He estado intentando crear un paquete, que carga el babel
paquete y configura el idioma con una opción. He recibido errores extraños al intentar definir opciones de paquetes mutuamente excluyentes, para evitar babel
conflictos de opciones. He armado un MWE
. Aquí está el failedpackage.sty
archivo:
\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 .tex
archivo 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
¡Elimine el sufijo
true
de las\ifbabel@....
consultas! Debe utilizar\ifbabel@french
etc para la consulta, pero\babel@frenchtrue
o\babel@frenchfalse
para establecer el estado de la 'variable'.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}