如何使用自定义命令输出作为长度?

如何使用自定义命令输出作为长度?

为了让 TeX 保留网格,我尝试编写一个命令,该命令以字体大小开关为参数,并计算相应基线跳跃与\onelineskip(默认大小的基线跳跃)除法的余数。然后应使用命令输出来设置一些长度。

基本上,我想要做的是将自定义命令的输出直接传递给\setlength

但是我遇到了一些问题,好像我做了这样的事情:

\setlength{\trueGridDiv}{\trueGrid{\secheadstyle}}

\trueGird我的自定义命令的长度在哪里,我得到:

Missing number, treated as zero

我猜这与 TeX 的扩展方式有关,我想知道,使用命令输出的方法是否\setlength可行,如果可行,如何实现?

一种解决方法是在命令中设置自定义长度并在其中使用它\setlength

\trueGrid{\secheadstyle} % put the result of it calculations into the length `trueGridOutput`
\setbeforesecskip{-2\onelineskip + \trueGridOutput}

这是一个有效的例子:

\documentclass[a4paper,10pt,twoside]{memoir}
\usepackage{fp, calc}

\makeatletter
\newcommand\stripPT[1]{\strip@pt#1}
\makeatother

\newlength{\trueGridH}
\newlength{\trueGridDiv}
\newlength{\test}

\newcommand{\trueGrid}[2][\onelineskip]{%
% Get baselineskip of the given font size.
\settoheight{\trueGridH}{#2 \raisebox{0pt}[\baselineskip][0pt]{}}%
%
% Set the baselineskip. Default is \onelineskip.
\setlength{\trueGridDiv}{#1}%
%
% We do not have modulo function, so we calculate the
% reminder of the devision the given (#2) hight and 
% the default line hight.
\FPdiv\result{\stripPT{\trueGridH}}{\stripPT{\trueGridDiv}}%
\FPtrunc\trunced{\result{}}{0}%
\FPsub\remainder{\result{}}{\trunced{}}%
\FPmul\remainder{\remainder{}}{\stripPT{\trueGridDiv}}%
%
\remainder pt%
}
\newlength{\secheadGrid}
\setlength{\secheadGrid}{\trueGrid{\secheadstyle}}
\setbeforesecskip{-2\onelineskip + \trueGrid{\secheadstyle}}

\begin{document}
\trueGrid{\secheadstyle}
\end{document}

相关内容