课程:空变量的定义:etoolbox:比较问题

课程:空变量的定义:etoolbox:比较问题

我正在写我的第一堂课,但对宏的行为有点困惑etoolbox,我完全不明白。我试着阅读论坛上的回复,但一无所获。

我想根据课程的选项运行一个函数(该函数将演示文稿设置到工作表中)。

我有四个不同的演示文稿,有四个选项:prezC、prezE、prezG 和 prezL。

当我使用\documentclass[prezC]{test}或 使用[prezG]或进行编译时,[prezL]一切都很好。但是当我使用 进行编译时,[prezE]我可以读取日志:

LaTeX Warning: Unused global option(s):    [prezE].
[...]
! Use of \prez doesn't match its definition.
\presentation #1->valeur=#1\ifdefstring
        {#1}{E}{\presentationE }{\ifdefstrin...
l.7 \begin{document}

为什么?我不明白为什么 prezE 和其他选项的行为不一样。

  • 我尝试\ifdefstring使用其他宏来更改,但都没有效果。
  • 我尝试在做\string的定义中添加并在测试中做\prez[\def\prez{\string E}][\ifstrequal{#1}{\string E}{true}{false}]

我的尝试都没有成功。你知道原因吗?你能知道吗?

多谢。

最后的,

运行latex -v给我:

pdfTeX 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian)
kpathsea version 6.2.1

我的课程是:

\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{test}[2016/08/11 LaTeX class]

\global\def\prez%
\DeclareOption{prezE}{\def\prez{E}}
\DeclareOption{prezC}{\def\prez{C}}
\DeclareOption{prezG}{\def\prez{G}}
\DeclareOption{prezL}{\def\prez{L}}

\ProcessOptions\relax
\LoadClass[a4paper,twoside]{article}

\RequirePackage{etoolbox}
\AtBeginDocument{\presentation{\prez}}%

\newcommand{\presentationE}{Ceci est la prez E.}
\newcommand{\presentationC}{Ceci est la prez C.}
\newcommand{\presentationG}{Ceci est la prez G.}
\newcommand{\presentationL}{Ceci est la prez L.}

\newcommand{\presentation}[1]{%
valeur=#1%
\ifdefstring{#1}{E}{\presentationE}{%
\ifdefstring{#1}{C}{\presentationC}{%
\ifdefstring{#1}{G}{\presentationG}{%
\presentationL}}}}%
\endinput
%% End of file `test.cls'.

我的主要内容基本上是:

\documentclass[prezE]{test}
%% 
\begin{document}
Test ok.
\end{document}

答案1

\global\def\prez%
\DeclareOption{prezE}

定义\prez,所以它必须跟在后面\DeclareOption并扩展为prezE

我猜你是有意的

\global\def\prez{}%
\DeclareOption{prezE}

定义\prez为空,并声明一个prezE选项。

相关内容