如何配置自定义类,使得消费者设置必须在类设置之前加载?

如何配置自定义类,使得消费者设置必须在类设置之前加载?

我的自定义课程

本课程的目的是创建紧凑纸张尺寸内的单个 PSTricks 图表。

\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 

消费者

消费者使用pst-xport类如下。

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

问题

但是,消费者设置不会产生影响,因为它们排在最后。如何配置自定义类,使得消费者设置必须在类设置之前加载?

附加问题:如何将这些设置转换为更复杂的键值设置?

答案1

您可以在序言末尾计算您的设置,以便用户更改生效。

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

或者提供一些\updatesettings可以进行所有调整的宏。

相关内容