通过编译jiazhu.dtx手动安装宏包jiazhu.sty。
环境:win 10 + vscode + texlive 2024,
命令:xelatex jiazhu.dtx
报错信息:
! Undefined control sequence.
\__codedoc_print_macroname:nN ..._hyper_target:xN
                                                  {\exp_not:n {#1}\bool_if:N...
l.475 % \begin{macro}[int]{\jiazhu:nn}                    
                提供在网上可以公开获得的代码时最好应该贴代码链接而不是直接上传文件,所以相比于直接上传jiazhu.dtx,更好的办法是贴这个官方链接。
参考muzimuzhi在这个链接中提供的方法,需要使用如下的方法编译:
先使用xetex jiazhu.dtx释放jiazhu.sty以及jiazhu.ins等文件
再使用xelatex jiazhu.dtx在当前目录下已有jiazhu.sty的前提下可以获得jiazhu.pdf的帮助文档
只需要使用release的ctex-kit中最新版本(截至2025-03-03,只要在2024-03-19之后即可)的ctxdoc.cls即可顺利编译jiazhu.dtx。为避免版本困惑,这里贴一个截至2025-03-03(其实是2024-03-19)开发版本的ctxdoc.cls。ctxdoc.cls
一个简略的说明:2023年10月份JosephWright将l3kernel中部分命令的x-type替换为e-type展开这一软性更新,直接影响了作为测试文档类的l3doc.cls中的部分命令,而ctxdoc.cls由于依赖了l3doc.cls文档类,而jiazhu.dtx又依赖于ctxdoc.cls。
上面的上游l3doc.cls中的修改对应的ctxdoc.cls部分命令的修改已经在2023年-2024年间陆续被PR,但由于ctex发版较慢,目前CTAN上的ctxdoc.cls仍然是2022-06-05发版的v2.5ctex-kit版本,上面“对部分命令的修改已经在2023年~2024年间陆续被PR(#704) ”并未体现在用户的TeXLive2024/2025中。
目前已经发现的ctxdoc.cls中的命令替换和对应的PR(都已经被merged,因此使用开发版本但未发版的ctxdoc.cls即可):
\__codedoc_get_hyper_target:xN被替换为\__codedoc_get_hyper_target:eN 这一替换可见PR #678\tl_replace_all:Non被替换为\tl_replace_all:NVn 这一替换可见PR #700\__codedoc_macroname_prefix:o以及\__codedoc_macroname_suffix:N #2命令 这一替换可见PR #703
类似的问题在这个latexstudio提问的评论区以及这个关于fduthesis的源文件编译问题还有这个易经宏包的说明文档也有提到过,最简单的办法都是是直接使用被PR后最新版(而非CTAN上最后发版的2022年的ctex-kit)的ctxdoc.cls,当然,也可以如上手动备份并修改ctxdoc.cls的部分命令。
安装开发版本的ctex-kit也很简单,克隆仓库后到ctex目录下执行l3build install,就会自动安装到用户目录的texmf目录,在编译时优先被调用。
atxy_blip老师在这个issues里提到的基于l3build使用开发版本的ctex-kit的方法可以直接安装到texmf路径内。当然如果保险起见,也可以手动备份或者只添加到当前目录。
Release "jiazhu-beta" 包含了编译好的jiazhu.pdf。截至 2025-03-02,jiazhu.dtx在发这个非正式版后,只有一个重构的提交f85a422,所以那份jiazhu.pdf够用了,jiazhu包的使用者没有自行编译文档的必要性。想自行编译文档的,就超出了使用者范畴,可以尝试如前所述git clone的步骤。
muzimuzhi老师在这个issues提到的直接获得jiazhu.pdf的方法。此处顺便贴一份jiazhu.pdf的文件。jiazhu.pdf
没有贴官方链接是怕无法访问。
如您所说,修改
ctxdoc.cls,再用xetex jiazhu.dtx和xelatex jiazhu.dtx,得到如下报错:@u101077 是的,这个
\tl_replace_all:Non同样也属于ctxdoc.cls已修改但jiazhu.dtx未修改的内容。可以见这个issues。我也会接着探索试试...即使如此做,将
ctxdoc.cls中(最好放在当前目录)的\tl_replace_all:Non替换为\tl_replace_all:NVn也还会出现如下的问题:(这个
l3doc怎么改了这么多命令(😡😡😡),今天有点小忙,下次接着搜搜试试...)关于
\__codedoc_macroname_prefix:o,详见这个PR的讨论 #703