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
Main.tex
\documentclass{report}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc} %
\usepackage{failedpackage}
\begin{document}
Bonjour TeX.StackExchange !
\end{document}