如何将章节附录标记为 A、B、C...并保留章节编号?

如何将章节附录标记为 A、B、C...并保留章节编号?

我正在写一篇论文(使用 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}

相关内容