打包文件zztj.sty
:
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{zztj}{}{}{}
\RequirePackage{l3keys2e}
% --------------------------------
\widowpenalties 3 10000 -1 0
% --------my other options--------
\tl_new:N\g__zztj_paper_tl
\keys_define:nn{zztj/option}
{
paper.choices:nn=
{a4, a5}
{\tl_gset:Nn\g__zztj_paper_tl{#1}},
}
\ProcessKeysOptions{zztj/option}
和测试文件test.tex
:
\documentclass{book}
\usepackage[paper=a5]{zztj}
\begin{document}
abc
\end{document}
产生此构建错误:
This is XeTeX, Version 3.141592653-2.6-0.999994 (TeX Live 2022) (preloaded format=xelatex)
restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2021-11-15> patch level 1
L3 programming layer <2022-02-24>
(d:/texlive/texmf-dist/tex/latex/base/book.cls
Document Class: book 2021/10/04 v1.4n Standard LaTeX document class
(d:/texlive/texmf-dist/tex/latex/base/bk10.clo)) (./zztj.sty
(d:/texlive/texmf-dist/tex/latex/l3kernel/expl3.sty
(d:/texlive/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
(|extractbb --version)))
(d:/texlive/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty)
! Missing number, treated as zero.
<to be read again>
\tex_global:D
l.10 \tl_new:N\g__zztj_paper_tl
?
如果我想将其放入\widowpenalties 3 10000 -1 0
我的包中,因为我想管理我的包中的所有设置,那么这个错误该如何解决?
答案1
当你声明时\ProvideExplPackage
,\ExplSyntaxOn
是隐式有效的,所以空格会被忽略,你基本上是在说
\widowpenalties 310000 -10
它要求 TeX 查找 310000 个数字,但只找到一个。
要么使用“真实”空格,它在范围内\ExplSyntaxOn
(~
波浪符号)
\widowpenalties 3 ~ 10000 ~ -1 ~ 0 \scan_stop:
或者延迟在包末尾设置之后\ExplSyntaxOff
:
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}
\ProvidesExplPackage{zztj}{}{}{}
\RequirePackage{l3keys2e}
% --------------------------------
% --------my other options--------
\tl_new:N\g__zztj_paper_tl
\keys_define:nn{zztj/option}
{
paper.choices:nn=
{a4, a5}
{\tl_gset:Nn\g__zztj_paper_tl{#1}},
}
\ProcessKeysOptions{zztj/option}
% other expl3 code
\ExplSyntaxOff
\widowpenalties 3 10000 -1 0
不过,我不确定你想通过惩罚达到什么目的-1
:这本质上与相同\widowpenalty 10000
。
添加“语法糖”可能会很有用,以便更容易输入而不必担心空格(我猜有一天会有一个官方expl3
界面):
\cs_new_protected:Nn \redmoon_widowpenalties:n
{
\widowpenalties \clist_count:n { #1 } ~ \clist_use:nn { #1 } { ~ } \scan_stop:
}
\redmoon_widowpenalties:n { 10000, -1, 0 }