nju-lug / NJUThesis

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

[Bug]: 无法通过 crefname 设置定理的引用名称 #206

Closed Undefined01 closed 1 year ago

Undefined01 commented 1 year ago

先决条件

期望的现象

使用 \cref 引用定理环境时,期望能够通过 \crefname 设置的引用名称。

发生了什么

\cref 显示为 ??,且 log 提示 cref reference format for label type solution undefined on input line 29.

image

最小工作示例

\documentclass[]{njuthesis}

\input{njuthesis-setup.def}
\njusetup[theorem]{
    define,
    body-font = \normalfont ,
    type = {
        { {exercise} {习题} },
        { {solution} {解} }
    },
    define
}

\crefname{exercise}{习题}{习题}
\crefname{solution}{解}{解}

\begin{document}

\chapter{示例章节}

\begin{exercise}
\label{exec:1}
123456
\end{exercise}
\begin{solution}
\label{sol:1}
654321
\end{solution}

见\cref{exec:1}和\cref{sol:1}。

\end{document}

njuthesis 模板版本

v1.2.1

模板获取途径

https://tex.nju.edu.cn

操作系统

Linux

TeX 发行版

TeX Live 2022

编译程序

XeLaTeX

额外信息

根据测试,只有 type 中的最后一项环境出现问题,如果在 type 列表的最后新定义一个占位的环境则可以正常显示。

atxy-blip commented 1 year ago

一个很神秘的展开问题,可以将 \__nju_thm_define:nn 命令定义修改为

\cs_new_protected:Npn \__nju_thm_define:nn #1#2
...
      { \exp_args:NV \crefname \l__nju_tmpa_tl {#2} {#2} }
...

待修改位置位于 njuthesis.clsv1.2.1)第1543行。

Undefined01 commented 1 year ago

解决了,而且替换之后模板会自动设置 crefname。感谢!