为了让 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}