如何将命令的范围限制在给定部分内?
我改编了一个在线找到的宏,它读取命令中的参数并列出它们
\newcommand{\printDefn}{}
\newcommand\defn[2]{\begin{definition}{\textbf{#1} {#2}}\end{definition}
\g@addto@macro{\printDefn}{\item \textbf{#1} \space : \space #2}
}
我的目标是按节完成此操作。问题是每次\printDefn
调用时它(可以理解)都会打印文档中的所有定义,而不仅仅是新的定义。
有没有办法限制命令的范围,使其仅查看当前部分?或者if ... else
我可以使用某种构造来仅在 时打印currrentSection == firstNumbering
?
编辑
\section{}
\defn{test}{from 1}
\begin{enumerate}
\printDefn
\end{enumerate}
\section{}
\defn{test}{from 2}
\renewcommand{\printDefn}{}
\begin{enumerate}
\printDefn
\end{enumerate}
答案1
您可以将重置列表的代码添加到\section
。
\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{xpatch}
\theoremstyle{definition}
\newtheorem{definition}{Definition}
\xpretocmd{\section}{\global\saveddefinitions{}}{}{}
\newtoks\saveddefinitions
\newcommand\defn[2]{%
\begin{definition}\textbf{#1} #2\end{definition}%
\global\saveddefinitions\expandafter{%
\the\saveddefinitions
\item \textbf{#1}: #2%
}%
}
\newcommand{\printDefn}{\begin{enumerate}\the\saveddefinitions\end{enumerate}}
\begin{document}
\section{A}
\defn{test}{from 1}
\printDefn
\section{B}
\defn{test}{from 2}
\printDefn
\end{document}