조건문을 사용하여 상호 배타적인 패키지 옵션을 정의할 때 "추가 \fi" 오류

조건문을 사용하여 상호 배타적인 패키지 옵션을 정의할 때 "추가 \fi" 오류

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

  1. true쿼리 에서 접미사를 제거하세요 \ifbabel@....! \ifbabel@french쿼리에는 etc 를 사용해야 하지만 '변수'의 상태를 설정하려면 \babel@frenchtrueor 를 사용해야 합니다.\babel@frenchfalse

  2. \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}

관련 정보