通过编译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 ”并未体现在用户的TeXLive
中。
目前已经发现的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