我正在写我的第一堂课,但对宏的行为有点困惑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
选项。