在我的问题中这里如何正确地添加到宏而不将原始宏存储在 tmp 变量中,我被告知我的代码实际上可以工作。但是,它以某种方式与 titlesec 包冲突。
我怎样才能更改我的代码以便正确地与 titlesec 包一起工作,同时仍然不为原始宏定义 tmp 变量?
\documentclass{article}
\usepackage{titlesec}
\def\abc{abc}
\begingroup\let\orgabc\abc\def\abc{\orgabc\endgroup def}
\begin{document}
\section{One}
\abc
\section{Two}
Two
\end{document}
注释掉后工作正常\usepackage{titlesec}
!
答案1
\def\abc{abc}
\begingroup\let\orgabc\abc\def\abc{\orgabc\endgroup def}
\begin{document}
\section{One}
\abc
这将放置在以 开始并以 结束的\begin{document}
组内。\begingroup
\abc
除此以外的任何环境document
都会产生错误。由于技术原因,它不会在此处生成错误消息,但它会完全破坏所有 latex 处理,因为通常发生的所有设置\begin{document}
在\abc
根据你的意图
\def\abc{abc}
\let\orgabc\abc
\def\abc{\orgabc def}
\begin{document}
\section{One}
\abc
或者
\def\abc{abc}
\expandafter\def\expandafter\abc\expandafter{\abc def}
\begin{document}
\section{One}
\abc
或者
\makeatletter
\def\abc{abc}
\g@addto@macro\abc{def}
\makeatother
\begin{document}
\section{One}
\abc
答案2
实际上你的代码相当于
\documentclass{article}
\usepackage{titlesec}
\begingroup
\begin{document}
\section{One}
\endgroup
\section{Two}
Two
\end{document}
但是在代码中titlesec
使用\AtBeginDocument{...\let\ttl@Hy@refstepcounter\refstepcounter...}
之后,\endgroup
即之后不再定义。\abc
\ttl@Hy@refstepcounter