我一直在尝试创建一个包,它加载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
or\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
主文本
\documentclass{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} %
\usepackage{failedpackage}
\begin{document}
Bonjour TeX.StackExchange !
\end{document}