通过 \renewcommand 禁用部分引用

通过 \renewcommand 禁用部分引用

我的文章中各部分必须重新设计如下:

\renewcommand{\section}[1]{\medskip \addtocounter{section}{1}\flushleft 
\textbf{\Roman{section}. \ #1}\medskip \setcounter{subsection}{0}
\setlength{\parindent}{5ex}}

但是,我无法使用\label\ref命令引用我的部分。如果注释掉上述代码,引用将正常工作。可能是什么问题?

编辑:引用也需要用罗马字母。

答案1

而不是使用

\addtocounter{section}{1}

使用

\refstepcounter{section}

这会使部分计数器增加 1,并告诉 latex 创建的下一个引用\label{...}应该引用该计数器。

此外,如果您希望第二个数字始终存在,\Roman那么您应该使用:

\renewcommand\thesection{\Roman{section}}

因此现在您的部分命令变成:

\renewcommand\thesection{\Roman{section}}
\renewcommand{\section}[1]{\medskip\refstepcounter{section}{1}%
       \flushleft\thesection. \ #1}\medskip%
       \setcounter{subsection}{0}\setlength{\parindent}{5ex}}

相反,如果你想\ref{...}制作,\thesection. \ #1那么这会更复杂,因为你必须设置@currentlabel并且@是受保护的角色。为此,你需要:

\renewcommand\thesection{\Roman{section}}
\makeatletter
\renewcommand{\section}[1]{\medskip\refstepcounter{section}{1}%
       \flushleft\thesection. \space #1}\medskip%
       \def\@currentlabel{\thesection. \space #1}
       \setcounter{subsection}{0}\setlength{\parindent}{5ex}}
\makeatletter

顺便说一句,与其“手动”重新设计章节标题,你可能会发现使用标题安全包裹。

相关内容