将章节重命名为论文

将章节重命名为论文

\appendix宏将“章节”重命名为“附录”,并将编号从阿拉伯数字更改为字母。我正在尝试创建一个类似的宏,\paper将“章节”重命名为“论文”,并将编号更改为罗马数字。

至少在这方面我成功了,但如果我尝试单击指向其中一个论文章节的超链接,我会被引导至常规章节。此外,如果我与软件包\Cref中的进行交叉引用cleveref,它会正确显示数字,但仍然打印“章节”。我该如何修复此问题?

\documentclass{memoir}

\makeatletter
\newcommand{\paper}
{
    \setcounter{chapter}{0}
    \setcounter{section}{0}
    \def \@chapapp{Paper}
    \def \thechapter{\@Roman\c@chapter}
}
\makeatother

\usepackage{hyperref}
\usepackage{cleveref}

\begin{document}

    \tableofcontents  % Hyperlink to 'First Paper' not working

    \chapter{First Chapter}
    \label{sec:chapter}

    \Cref{sec:chapter} % Correctly prints 'Chapter'
    \Cref{sec:paper}   % Incorrectly prints 'Chapter'

    \paper

    \chapter{First Paper}
    \label{sec:paper}

\end{document}

答案1

重新定义\@chapappPaper不强制cleveref使用Paper交叉引用名称——它将使用与标签一起存储的计数器信息,这就是chapter并抓取\crefname为章节存储的等。

这是一种使用新计数器的方法,该计数器在命令末尾paper增加 ——现在被告知使用而不是。\refstepcounter\chapter\memendofchapterhookcleverefpaperchapter

存储的超锚信息\theHchapter也必须修改。

另一种可能性:定义paper计数器并\label[paper]{sec:paper}在本地说。

无论哪种方式:\crefname{paper}{paper}{papers}等等都是需要提供正确的交叉引用名称。

\documentclass{memoir}
\makeatletter
\newcounter{paper}


\newcommand{\paper}
{%
  \setcounter{chapter}{0}%
  \setcounter{section}{0}%
  \renewcommand{\theHchapter}{papter.\arabic{chapter}}%
  \def\@chapapp{Paper}
  \let\c@paper\c@chapter
  \def\thechapter{\@Roman\c@chapter}
  \let\thepaper\thechapter
  \renewcommand{\memendofchapterhook}{%
    \addtocounter{paper}{-1}%
    \refstepcounter{paper}%
  }% 
}
\makeatother

\usepackage{hyperref}
\usepackage{cleveref}

\crefname{paper}{paper}{papers}
\Crefname{paper}{Paper}{Papers}    


\begin{document}

    \tableofcontents  % Hyperlink to 'First Paper' not working

    \chapter{First Chapter}
    \label{sec:chapter}

    \Cref{sec:chapter} % Correctly prints 'Chapter'
    \Cref{sec:paper}   % Incorrectly prints 'Chapter'

    \paper

    \chapter{First Paper}
    \label{sec:paper}

\end{document}

在此处输入图片描述

答案2

您必须重新定义\theHchapter以使hyperref目标具有唯一编号。但要使其\paper行为类似于在论文中\appendix包含的命名也被称为“论文”(就像附录中的也被称为)。在这里我复制了\section\sectionappendix附录代码并将cleverefpaper改为appendix

\documentclass{memoir}

\usepackage{hyperref}
\usepackage{cleveref}

\makeatletter
\newcommand{\paper}
{
    \setcounter{chapter}{0}
    \setcounter{section}{0}
    \def \@chapapp{Paper}
    \def \thechapter{\@Roman\c@chapter}
    \def \theHchapter{paper-\@Roman\c@chapter}
    \def\H@refstepcounter##1{%
      \cref@old@H@refstepcounter{##1}%
      \cref@constructprefix{##1}{\cref@result}%
      \ifx\cref@result\@empty%
        \def\cref@result{2147483647}%
      \else%
        \edef\cref@result{2147483647,\cref@result}%
      \fi%
      \def\@tempa{##1}%
      \def\@tempb{chapter}%
      \ifx\@tempa\@tempb%
        \protected@edef\cref@currentlabel{%
          [paper][\arabic{##1}][\cref@result]%
          \csname p@##1\endcsname\csname the##1\endcsname}%
      \else%
        \def\@tempa{##1}%
        \def\@tempb{section}%
        \ifx\@tempa\@tempb%
          \protected@edef\cref@currentlabel{%
            [subpaper][\arabic{##1}][\cref@result]%
            \csname p@##1\endcsname\csname the##1\endcsname}%
        \else%
          \def\@tempa{##1}%
          \def\@tempb{subsection}%
          \ifx\@tempa\@tempb%
            \protected@edef\cref@currentlabel{%
              [subsubpaper][\arabic{##1}][\cref@result]%
              \csname p@##1\endcsname\csname the##1\endcsname}%
          \else%
            \def\@tempa{##1}%
            \def\@tempb{subsubsection}%
            \ifx\@tempa\@tempb%
              \protected@edef\cref@currentlabel{%
                [subsubsubpaper][\arabic{##1}][\cref@result]%
                \csname p@##1\endcsname\csname the##1\endcsname}%
            \else%
              \@ifundefined{cref@##1@alias}%
                {\def\@tempa{##1}}%
                {\def\@tempa{\csname cref@##1@alias\endcsname}}%
              \protected@edef\cref@currentlabel{%
                [\@tempa][\arabic{##1}][\cref@result]%
                \csname p@##1\endcsname\csname the##1\endcsname}%
            \fi%
          \fi%
        \fi%
      \fi%  
    }%
}%
\AtBeginDocument{\Crefname@preamble{paper}{Paper}{Papers}}
  \Crefname{paper}{Paper}{Papers}%
  \Crefname{subpaper}{Paper}{Papers}%
  \Crefname{subsubpaper}{Paper}{Papers}%
  \Crefname{subsubsubpaper}{Paper}{Papers}%

\makeatother

\begin{document}

    \tableofcontents  % Hyperlink to 'First Paper' not working

    \chapter{First Chapter}
    \label{sec:chapter}

    \Cref{sec:chapter} % Correctly prints 'Chapter'
    \Cref{sec:paper}   % Incorrectly prints 'Chapter'

    \Cref{sec:papersec}

    \paper
    \chapter{First Paper}
    \label{sec:paper}

    \section{First Paper section}
    \label{sec:papersec}

\end{document}

在此处输入图片描述

如果您不想命名等,您可以更改名称subpaper等。但是,例如。subsubpaper\section\subsectionpaperpapersection

相关内容