一个干净的界面,用于挂接分段命令

一个干净的界面,用于挂接分段命令

有没有一种简单的方法来挂接 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以满足您的需求更清洁。

相关内容