我正在写周一、周三和周五上课的一些讲义。我想按照周和日定义的部分来组织它们,例如 1M、1W、1F、2M、2W、2F、3M 等。此外,当我在该部分中引用带标签的定理时,我希望它显示为“定理 2F.1”或“命题 3M.7”之类的内容。
(我想象的是
\section[1M]{January 6th, 2014: Applications of Nakayama's Lemma}
\begin{theorem}\label{Nakayama} ... \end{theorem}
(...然后,稍后...)
...Thus, it follows by \ref{Nakayama} that...
这将输出“...因此,根据定理 1M.1 可知...”)
有没有办法创建一个可以像这样引用的自定义编号方案?我能得到最接近的方案是什么?
答案1
\documentclass{article}
\newtheorem{lemma}{Lemma}[section]
\renewcommand\thesection{\the\numexpr(1+\value{section})/3\relax
\ifcase\the\numexpr 2+ \value{section}-(3*((1+\the\value{section})/3))\relax
M\or W\or F%
\fi}
\begin{document}
\section{zzz}\label{z} xxx
\section{aaa} see \ref{z} and \ref{d} and \ref{l} and \ref{ll}
\section{bbb} vvv
\begin{lemma}\label{l}llllll\end{lemma}
\begin{lemma}\label{ll}llllll\end{lemma}
\section{cc} vvv
\section{ddd}\label{d} vvv
\section{eee} vvv
\section{ff} vvv
\section{ggg} vvv
\end{document}
答案2
每个计数器在\refstep
被 ped 时,都会将其内容存储在\@currentlabel
用作参考的 中。但是,它们还带有一些“父引用”。您可以将定理(称为\p@theorem
)的这个父引用更新为 的可选参数\section
:
\documentclass{article}
\usepackage{amsthm,etoolbox}% http://ctan.org/pkg/{amsthm,etoolbox}
\newtheorem{theorem}{Theorem}
\makeatletter
%\newcommand{\p@section}{}
\patchcmd{\@sect}% <cmd>
{\@xsect}% <search>
{\xdef\p@theorem{#7.}\@xsect}% <replace>
{}{}% <success><replace>
\makeatother
\begin{document}
\section[1M]{January 6th, 2014: Applications of Nakayama's Lemma}
blah
\begin{theorem}\label{Nakayama}
blah blah
\end{theorem}
Some more blah. Thus, it follows by Theorem~\ref{Nakayama} that
\end{document}
如果您不提供可选参数,则可能需要做更多的工作来删除任何内容\section
。
如果你希望将其用于其他类似定理的环境(如proposition
s、lemma
s 等),那么你可以将它们作为替换文本的一部分添加<replace>
到etoolbox
修补。