30 请问如何用latex3定义一个键值列表来使用不同的封面 (引入不同的宏包命令)?

发布于 2023-05-31 10:34:41

请问如何用latex3定义一个键值列表来使用不同的封面 (引入不同的宏包命令)?
这是我傻乎乎抄的一些代码,不会用,请专家看下如何修改来达到所提问的效果

\ExplSyntaxOn
\clist_new:N \l__Beautybook_tmpa_clist
\cs_new_protected:Npn \__Beautybook_define_fn_coverstyle:nn #1#2
  { \tl_const:cn { c__Beautybook_fn_coverstyle_ #1 _tl } {#2} }
\keys_define:nn { Beautybook /coverstyle }
  {
    cover choose.choice:,
    cover choose.value_required:n = true,
    cover choose / cn.code:n={\RequirePackage{stys/cncover}}, % springer经典封面
    cover choose / en.code:n={\RequirePackage{stys/Titlepage}}, % springer经典封面
    cover choose / enfig.code:n={\RequirePackage{stys/imagecover} },% springer经典封面
    cover choose / birkar.code:n={\RequirePackage{stys/secondtitlepage}}, % springer经典封面
  }
  \ExplSyntaxOff

上面是cls中定义,然后想在主文件中这样写

\coverstyle={
    cover choose=enfig, % 待选值有: en,cn, birkar.
}

对应文件,其中的-EN的文件和cls就是

查看更多

关注者
1
被浏览
693
雾月
雾月 2023-05-31
这家伙很懒,什么也没写!

先读 interface3.pdf,就算不全读也要读个大概,然后再用 LaTeX3。

定义和设置键值分别用 \keys_define:nn\keys_set:nn。如果你用 TeXLive2023,可以用 LaTeX2e 提供的接口:\DeclareKeys\SetKeys

一般情况下,LaTeX3 的键值接口不使用空格作为单词之间的分隔符,除非需要与 pgf (tikztcolorboxpgfplots 等)交互,而且空格是 ~ 不是 。如 siunitx 宏包使用 -

% 为了避免多次加载,先使用 tl 保存起来,然后用 \AtBeginDocument 来实际加载它
\keys_define:nn { Beautybook / coverstyle }
  {
    cover-choose .choice: ,
    cover-choose .value_required:n = true ,
    cover-choose / cn .code:n = 
      { \tl_gset:Nn \l__Beautybook_cover_choose_tl { \RequirePackage{...} } } ,
    cover-choose / en .code:n = 
      { \tl_gset:Nn \l__Beautybook_cover_choose_tl { \RequirePackage{...} } } ,
    其它键
    cover-choose .initial:n = cn , % 设置 cn 为初始值
  }
\NewDocumentCommand \coverstyle { +m }
  {
    \keys_set:nn { Beautybook / coverstyle } { #1 }
  }
\AtBeginDocument { \l__Beautybook_cover_choose_tl }
1 个回答

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览