找回密码
 快速注册
搜索
查看: 418|回复: 10

nameref引用时,如果断开词怎么引用

[复制链接]

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2022-3-24 15:26 |阅读模式
如题,我在定理里写的是:\begin{theorem}[Minkowski 不等式]\label{thm:01:01:01}

我引用时用的是\nameref{thm:01:01:01},但它只引用到“不等式”这三个字,前面那个人名没引用到。以前都是写汉字的,像柯西不等式之类的,没发现这个问题,这个人名太长了,我想写英文,结果引用就发现这个问题了。这要怎么弄呢?

相关帖子

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-3-24 15:40
\nameref 是什么宏包的功能?

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-3-24 16:03
回复 2# kuing

我用的引用包有两个:
\usepackage[pdfencoding=auto,psdextra,colorlinks,linkcolor=red,anchorcolor=blue,citecolor=blue]{hyperref}
\usepackage{cleveref}
我觉得是第一个吧,因为文档里说"Note: hyperref loads package nameref at \begin{document}",所以它应该是自动被加载的吧。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-3-24 16:13
原来如此,我用 hyperref 这么久竟然不知道这个命令

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-3-24 16:19
我这里无法重现该问题,以下代码:
  1. \documentclass[UTF8]{ctexart}
  2. \usepackage{amsthm}
  3. \usepackage[pdfencoding=auto,psdextra,colorlinks,linkcolor=red,anchorcolor=blue,citecolor=blue]{hyperref}
  4. \usepackage{cleveref}
  5. \newtheorem{theorem}{定理}
  6. \begin{document}
  7. \begin{theorem}[Minkowski 不等式]\label{thm:01:01:01}
  8. \end{theorem}
  9. \nameref{thm:01:01:01}
  10. \end{document}
复制代码
xelatex两次,引用结果正常。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-3-24 16:40
回复 5# kuing

我也不知道哪出了问题,精简以后也不能重现主楼的情况,但是也不是正常的:
  1. \documentclass[a4paper]{book}
  2. % 使用到的包
  3. \usepackage{amsmath}
  4. % 定理环境
  5. \usepackage[amsmath, thmmarks]{ntheorem}
  6. \newtheorem{theorem}{定理}[section]%缩写thm
  7. \newcommand\theoremautorefname{定理}
  8. \usepackage[pdfencoding=auto,psdextra,colorlinks,linkcolor=red,anchorcolor=blue,citecolor=blue]{hyperref}
  9. \usepackage{cleveref}
  10. % 字体
  11. \usepackage[slantfont,boldfont]{xeCJK}
  12. \setCJKmainfont{WenQuanYi Micro Hei}
  13. \begin{document}
  14. \chapter{第一章}
  15. \section{第一节}
  16. \begin{theorem}[Minkowski 不等式]\label{thm:01:01:01}
  17. Minkowski 不等式
  18. \end{theorem}
  19. 根据\autoref{thm:01:01:01}有:
  20. 根据\nameref{thm:01:01:01}有:
  21. \end{document}
复制代码

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-3-24 17:14
回复 6# abababa

可能和 ntheorem 包不兼容,我将上述代码第5行改为 \usepackage{amsthm} 就正常了。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-3-24 21:13
回复 7# kuing

搜到两篇帖子:
tex.stackexchange.com/questions/579870/nameref-refers-to-section-title-instead-of-theorem-title

guyrutenberg.com/2012/12/15/nameref-doesnt-work-properly-with-theorem-environment/

都是这个问题。不过不想用帖子里的解决方法,觉得不自然。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-3-25 01:22
回复 8# abababa

链接1是说 ntheorem 无设置 \@currentlabelname,所以 \nameref 就失败鸟。
根据链接1的方法,想出如下方法,未必很好,估计也不算“自然”,姑且一试:
  1. \documentclass[a4paper]{book}
  2. % 使用到的包
  3. \usepackage{amsmath}
  4. % 定理环境
  5. \usepackage[amsmath, thmmarks]{ntheorem}
  6. \makeatletter
  7. \def\@setname#1[#2]{\begin{#1}[#2]\def\@currentlabelname{#2}}
  8. \newcommand\setname[1]{\@ifnextchar[{\@setname{#1}}{\begin{#1}}}
  9. \makeatother
  10. \newtheorem{tmpthm}{定理}[section]
  11. \newcommand\tmpthmautorefname{定理}
  12. \newenvironment{theorem}{\setname{tmpthm}}{\end{tmpthm}}
  13. %引理类似:
  14. \newtheorem{tmplem}{引理}[section]
  15. \newcommand\tmplemautorefname{引理}
  16. \newenvironment{lemma}{\setname{tmplem}}{\end{tmplem}}
  17. \usepackage[pdfencoding=auto,psdextra,colorlinks,linkcolor=red,anchorcolor=blue,citecolor=blue]{hyperref}
  18. \usepackage{cleveref}
  19. % 字体
  20. \usepackage[slantfont,boldfont]{xeCJK}
  21. %\setCJKmainfont{WenQuanYi Micro Hei}
  22. \begin{document}
  23. \chapter{第一章}
  24. \section{第一节}
  25. \begin{theorem}[Minkowski 不等式]\label{thm:01:01:01}
  26. Minkowski 不等式
  27. \end{theorem}
  28. 根据\autoref{thm:01:01:01}有:
  29. 根据\nameref{thm:01:01:01}有:
  30. \begin{lemma}[XXX不等式]\label{lem:01:01:01}
  31. blabla
  32. \end{lemma}
  33. 根据\autoref{lem:01:01:01}有:
  34. 根据\nameref{lem:01:01:01}有:
  35. \end{document}
复制代码
PS、我注释掉了 \setCJKmainfont{WenQuanYi Micro Hei} 是因为我这里没这字体。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-3-25 12:08
回复 9# kuing
这个也挺好,至少是统一地写在导言那里,不用每个定理都改一次。我现在就等着能不能升级之后变正常了。

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2022-3-25 12:12
回复 10# abababa

得等 ntheorem 的作者打补丁了

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 11:56

Powered by Discuz!

× 快速回复 返回顶部 返回列表