我正在使用 定义一个宏\addcontentsline
。但是,我不知道该命令是否强大。如果它很脆弱,则\protect
是强制性的。我不知道一个强大的命令会导致重复的 是否\protect
会\protect
产生任何问题,所以我假设它可能会采取一些措施以防万一。Google 无法理解我的搜索,所以有人能帮我解决这个问题吗?
如果有人感兴趣,我定义了一个命令,它基本上概括了等\chapter
。\section
通过将标题级别放入参数中,就像\addcontentsline
这样做一样,但是像分段命令一样打印到目录和文本。它还允许部分级别。我已经知道如何基本做到这一点,但需要知道一些细节才能真正编程。(我还没有弄清楚如何获取级别的标题大小,但我应该已经找到相关信息了。)
答案1
\protect
对于脆弱的命令来说,这不是强制性的,甚至不是推荐的,只有在命令用于“移动参数”时才需要。“移动参数”最有用的定义在这种情况下有点重复,即“需要的参数”,\protect
但基本上移动参数是扩展或写入辅助文件等的参数。因此,部分标题的参数是移动参数,因为它被写入目录,但\addcontentsline
它本身不太可能在这样的上下文中使用,因此它是否健壮的问题并不重要(因为它\protect
只是\relax
在移动参数以外的上下文中不执行任何操作。)
\protect
从技术上讲它很脆弱,但如果你在不是的地方使用它\relax
,那么代码中的扩展顺序可能有问题,因此前缀 by\protect
可能永远不会有用。
答案2
问完这个问题后,我进一步浏览了一下,发现这个问题,接受的答案似乎暗示\protect
执行一个健壮的命令不会做任何坏事。事实上,这个答案甚至建议\protect
在出现错误的情况下执行所有宏,如果健壮的命令不安全,这肯定不会是万无一失的\protect
。所以有了这些信息,我的问题就变得过时了,因为我知道我是安全的\protect
。