我一直在嘗試創建一個包,它加載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}