将 titletoc 与 ACM acmart 样式结合使用

将 titletoc 与 ACM acmart 样式结合使用

最近的艾克玛特风格(尝试这里如果该链接已损坏)似乎无法正常工作titletoc,在目录开头产生了一串不需要的章节名称:

在此处输入图片描述

我正在寻找类似于答案中所示的输出这个问题,我可以通过替换acmart来获得article

在此处输入图片描述

我曾经研究过其他目录解决方案,但我特别喜欢 的输出titletoc,因此如果可能的话,我希望它能够发挥作用。

代码如下:

\documentclass{acmart}

\usepackage{appendix}
\usepackage{titletoc}

\newcommand\DoToC{%
  \startcontents
  \printcontents{}{2}{\textbf{Contents}\vskip3pt\hrule\vskip5pt}
  \vskip3pt\hrule\vskip5pt
}

\begin{document}

\DoToC

\section{My First Section}
\section{My Second Section}

\begin{appendices}
\section{My First Appendix}
\DoToC
\subsection{My First Subsection}
\subsection{My Second Subsection}

\section{My Second Appendix}
\DoToC
\subsection{My First Subsection}
\subsection{My Second Subsection}
\end{appendices}

\end{document}

答案1

问题是,acmart加载hyperref。通常hyperref 会重新定义一些titletoc内部函数以使其正常工作。但是,由于您现在titletoc在 之后加载hyperref,因此它没有机会这样做。

这意味着您需要自己重新定义它们。

这有效:

\documentclass{acmart}
\usepackage{appendix}
\usepackage{titletoc}
\makeatletter
  \def\ttl@Hy@steplink#1{%
    \Hy@MakeCurrentHrefAuto{#1*}%
    \edef\ttl@Hy@saveanchor{%
      \noexpand\Hy@raisedlink{%
        \noexpand\hyper@anchorstart{\@currentHref}%
        \noexpand\hyper@anchorend
        \def\noexpand\ttl@Hy@SavedCurrentHref{\@currentHref}%
        \noexpand\ttl@Hy@PatchSaveWrite
      }%
    }%
  }%
  \def\ttl@Hy@PatchSaveWrite{%
    \begingroup
      \toks@\expandafter{\ttl@savewrite}%
      \edef\x{\endgroup
        \def\noexpand\ttl@savewrite{%
          \let\noexpand\@currentHref
              \noexpand\ttl@Hy@SavedCurrentHref
          \the\toks@
        }%
      }%
    \x
  }%
  \def\ttl@Hy@refstepcounter#1{%
    \let\ttl@b\Hy@raisedlink
    \def\Hy@raisedlink##1{%
      \def\ttl@Hy@saveanchor{\Hy@raisedlink{##1}}%
    }%
    \refstepcounter{#1}%
    \let\Hy@raisedlink\ttl@b
  }%
\def\ttl@gobblecontents#1#2#3#4{\ignorespaces}%
\makeatother

\newcommand\DoToC{%
  \startcontents
  \printcontents{}{2}{\textbf{Contents}\vskip3pt\hrule\vskip5pt}
  \vskip3pt\hrule\vskip5pt
}

\begin{document}

\DoToC

\section{My First Section}
\section{My Second Section}

\begin{appendices}
\section{My First Appendix}
\DoToC
\subsection{My First Subsection}
\subsection{My Second Subsection}

\section{My Second Appendix}
\DoToC
\subsection{My First Subsection}
\subsection{My Second Subsection}
\end{appendices}

\end{document}

相关内容