缺少数字?未评估宏(嵌套宏)?

缺少数字?未评估宏(嵌套宏)?

我想仅使用一个开关更改一些文档边距。但是,宏似乎没有被评估?!下面,我仅显示了应由一个变量控制的 3 个值中的 1 个。

\newcommand{\headsepValue}[3]{%
\IfEqCase{#1}{%
    {a}{43mm}% \headsep{43mm}
    {b}{53mm}% \headsep{53mm}
    {c}{63mm}% \headsep{63mm}
    % you can add more cases here as desired
}[\PackageError{headsepValue}{Undefined option to headsepValue: #1}{}]%
}%

\newcommand{\valueUsedForSpacing}{a}

\setlength{\headsep}{\headsepValue{\valueUsedForSpacing}}

这给了我一个错误(!缺少数字,视为零)。我必须以\expandafter某种方式使用吗?或者我如何告诉 Latex 我想要:

\setlength{\headsep}{\headsepValue{\valueUsedForSpacing}}

其计算结果应为

\setlength{\headsep}{\headsepValue{a}}

进而

\setlength{\headsep}{43mm}

感谢您的帮助!

更新:感谢到目前为止的所有回复!稍后我会仔细研究建议的替代方案。但首先我会向您提供我的代码。

我使用 g-brief 并尝试对其进行一些修改。我添加了example.texg-brief.cls,结果出现了错误。

这是 example.tex:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                       PREAMBLE                      %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[english,10pt]{g-brief}
\renewcommand{\familydefault}{\sfdefault}
\newcommand*{\myfont}{\fontfamily{ptm}\selectfont}      %font in header and footer ptm=Times
\usepackage{helvet}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\usepackage{ifthen}
\usepackage{etoolbox}
\usepackage{pgfplots}

\pgfplotsset{compat=1.7}
\usetikzlibrary{fadings}

\lochermarke
\faltmarken
%\fenstermarken
\trennlinien
%\klassisch

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%               Body                                  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}

\Name{MyName}
\Strasse{MyAddress}
%\Zusatz{}
\Ort{MyPlace}
\Land{MyCountry}
\Telefon{MyPhoneNumber}
%\Telex{}
\EMail{MyEmail}
\HTTP{MyHTTP}
%\Bank{}
%\BLZ{}
%\Konto{}
\RetourAdresse{ } % Wichtig: Muss ein Leerzeichen sein, sonst gibt's
                  % Probleme mit dem Brief-Fenster, falls ein Land
                  % angegeben wird

\Adresse{YourName\\
YourAddress\\
YourCountry\\
}

\Datum{\today}
%\Postvermerk{}
%\MeinZeichen{}
\Betreff{Modify g-brief.cls}
%\IhrSchreiben{}
%\Anlagen{CV attached}
%\Verteiler{}

\Anrede{GreetingToYou,}
\Gruss{ByeBye}{0.2cm}
\Unterschrift{MySignature}

\begin{g-brief}

If I have lot of text here, I want to be able to adjust several margins to squeeze everything on one single page instead of ending up with e.g. a few words on the next page

Margins that I would like to change are: 1) separation between header and    address field, 2) based on that change the available text height [and 3) should actually be the vertical position of the line separating the footer, which is linked to the text height]

\end{g-brief}
\end{document}

...这是我修改后的 g-brief.cls

%%
%% This is file `g-brief.cls',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% g-brief.dtx  (with options: `class')
%% 
%% =======================================================================
%% 
%% Copyright (C) 1991-2003 Michael Lenzen.
%% 
%% For additional copyright information see further down in this file.
%% 
%% This file is part of the G-BRIEF package.
%% -----------------------------------------------------------------------
%% 
%% It may be distributed under the terms of the LaTeX Project Public
%% License (LPPL), as described in lppl.txt in the base LaTeX distribution.
%% Either version 1.1 or, at your option, any later version.
%% 
%% The latest version of this license is in
%% 
%%          http://www.latex-project.org/lppl.txt
%% 
%% LPPL Version 1.1 or later is part of all distributions of LaTeX
%% version 1999/06/01 or later.
%% 
%% 
%% Error reports in case of UNCHANGED versions to
%% 
%%                            <[email protected]>
%%                            <[email protected]>
%% 
%% 
\usepackage{xstring}
\def\filedate{2008/07/15}
\def\fileversion{4.0.2}
\def\filedate{2008/07/15}
\def\fileversion{4.0.2}
\def\filename{g-brief.cls}
\NeedsTeXFormat{LaTeX2e}[2001/06/01]

\ProvidesClass{g-brief}[\filedate\space v\fileversion\space g-brief class]

\newdimen\VorschubH
\newdimen\VorschubV
\VorschubH = 0.0mm
\VorschubV = 0.0mm

\def\sprache{ngerman}
\def\telefontex{{\footnotesize Telefon\/:}}
\def\telefaxtext{{\footnotesize Telefax\/:}}
\def\telextext{{\footnotesize Telex\/:}}
\def\emailtext{{\footnotesize e--Mail\/:}}
\def\httptext{{\footnotesize HTTP\/:}}
\def\banktext{{\footnotesize Bankverbindung\/:}}
\def\blztext{{\footnotesize BLZ\/:}}
\def\kontotext{{\footnotesize Kto.\/:}}
\def\betrefftext{{\normalsize Betreff\/:}}
\def\ihrzeichentext{\footnotesize\textsc{Ihr Zeichen}}
\def\ihrschreibentext{\footnotesize\textsc{Ihr Schreiben vom}}
\def\meinzeichentext{\footnotesize\textsc{Mein Zeichen}}
\def\unserzeichentext{\footnotesize\textsc{Unser Zeichen}}
\def\datumtext{\footnotesize\textsc{Datum}}
\def\datum{\number\day.~\ifcase\month\or Januar\or Februar\or
    M\"arz\or April\or Mai\or Juni\or Juli\or August\or September\or
    Oktober\or November\or Dezember\fi \space\number\year}

\DeclareOption{english}{
    \def\sprache{english}
    \def\telefontex{{\footnotesize Phone\/:}}
    \def\telefaxtext{{\footnotesize Fax\/:}}
    \def\telextext{{\footnotesize Telex\/:}}
    \def\emailtext{{\footnotesize e--Mail\/:}}
    \def\httptext{{\footnotesize HTTP\/:}}
    \def\banktext{{\footnotesize Bank\/:}} \def\blztext{{\footnotesize
            code}} \def\kontotext{{\footnotesize acct}}
    \def\betrefftext{{\normalsize Subject:}}
    \def\ihrzeichentext{\footnotesize\textsc{Your Ref.}}
    \def\ihrschreibentext{\footnotesize\textsc{Your Mail}}
    \def\meinzeichentext{\footnotesize\textsc{My Ref.}}
    \def\unserzeichentext{\footnotesize\textsc{Our Ref.}}
    \def\datumtext{\footnotesize\textsc{Date}}
    }

\DeclareOption{american}{
    \def\sprache{american}
    \def\telefontex{{\footnotesize Phone\/:}}
    \def\telefaxtext{{\footnotesize Fax\/:}}
    \def\telextext{{\footnotesize Telex\/:}}
    \def\emailtext{{\footnotesize e--Mail\/:}}
    \def\httptext{{\footnotesize HTTP\/:}}
    \def\banktext{{\footnotesize Bank\/:}} \def\blztext{{\footnotesize
            code}} \def\kontotext{{\footnotesize acct}}
    \def\betrefftext{{\normalsize Subject:}}
    \def\ihrzeichentext{\footnotesize\textsc{Your Ref.}}
    \def\ihrschreibentext{\footnotesize\textsc{Your Mail}}
    \def\meinzeichentext{\footnotesize\textsc{My Ref.}}
    \def\unserzeichentext{\footnotesize\textsc{Our Ref.}}
    \def\datumtext{\footnotesize\textsc{Date}}
    }

\DeclareOption{10pt}{\def\@schrift{0}}
\DeclareOption{11pt}{\def\@schrift{1}}
\DeclareOption{12pt}{\def\@schrift{2}}

\let\@docencoding\@empty
\DeclareOption{ansinew}{\def\@docencoding{ansinew}}
\DeclareOption{applemac}{\def\@docencoding{applemac}}
\DeclareOption{ascii}{\def\@docencoding{ascii}}
\DeclareOption{cp1250}{\def\@docencoding{cp1250}}
\DeclareOption{cp1252}{\def\@docencoding{cp1252}}
\DeclareOption{cp437de}{\def\@docencoding{cp437de}}
\DeclareOption{cp437}{\def\@docencoding{cp437}}
\DeclareOption{cp850}{\def\@docencoding{cp850}}
\DeclareOption{cp852}{\def\@docencoding{cp852}}
\DeclareOption{cp865}{\def\@docencoding{cp865}}
\DeclareOption{decmulti}{\def\@docencoding{decmulti}}
\DeclareOption{latin1}{\def\@docencoding{latin1}}
\DeclareOption{latin2}{\def\@docencoding{latin2}}
\DeclareOption{latin3}{\def\@docencoding{latin3}}
\DeclareOption{latin4}{\def\@docencoding{latin4}}
\DeclareOption{latin5}{\def\@docencoding{latin5}}
\DeclareOption{latin9}{\def\@docencoding{latin9}}
\DeclareOption{next}{\def\@docencoding{next}}

\ExecuteOptions{11pt,@sprache} \ProcessOptions
\LoadClass[1\@schrift pt, a4paper, oneside, final]{letter}[1999/04/29]
\normalsize

\newcommand{\headsepValue}[3]{%
        \IfEqCase{#1}{%
                {a}{43mm}% \headsep{43mm}
                {b}{53mm}% \headsep{53mm}
                {c}{63mm}% \headsep{63mm}
                % you can add more cases here as desired
        }[\PackageError{headsepValue}{Undefined option to headsepValue: #1}{}]%
}%

\newcommand{\txtHeight}[3]{%
        \IfStrEqCase{#1}{%
                {a}{208.88mm}% \headsep{43mm}
                {b}{198.88mm}% \headsep{53mm}
                {c}{188.88mm}% \headsep{63mm}
                % you can add more cases here as desired
        }[\PackageError{txtHeight}{Undefined option to txtHeight: #1}{}]%
}%
\newcommand{\yPosition}[3]{%
        \IfStrEqCase{#1}{%
                {a}{-770pt}% \headsep{43mm}
                {b}{-760pt}% \headsep{53mm}
                {c}{-750pt}% \headsep{63mm}
                % you can add more cases here as desired
        }[\PackageError{yPosition}{Undefined option to yPosition: #1}{}]%
}%

\newcommand{\valueUsedForSpacing}{a}

\setlength\oddsidemargin{0\p@}
\setlength\evensidemargin{\oddsidemargin}
\setlength\marginparwidth{90\p@}
\setlength\marginparsep{11\p@}
\setlength\marginparpush{5\p@}
\setlength\topmargin{-12.69mm}
\setlength\headheight{4.23mm}

%\setlength{\headsep}{43mm} % 43mm=a,(53mm=b),63mm=c; 
\setlength{\headsep}{\headsepValue{\valueUsedForSpacing}}

\setlength\topskip{3.38mm}
\addtolength\footskip{4.23mm}
\setlength\textheight{208.88mm} %43mm=208.88mm,(53mm=198.88mm),63mm = 188.88mm
\setlength\textwidth{165mm}

\setlength\lineskip{1\p@}
\setlength\normallineskip{1\p@}

\renewcommand\baselinestretch{1}

\advance\topmargin by \VorschubV
\advance\oddsidemargin by \VorschubH
\setlength\evensidemargin{\oddsidemargin}

\AtEndOfClass{\pagestyle{regularpage}}

\def\Name#1{\def\name{#1}} \def\name{}
\def\Strasse#1{\def\strasse{#1}} \def\strasse{}
\def\Zusatz#1{\def\zusatz{#1}} \def\zusatz{}
\def\Ort#1{\def\ort{#1}} \def\ort{}
\def\Land#1{\def\land{#1}} \def\land{}
\def\RetourAdresse#1{\def\retouradresse{#1}} \def\retouradresse{}

\def\Telefax#1{\def\telefax{#1}} \def\telefax{}
\def\Telex#1{\def\telex{#1}} \def\telex{}
\def\EMail#1{\def\email{#1}} \def\email{}
\def\HTTP#1{\def\http{#1}} \def\http{}

\def\Bank#1{\def\bank{#1}} \def\bank{}
\def\BLZ#1{\def\blz{#1}} \def\blz{}
\def\Konto#1{\def\konto{#1}} \def\konto{}

\def\Postvermerk#1{\def\postvermerk{#1}} \def\postvermerk{}
\def\Adresse#1{\def\adresse{#1}} \def\adresse{}

\def\IhrZeichen#1{\def\ihrzeichen{#1}} \def\ihrzeichen{}
\def\IhrSchreiben#1{\def\ihrschreiben{#1}} \def\ihrschreiben{}
\def\MeinZeichen#1{\def\meinzeichen{#1}} \def\meinzeichen{}
\def\Datum#1{\def\datum{#1}} \def\datum{\today}

\def\Betreff#1{\def\betreff{#1}} \def\betreff{}

\def\Anrede#1{\def\anrede{#1}} \def\anrede{}
\def\Gruss#1#2{\def\gruss{#1} \def\grussskip{#2}}
        \def\gruss{} 
        \def\grussskip{}    

\def\Unterschrift#1{\def\unterschrift{#1}} \def\unterschrift{}

\def\Anlagen#1{\def\anlagen{#1}} \def\anlagen{}
\def\Verteiler#1{\def\verteiler{#1}} \def\verteiler{}

\long\def\Einrueckung#1{\par\begin{tabular}{@{\hspace{1in}}p{5in}@{}}
        #1\end{tabular}\par}

\newif\ifklassisch\klassischfalse
\def\klassisch{\klassischtrue}

\newif\iftrennlinien\trennlinienfalse
\def\trennlinien{\trennlinientrue}

\newif\iflochermarke\lochermarkefalse
\def\lochermarke{\lochermarketrue}

\newif\iffaltmarken\faltmarkenfalse
\def\faltmarken{\faltmarkentrue}

\newif\iffenstermarken\fenstermarkenfalse
\def\fenstermarken{\fenstermarkentrue}

\newif\ifunserzeichen\unserzeichenfalse
\def\unserzeichen{\unserzeichentrue}

\newenvironment{g-brief}{
    \thispagestyle{firstpage}
    \setlength\unitlength{1mm}

    \c@page\@ne
    \interlinepenalty=200
    \clearpage

    \ifx \ihrzeichen\empty \ifx \ihrschreiben\empty \ifx
    \meinzeichen\empty \makebox[50.5mm][l]{} \makebox[55.0mm][l]{}
    \makebox[20.0mm][l]{} \else \makebox[45.5mm][l]{\ihrzeichentext}
    \makebox[55.0mm][l]{\ihrschreibentext} \ifunserzeichen
    \makebox[20.0mm][l]{\unserzeichentext} \else
    \makebox[20.0mm][l]{\meinzeichentext} \fi \fi \else
    \makebox[45.5mm][l]{\ihrzeichentext}
    \makebox[55.0mm][l]{\ihrschreibentext} \ifunserzeichen
    \makebox[20.0mm][l]{\unserzeichentext} \else
    \makebox[20.0mm][l]{\meinzeichentext} \fi \fi \else
    \makebox[45.5mm][l]{\ihrzeichentext}
    \makebox[55.0mm][l]{\ihrschreibentext} \ifunserzeichen
    \makebox[20.0mm][l]{\unserzeichentext} \else
    \makebox[20.0mm][l]{\meinzeichentext} \fi \fi
    \makebox[37.0mm][r]{\datumtext} \\
    \makebox[45.5mm][l]{\ihrzeichen}
    \makebox[55.0mm][l]{\ihrschreiben}
    \makebox[20.0mm][l]{\meinzeichen}
    \makebox[42.0mm][r]{\datum} \par

    \vspace{8mm}

    \ifcase\@ptsize\vspace{0.045pt}\or \vspace{-1.555pt}\or
    \vspace{-2.955pt} \fi

    \ifx \betreff\empty 
            \else \ifklassisch 
                    \betrefftext \space \space \betreff 
                \else 
                    \textbf{\betreff} 
                \fi 
        \mbox{} \par \vspace{-1\parskip} \vspace{8mm} 
    \fi

    \ifcase\@ptsize\vspace{0.045pt}\or \vspace{-1.555pt}\or
    \vspace{-2.955pt} \fi

    \ifx \anrede\empty \else \anrede \par \fi\nobreak
    \addtolength\textheight{63mm}
    }
{
    \renewcommand{\baselinestretch}{1.0}
    \ifcase \@ptsize\relax \normalsize \or \small \or \footnotesize \fi

    \vspace{\grussskip} \par \nobreak \stopbreaks \noindent
    \parbox[t]{3.5in}{\raggedright \ignorespaces {\normalsize \ifx
            \gruss\empty \else \gruss \mbox{} \\[13.92mm] \fi \ifx          
            \unterschrift\empty \relax \else \ifklassisch
            \textsl{(\unterschrift)} \else \unterschrift \fi
        \fi}\strut} \ifx \anlagen\empty \else \vspace{4mm} \par \anlagen
    \par \fi \ifx \verteiler\empty \else \ifx \anlagen\empty
    \vspace{4mm}\par \fi \verteiler \fi }

\def\ps@firstpage{
    \renewcommand{\baselinestretch}{1.0}
    \ifcase \@ptsize\relax \normalsize \or \small \or \footnotesize \fi
        \headheight16pt 
    \def\@oddhead{ 
        \unitlength1mm
        \begin{picture}(0,0)
            \put(-9, 3){\parbox{180mm}{\Large \myfont \ifklassisch \textsl{\quad\name}
                    \else \textsc{\quad\name} \fi}}
            \put(-9, 4){\parbox{180mm}{\hfill \normalsize \myfont \ifklassisch \textsl{
                        \begin{tabular}{r} \strasse \quad \\ \ifx \zusatz\empty \else
                            \zusatz \quad \\ \fi \ort \quad \ifx \land\empty \else \\
                            \land \quad \fi \end{tabular}} \else \textsc{
                        \begin{tabular}{r} \strasse \quad \\ \ifx \zusatz\empty \else
                            \zusatz \quad \\ \fi \ort \quad \ifx \land\empty \else \\
                            \land \quad \fi \end{tabular}} \fi }}
            \iftrennlinien 

            \begin{tikzpicture}[remember picture,overlay]

            \path[left color=white,right color=white,middle color=black]
            ([xshift=45pt,yshift=-70pt]current page.north west)+(0,0) rectangle +(185mm,0.5pt); 


            \end{tikzpicture}

            \fi 

            \iflochermarke \put(-20,- 130.50){\line(1,0){4}} \fi
            \iffaltmarken \put(-15,- 75.16){\line(1,0){3}}
            \put(-15,-182.16){\line(1,0){3}} \fi
            \put( -9, -22.00){\makebox(85,4) %-22
                {\scriptsize \ifx \retouradresse\empty
                    \textrm{\name\ $\cdot$\ \strasse\ $\cdot$\ \ort \ifx
                            \land\empty \else \ $\cdot$\ \land \fi } \else
                        \textrm{} \fi}}
            \put(-1,-28.15){\parbox[t]{4in}{\ifx \postvermerk\empty \hfill \par
                    \else \textbf{\postvermerk} \par \vspace{2mm} \fi \adresse}}            
            \iffenstermarken
            \put(-9,-18.15){\line( 1, 0){1}} \put(-9,-18.15){\line( 0,-1){1}}
            \put(76,-18.15){\line(-1, 0){1}} \put(76,-18.15){\line( 0,-1){1}}
            \put(-9,-61.00){\line( 1, 0){1}} \put(-9,-61.00){\line( 0, 1){1}}
            \put(76,-61.00){\line(-1, 0){1}} \put(76,-61.00){\line( 0, 1){1}}
            \fi
        \end{picture}
        \hfill}
    \def\@oddfoot{\unitlength1mm
        \begin{picture}(0,0)
            \put(-9,0){\parbox{180mm}{\footnotesize \myfont 
                    \iftrennlinien                                                                  %trennlinie footer

                    \begin{tikzpicture}[remember picture,overlay]

                    %\if \headsep43mm -790pt \else \if \headsep53mm -780pt  \else -770pt \fi \fi
                    %\if\headsep43mm -790pt\fi \if\headsep53mm -780pt\fi \if\headsep63mm -770pt\fi
                    \path[left color=white,right color=white,middle color=black]
                    ([xshift=45pt,yshift=   \if \headsep43mm -790pt \else -780pt \fi ]current page.north west)+(0,0) rectangle +(185mm,0.5pt); 

                    \end{tikzpicture}               

                    \fi

                    \begin{tabular}{ll}
                        \ifx \telefon\empty \else \telefontex & \telefon \\ \fi \ifx
                        \telefax\empty \else \telefaxtext & \telefax \\ \fi \ifx
                        \telex\empty \else \telextext & \telex \\ \fi \ifx
                        \email\empty \else \emailtext & \email \\ \fi \ifx
                        \http\empty \else \httptext & \http \\ \fi \
                    \end{tabular}\hfill
                    \begin{tabular}{ll}
                        \ifx \bank\empty \else \ifx \blz\empty \else \ifx
                        \konto\empty \else \banktext & \bank \\ & \blztext \space \blz
                        \\ & \kontotext \space \konto \\ \ \fi \fi \fi
                    \end{tabular}}}
        \end{picture} \hfill}
    \def\@evenhead{\@oddhead} \def\@evenfoot{\@oddfoot}}

\def\ps@regularpage{ \headheight36pt\def\@oddhead{\unitlength1mm
        \begin{picture}(0,0)
            \put(-9,3){\makebox(180,15){\normalsize \ifklassisch \textsl{ 
                {\Large\quad}\name\hfill\datum\hfill\pagename\ \thepage\quad}
                \else \textsc{{\Large\quad}\name\hfill\datum\hfill\pagename\
                \thepage\quad} \fi}}
            \if \put(-9,0){\rule{180mm}{0.5pt}} \fi
        \end{picture}\hfill}
    \def\@oddfoot{\empty} \def\@evenhead{\@oddhead}
    \def\@evenfoot{\@oddfoot}}

\IfFileExists{babel.sty}
    {\RequirePackage[\sprache]{babel}[2001/03/01]}
    {\ClassError{g-brief}
        {Babel not installed !!!}
        {Get babel package !!!}}

\ifx \@docencoding\empty \else
\IfFileExists{inputenc.sty}
    {\RequirePackage[\@docencoding]{inputenc}}
    {\ClassError{g-brief}
        {LaTeX2e not complete installed or out of date !!!}
        {Get current LaTeX2e !!!}}
\fi

\IfFileExists{marvosym.sty}
    {\RequirePackage{marvosym}}
    {}
    \def\Telefon#1{\def\telefon{#1}} \def\telefon{}
\IfFileExists{europs.sty}
    {\RequirePackage{europs}}
    {}{}
\IfFileExists{eurosym.sty}
    {\RequirePackage{eurosym}}
    {}{}


\endinput
%%
%% End of file `g-brief.cls'.

更新 2:谢谢大家!我选择了最简单的解决方案,\ifcase成功了!

答案1

\IfEqCase返回在案例中进行选择的指令,并印刷结果。它不能在您希望的上下文中使用,因为它\setlength需要明确的长度,而不是生成它的指令。

您需要一个可扩展的版本:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\setvalues}{mmm}
 { % #1 = symbolic name, #2 = set of values, #3 = default for error
   \cs_new:Npn #1 ##1
    {
     \str_case_x:nnF { ##1 }{ #2 }
      {% invalid case
       #3
       \msg_error:nnn{sam-oht/setvalues}{invalid}{##1}
      }
    }
 }
\msg_new:nnnn{sam-oht/setvalues}{invalid}
 {
  Invalid~choice~'#1'
 }
 {
  You~have~to~supply~a~good~value,~not~'#1'
 }
\ExplSyntaxOff

\setvalues{\headsepValue}{
  {a}{43mm}% \headsep{43mm}
  {b}{53mm}% \headsep{53mm}
  {c}{63mm}% \headsep{63mm}
}{0pt}

\begin{document}

\newcommand{\valueUsedForSpacing}{a}

\setlength{\headsep}{\headsepValue{\valueUsedForSpacing}}

\the\headsep

\setlength{\headsep}{\headsepValue{c}}

\the\headsep

\setlength{\headsep}{\headsepValue{z}}

\the\headsep

\end{document}

在此处输入图片描述

这是控制台上的错误消息

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!
! sam-oht/setvalues error: "invalid"
! 
! Invalid choice 'z'
! 
! See the sam-oht/setvalues documentation for further information.
! 
! For immediate help type H <return>.
!...............................................  

l.43 \setlength{\headsep}{\headsepValue{z}}

? h
|'''''''''''''''''''''''''''''''''''''''''''''''
| You have to supply a good value, not 'z'
|...............................................
? 

答案2

下面是一个示例,仅使用 eTeX 原语即可完成此操作:

\newdimen\headsep

\def\headsepvalue#1{\ifcase\numexpr`#1-`a\relax
   43mm\or 
   53mm\or 
   63mm\else 
   0mm\errmessage{Undefined option to headsepvalue: #1}\fi
}

\headsep=\headsepvalue a

\message{\the\headsep} % test of value setting

\end

请注意,\ifcase原始是可扩展的。你不需要类似的东西\ExplSyntaxOn

相关内容