有没有一种简单的方法来挂接 LaTeX 的分段命令,而不用传统的\let
+ \def
(或者,用xparse
, \let
+ \RenewDocumentCommand{s O{} m}
)?我正在寻找具有everypage
,everyshi
等精神的东西。
该titlesec
包提供了一个钩子,但那里似乎没有可用的部分名称。我想为每个部分执行自定义操作,即针对 、 等的\chapter{...}
每个\section{...}
实例\subsection{...}
。
目前我有一个\let
+命令可以在每个部分后\RenewDocumment
插入一个不可见的注释。fixme
平均能量损失
\documentclass{article}
\pagestyle{empty}
\usepackage{xparse}
\usepackage[inline,draft,nomargin]{fixme}
\fxusetheme{color}
\makeatletter
\let\kmue@section=\section
\RenewDocumentCommand\section{ s O{} m}{%
\IfBooleanTF{#1}{%
\kmue@section*{#3}%
}{%
\kmue@section{#3}%
\fxnote[noinline]{{\color{black}#3}}%
}
}
\makeatother
\begin{document}
\listoffixmes
\section{A}
\fxwarning{First warning}
\section{B}
\fxerror{Second error}
\end{document}
(我知道代码已损坏,因为它不尊重第二个参数。)
问题
还有什么类似的东西吗
\everychapter[starred=false]{\fxnote{...}}
而不是自己编写的重新定义?该\fxnote
命令应该能够访问章节标题。
答案1
您可以依靠其中包含的 LaTeX 定义\section
来区分可选参数和/或是否使用了带星号的版本。从我的角度来看,您应该利用\@sect
(非星号)或\@ssect
(带星号):
\documentclass{article}
\pagestyle{empty}
\usepackage{etoolbox}
\usepackage[inline,draft,nomargin]{fixme}
\fxusetheme{color}
\makeatletter
% Somewhat like \everysection[starred=false]{\fxnote{...}}
% \@sect#1#2#3#4#5#6[#7]#8
\patchcmd{\@sect}% <cmd>
{\@xsect}% <search>
{\fxnote[noinline]{{\color{black}#7}}%
\@xsect}% <replace>
{}{}% <success><failure>
% Somewhat like \everysection[starred=true]{\fxnote{...}}
% \@ssect#1#2#3#4#5
\patchcmd{\@ssect}% <cmd>
{\@xsect}% <search>
{\fxnote[noinline]{{\color{black}#5}}%
\@xsect}% <replace>
{}{}% <success><failure>
\makeatother
\begin{document}
\listoffixmes
\section{A}
\fxwarning{First warning}
\section*{B}
\fxerror{Second error}
\end{document}
参数#7
是 的可选标题\section
,而#8
是强制标题。#5
的参数\section*
指向强制标题。
然而,在我看来,这并不比重新定义\section
以满足您的需求更清洁。