我正在写一篇论文(使用 Latex 上的书籍格式),我的一些章节恰好有附录。我希望每个附录都按 A、B 等编号,因此我对每个附录使用了以下代码:
\appendix
\section*{Appendix}
\setcounter{theorem}{0}
\renewcommand{\thetheorem}{A.\arabic{theorem}}
\setcounter{equation}{0}
\renewcommand{\theequation}{A.\arabic{equation}}
\setcounter{figure}{0}
\setcounter{table}{0}
\renewcommand{\thetable}{A.\arabic{table}}
\renewcommand{\thesubsection}{A.\arabic{subsection}}
问题是现在所有章节都用 A 编号,而不是使用渐进的阿拉伯数字……我如何将计数器(以及图表和表格编号的重置)限制在附录部分?
答案1
我没有创建theorem
环境(也没有加载任何包来创建环境),所以我注释了将计数器添加theorem
到要重新定义的计数器列表中的行。如果您需要更多计数器,请将它们添加到\Appendix@CounterList
,只需确保注释所有行尾以防止在任何名称中添加虚假空格即可。检测到一个空列表项,因此添加一个完全空的元素不会造成任何损害(因此逗号分隔列表中最后一个条目后的逗号是可以的),而包含空格的元素不会被检测到。
添加\appendix
到环境中不起作用,因为它会全局重新定义,唯一的选择是将所有全局重新定义的宏保存在临时宏中并重置它们。询问您是否需要这个,我可以添加那个(以静态方式或通过重新定义\gdef
--- 这可能是一个坏主意)。但是以下内容可能是一个好的开始:
编辑:我添加了附录部分的编号。我还添加了可以撤消任何更改的代码\appendix
(我希望如此)。创建Appendix
(环境)时的相关行已注释,因为我认为添加这些行没有多大意义,\appendix
因为对于部分方法来说,它们所做的更改似乎都不是必要的。
\documentclass[]{report}
\usepackage[]{graphicx}
\usepackage{duckuments}
\newcounter{appendixcounter}
\makeatletter
\newcommand*\Appendix@Counter[1]
{%
\Appendix@SaveCounter{#1}%
\setcounter{#1}{0}%
\expandafter\Appendix@SaveTheCounter\expandafter{#1}%
}
\newcommand*\Appendix@SaveTheCounter[1]
{%
\expandafter\def\csname the#1\endcsname{\Alph{appendixcounter}.\arabic{#1}}%
}
\newcommand*\Appendix@SaveCounter[1]
{%
\expandafter\edef\csname Appendix@SaveCounter@#1\endcsname{\arabic{#1}}%
}
\newcommand*\Appendix@ResetCounter[1]
{%
\setcounter{#1}{\csname Appendix@SaveCounter@#1\endcsname}%
}
\newcommand*\Appendix@CounterList
{%
%theorem,%
equation,%
figure,%
table,%
}
\newcommand*\Appendix@CounterOnlyResetList
{%
chapter,%
section,%
}
\newcommand*\Appendix@GlobalUndoList
{%
thechapter,%
@chapapp,%
}
\newcommand*\Appendix@GlobalSave[1]
{%
\expandafter\Appendix@GlobalSave@i\expandafter{\csname #1\endcsname}{#1}%
}
\newcommand*\Appendix@GlobalSave@i[2]
{%
\expandafter\let\csname Appendix@GlobalSave@#2\endcsname=#1%
}
\newcommand*\Appendix@GlobalRestore[1]
{%
\expandafter\Appendix@GlobalRestore@i\expandafter
{\csname Appendix@GlobalSave@#1\endcsname}{#1}%
}
\newcommand*\Appendix@GlobalRestore@i[2]
{%
\expandafter\global\expandafter\let\csname #2\endcsname=#1%
}
\newcommand*\Appendix@DoForListMacro[2]
{%
\expandafter\@for\expandafter\zz\expandafter:\expandafter=\expandafter
{#1}\do
{%
\if\relax\detokenize\expandafter{\zz}\relax
\else
#2%
\fi
}%
}
\newcommand*\Appendix@DoForCounterList
{%
\Appendix@DoForListMacro{\Appendix@CounterList}%
}
\newcommand*\Appendix@DoForGlobalUndoList
{%
\Appendix@DoForListMacro{\Appendix@GlobalUndoList}%
}
\newcommand*\Appendix@DoForCounterOnlyResetList
{%
\Appendix@DoForListMacro{\Appendix@CounterOnlyResetList}%
}
\newenvironment{Appendix}
{%
\Appendix@DoForCounterList{\Appendix@Counter{\zz}}%
\Appendix@DoForCounterOnlyResetList{\Appendix@SaveCounter{\zz}}%
%\Appendix@DoForGlobalUndoList{\Appendix@GlobalSave{\zz}}%
%\appendix
\refstepcounter{appendixcounter}%
\section*{Appendix \Alph{appendixcounter}}%
}
{%
\Appendix@DoForCounterList{\Appendix@ResetCounter{\zz}}%
\Appendix@DoForCounterOnlyResetList{\Appendix@ResetCounter{\zz}}%
%\Appendix@DoForGlobalUndoList{\Appendix@GlobalRestore{\zz}}%
}
\makeatother
\begin{document}
\chapter{Foo}
\blindduck[1,maths]
\begin{equation}
E=mc^2
\end{equation}
\begin{Appendix}
\blindduck[1,maths]
\begin{figure}% >>>
\centering
\includegraphics{example-image-duck}%
\caption{A friendly duck\label{fig:duck}}%
\end{figure}% <<<
\begin{table}
\centering
\begin{tabular}{ccc}
Ducks&are&friendly
\end{tabular}
\caption{The truth\label{tab:truth}}
\end{table}
\end{Appendix}
\begin{equation}
E=mc^2
\end{equation}
\chapter{Bar}
\blindduck[1,maths]
\begin{Appendix}
\blindduck[1,maths]
\end{Appendix}
\end{document}