Sophanatprime / cus

CusTeX
8 stars 4 forks source link

如何跨 module 或者 library 进行命令设置 #13

Closed xkwxdyy closed 1 month ago

xkwxdyy commented 1 month ago

场景与 MWE

现在有一个 math-master 库用来进行硕士毕业论文模版设置

\CUSProvideExplLibrary{math-master}{\whu@date}{\whu@version}{...}
...
\cs_new:Npn \__whu_acknowledgement_format_set:
  {
    % \setuponetitle { chapter } 
    %   {
    %     % mode = nonumber 
    %     mode = normal 
    %   }
    hahahaha 
  }
\CUSLoadModule { acknowledgement }

其中关于致谢的内容我做成了模块

\CUSDependency{module={struct}}
\CUSProvideExplModule{acknowledgement}{\whu@date}{\whu@version}{Environment for acknowledgement}

% \cs_new:Npn \__whu_acknowledgement_format_set: {}
\NewDocumentEnvironment { acknowledgement } {}
  {
    % \setuponetitle{chapter}{mode=normal, numbering=false}
    \__whu_acknowledgement_format_set:
    \chapter{致谢}
  }
  {}

我的想法是模块里放最 minimal 的配置,以及提供空白设置,然后在其它库中通过设置这个空白设置,从而可以达到不同库(进而是不同类型的模板,比如本科,硕士)有不同的设置,而不是直接复制致谢库里的内容到每个库里,这样可能会造成代码的臃肿和不简洁。我相信重复调用也是 cus 项目中模块和库的设计的出发点之一。

问题

我不知道该如何实现这个我所说的这个效果,可以给点思路吗

xkwxdyy commented 1 month ago

我找到为什么失效了,\backmatter 影响了后面的:

\documentclass{ctexbook}
\usepackage{cus}

\begin{document}

\backmatter

\setuponetitle{chapter}{mode=normal}
\chapter{致谢}

\end{document}

\setuponetitle{chapter}{mode=normal} 不起作用了,这是个 bug 吗?

Sophanatprime commented 1 month ago

我不知道该如何实现这个我所说的这个效果,可以给点思路吗

现在这个思路就可以呀。

\setuponetitle{chapter}{mode=normal} 不起作用了

这是因为 \chapter 是否编号还受到 \if@mainmatter 的影响,这是 bookctexbook 就有的行为。不过现在确实可以取消它,而直接在 \frontmatter \mainmatter \backmatter\setuptitle 修改。

顺带一提,关于库文件的命名倾向于使用 pgf 那样的规则,比如 whu whu.math whu.math.master 等等。

另外,cus 在加载模块和库时都是支持模块/库选项的,不过在 v0.0.4g 之前(含)是 \CUSLoadLibrary{<library>}[<options>][<date>],v0.0.4h(今天晚些时候发布)改成和 \RequirePackage 一样了 \CUSLoadLibrary[<options>]{<library>}[<date>]。只要在模块/库的合适位置使用 \ProcessKeyOptions[<key root>] 就行。不过并没有 \PassOptionsTo.. 这种。

xkwxdyy commented 1 month ago

顺带一提,关于库文件的命名倾向于使用 pgf 那样的规则,比如 whu whu.math whu.math.master 等等。

好的,感谢提醒。

另外,cus 在加载模块和库时都是支持模块/库选项的,不过在 v0.0.4g 之前(含)是 \CUSLoadLibrary{<library>}[<options>][<date>],v0.0.4h(今天晚些时候发布)改成和 \RequirePackage 一样了 \CUSLoadLibrary[<options>]{<library>}[<date>]。只要在模块/库的合适位置使用 \ProcessKeyOptions[<key root>] 就行。

好的,期待新版本。

不过并没有 \PassOptionsTo.. 这种。

这是实现上有难度吗还是

Sophanatprime commented 1 month ago

这是实现上有难度吗还是

还是决定加上 \CUSPassOptionsToLibrary,不过它只是保存键值,和 \PassOptionsToPackage 略有不同。