# How to configure a custom class such that consumer settings must be loaded before the class settings?

## My custom class

The purpose of this class is to create a single PSTricks diagram in a tight paper size.

\ProvidesClass{pst-xport}[2011/07/23 v 0.01 class for creating a single PStricks diagram]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions\relax
\LoadClass[]{article}
\RequirePackage{pstricks}

\newcommand\LL{-1}
\newcommand\RR{1}
\newcommand\BB{-1}
\newcommand\TT{1}

\newlength\LPad\setlength{\LPad}{1cm}
\newlength\RPad\setlength{\RPad}{1cm}
\newlength\BPad\setlength{\BPad}{1cm}
\newlength\TPad\setlength{\TPad}{1cm}

\topmargin=\dimexpr\TPad-72.27pt\relax
\oddsidemargin=\dimexpr\LPad-72.27pt\relax
\paperwidth=\dimexpr\RR\psxunit-\LL\psxunit+\RPad+\LPad\relax
\paperheight=\dimexpr\TT\psyunit-\BB\psyunit+\TPad+\BPad\relax
\special{papersize=\the\paperwidth,\the\paperheight}

\headheight=0pt
\headsep=0pt
\parindent=0pt
\pagestyle{empty}

%%%%%%%%%%%%%%%%%%%
%%%% INTERFACE %%%%
%%%%%%%%%%%%%%%%%%%

\newcommand\SetCanvas[4]
{
\renewcommand\LL{#1}
\renewcommand\BB{#2}
\renewcommand\RR{#3}
\renewcommand\TT{#4}
}

\newcommand\SetCan[1]
{
\SetCanvas{-#1}{-#1}{#1}{#1}
}

\newcommand\SetPadding[4]
{
\setlength{\LPad}{#1}
\setlength{\BPad}{#2}
\setlength{\RPad}{#3}
\setlength{\TPad}{#4}
}

\newcommand\SetPad[1]
{
\SetPadding{#1}{#1}{#1}{#1}
}

\endinput


## Consumer

The consumer uses pst-xport class as follows.

\documentclass{pst-xport}

%\SetCanvas{-2}{-2}{2}{2}
\SetCan{2}

%\SetPadding{1cm}{1cm}{1cm}{1cm}
\SetPad{1cm}

\psset
{
xunit=1cm,
yunit=2cm
}

\begin{document}
\begin{pspicture}[showgrid=true](\LL,\BB)(\RR,\TT)
\psframe[linecolor=red](\LL,\BB)(\RR,\TT)
\end{pspicture}
\end{document}


## Problem

However, the consumer settings cannot affect because they come last. How to configure a custom class such that consumer settings must be loaded before the class settings?

Bonus question: How to translate those settings to key-value settings that are more sophisticated?

-
You seem to forget about \AtBeginDocument –  egreg Jul 22 '11 at 18:51
add comment

## 1 Answer

You could calculate your settings at the end of the preamble so that the user changes take effect.

\AtBeginDocument{%
\topmargin=\dimexpr\TPad-72.27pt\relax
\oddsidemargin=\dimexpr\LPad-72.27pt\relax
\paperwidth=\dimexpr\RR\psxunit-\LL\psxunit+\RPad+\LPad\relax
\paperheight=\dimexpr\TT\psyunit-\BB\psyunit+\TPad+\BPad\relax
\special{papersize=\the\paperwidth,\the\paperheight}
}


Or provide some \updatesettings macro which does all adjustsments.

-
add comment