Document ClassesPassing options to self-written Package

Information and discussion about specific document classes and how to create your own document classes.
Post Reply
stietz
Posts: 4
Joined: Sun Feb 22, 2009 4:25 am

Passing options to self-written Package

Post by stietz »

I have created my own package, looking something like that.

Code: Select all

Code, edit and compile here:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{thename}
\RequirePackage{ifthen}
\newif\ifDraft
\newcommand{\filename}{default}
\DeclareOption{draft}{\Drafttrue}
\DeclareOption{final}{\Draftfalse}
\DeclareOption{filename}{\renewcommand{\filename}{\CurrentOption}}
\DeclareOption*{\PackageWarning{thename}{Unknown option '\CurrentOption'.}}
\ExecuteOptions{draft,filename}
\ProcessOptions\relax
\ifDraft
\message{Filename is: \filename}
\else
\message{Final version.}
\fi
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The plan was now, that I call with:

Code: Select all

\usepackage[filename=turns,final]{externaltikz}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
giving the output: "Final version."

OR

Code: Select all

\usepackage[filename=turns]{externaltikz}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
giving the output: "Filename is: turns"


The first part works, but the second part gives "Filename is: "

How do I have to rewrite my program to obtain the wanted function?

Best wishes, Stephan

Recommended reading 2024:

LaTeXguide.org • LaTeX-Cookbook.net • TikZ.org

NEW: TikZ book now 40% off at Amazon.com for a short time.

daleif
Posts: 199
Joined: Wed Nov 19, 2008 12:46 am

Re: Passing options to self-written Package

Post by daleif »

have a look at the xkeyval package, the regular options handling does not support key=value, xkeyval works just fine
josephwright
Site Moderator
Posts: 814
Joined: Tue Jul 01, 2008 2:19 pm

Re: Passing options to self-written Package

Post by josephwright »

I'd suggest looking at kvoptions unless you need very complex keyval options. xkeyval has a rather steep learning curve!
Joseph Wright
stietz
Posts: 4
Joined: Sun Feb 22, 2009 4:25 am

Passing options to self-written Package

Post by stietz »

I got it working with xkeyval:
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{externaltikz}%
[22/02/2009 (rev. 2) Externalize TikZ environments to PDFs.]

\RequirePackage{ifthen,xkeyval}

\newif\ifDraft
\newcommand{\filename}{default}

\DeclareOptionX{draft}{\Drafttrue}
\DeclareOptionX{final}{\Draftfalse}
\DeclareOptionX{filename}[\jobname]{\renewcommand{\filename}{#1}}
\DeclareOptionX*{PackageWarning{externaltikz}{Unknown Option '\CurrentOption' will be ignored.}}

\ExecuteOptionsX{draft,filename}

\ProcessOptionsX\relax
Unfortunatelly the xkeyval manual doesn't say that you can't use \DeclareOption and \DeclareOptionX at the same time without running into problem! (LaTeX will halt saying that it can't process a given option and \Declare*{} has to be used.)

But, shouldn't some code like:

Code: Select all

Code, edit and compile here:
\RequirePackage{ifthen,xkeyval}
\newif\ifDraft
\newcommand{\filename}{default}
[color=#FF0080]\define@key{et}{filename}{\renewcommand{\filename}{#1}}[/color]
\DeclareOption{draft}{\Drafttrue}
\DeclareOption{final}{\Draftfalse}
[color=#FF0080]\DeclareOption*{\setkeys{et}{\CurrentOption}}[/color]
\ExecuteOptions{draft}
[color=#FF0080]\renewcommand{\filename}{\jobname}[/color]
\ProcessOptions\relax
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Because then I could use keyval rather then xkeyval for higher compatibility.

Thanks a lot!
Post Reply