所以,我正在破解与之相关的一些东西,在破解过程中,我发现在我的电脑手册nameref
第 3 页的开头(日期为 2016/05/21)nameref
我们重新定义
\label
,以便它也将当前部分的名称写入.aux 文件;如果名字以点结尾,我们就删除它。
我检查了最新文档在nameref
CTAN 中,这句话仍然存在。实际上,我不希望此功能对我自己的功能起作用,\newcounter
因为它确实以点结尾。
所以我的问题是
为什么他们会这么做如果名字以点结尾,我们就删除它?
有没有好的办法可以在本地破解它以了解
\label
结尾的点?为什么要在本地破解?我假设第一个问题有一个很好的理由,所以我不建议完全删除它。实际上,我理解此功能是通过同一页面上的此定义实现的
\def\NR@strip@period#1.\ltx@empty#2\@nil{#1}
但是,我对它的用法感到很困惑,因为后面
\def
跟着三个连续的命令,而通常的命令看起来就像\def\newcommand<argument>\oldcommand
。所以,有人能向我解释一下这行代码是如何工作的吗?或者给我一些参考。这样我就能自己弄清楚黑客行为了。
答案1
为什么这样?这都是很久以前的事了,但有些风格把标题当作一个句子,而且
介绍。
啦啦啦……
在生成的引用中,您希望它说“在简介中我们描述..永远不会“在简介中我们描述....”所以您需要 . 来。
与\newcommand
原始\def
允许不同分隔参数以指定的标记结束。
如果你走的话
\def\zz#1.{the argument is #1}
然后\zz
将把到第一个为止的所有内容作为.
参数
\zz The Introduction.
会产生the argument is The Introduction
没有 . 的结果,所以这几乎就是我们想要的,除非章节标题没有 . 。这会产生一个低级错误,即参数永远不会结束,所以诀窍是使用如下形式
\def\zz#1.#2\relax{#1}
并始终提供.
和\relax
现在如果是那时的#1
论点\section
\zz#1.\relax
可以称为
\zz The Introduction..\relax
现在我们得到 #1 是简介,#2 是。被丢弃
如果原文中没有 . 则调用为
\zz The Introduction.\relax
这里,#1 再次成为介绍,而 #2 则为空且未被使用。
\NR@strip@period
是这个想法的一个稍微复杂的版本\zz
。