我的文章中各部分必须重新设计如下:
\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
顺便说一句,与其“手动”重新设计章节标题,你可能会发现使用标题安全包裹。