Я пытался создать пакет, который загружает 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
Удалите суффикс
true
из\ifbabel@....
запросов! Вы должны использовать\ifbabel@french
etc для запроса, но\babel@frenchtrue
или\babel@frenchfalse
для установки состояния «переменной».Изменить
\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}