nju-lug / NJUThesis

南京大学学位论文模板
https://ctan.org/pkg/njuthesis
LaTeX Project Public License v1.3c
463 stars 63 forks source link

[Bug]: 章节等的样式会被修改,不应保存在常量 `\c__..._tl` 里 #240

Closed muzimuzhi closed 7 months ago

muzimuzhi commented 8 months ago

先决条件

期望的现象

会被修改的 token list variable,视修改是局部还是全局,应命名为 \l_..._tl\g_..._tl

发生了什么

目前项目里大量使用形如 \c_..._tl 的 constant token list variable,它们有的不是 constant/常量,目前的命名不合适。

constant 意味着创建同时赋值,且后续不应修改。默认没有硬性约束,使用 \debug_on:n { check-declarations } 能报告一些错误的用法。

我没有完整检查,但 \c_@@_fmt_...tl 一类看起来都应该使用 \l_@@_fmt_...tlhttps://github.com/nju-lug/NJUThesis/blob/4bd5fd2bb37b767997e5025e4e41db71ae78a0fd/source/njuthesis.dtx#L2887-L2893

最小工作示例

% !TeX program = xelatex
\documentclass{njuthesis}

\ExplSyntaxOn
\debug_on:n { check-declarations }
\ExplSyntaxOff
\njusetformat{chapterintoc}{\heiti}

\begin{document}

\ExplSyntaxOn
\cs_meaning:N \c__nju_fmt_chapterintoc_tl
\ExplSyntaxOff
%\maketitle
\tableofcontents
\mainmatter
\chapter{欢迎}
使用 \LaTeX{}!
\printbibliography
\end{document}

njuthesis 模板版本

v1.3.2

模板获取途径

使用包管理器从 CTAN 安装

操作系统

macOS

TeX 发行版

TeX Live 2023

编译程序

XeLaTeX

额外信息

atxy-blip commented 8 months ago

回想了一下最开始写这块组件的思路,是从 fduthesis 抄来的,见 fduthesis.dtx#L2923-L2935。 曾老师那个模板中各种嵌入的文字可以定死不动,但是呢,南大教务给的要求很模糊,经常有同学要灵活调整,我就给了个赋值接口 (._.)

实际上我也很迷糊,这些 c 量在绝大多数情况下是不用更改,是否要为了偶发情况全都改成 g 型……

muzimuzhi commented 8 months ago

我想的是,如果没有禁止多次设置某个选项,那么就不能把选项值存在常量里。哪怕大部分时候这些选项只设置一次。

如果有局部修改样式的需求,也许用 l 型更灵活,可以支持 {<local setting> <content>} 这样的用法。

我得去看一下 fduthesis,看看它是不是也实际允许多次设置那些选项。

atxy-blip commented 7 months ago

我得去看一下 fduthesis,看看它是不是也实际允许多次设置那些选项

是没有的。大概复旦的规定有比较好的一致性,没有这种需求。

我把所有可能被修改的 c 型都改成了 l 型。仔细一想在这个点上纠结确实有点,蠢 orz


现在 check-declarations 只会报告 xeCJK 自身的误用,以及一处(我没头绪的)全局修改了 \@begindvi 的误用。

atxy-blip commented 7 months ago

哇啊,rebase 把提交记录搞得好乱。就这样吧全都改好了。