我已经重新定义了 .cls 文件中的节和子节,以至于 \section* 导致了不良行为。
例如,\section*{Introduction} These analyses were performed
在我的 .tex 文件中结果为:
我知道我应该使用类似\@ifstar
这里讨论的功能来解决这个问题:https://texfaq.org/FAQ-cmdstar。然而,经过几个小时和多次迭代,我还没有成功。你们有人知道我错过了什么吗?
我的 .cls 文件中的章节和小节被重新定义如下:
%%%%%%%%%%% SECTIONING %%%%%%%%%%%
\renewcommand\section{\@startsection%
{section}{1}{\z@}% %name, level, indent
{-\baselineskip}% %beforeskip
{.75\baselineskip}% %afterskip
{\reset@font\bf\MakeUppercase} %bold, uppercase
}
\renewcommand{\thesection}{\@Roman\c@section}
\renewcommand\subsection{\@startsection%
{subsection}{2}{\z@}% %name, level, indent
{-\baselineskip}% %beforeskip
{.75\baselineskip}% %afterskip
{\reset@font\bf}% %bold
}
\renewcommand{\thesubsection}{\thesection\@Alph\c@subsection}
\renewcommand\subsubsection{\@startsection
{subsubsection}{3}{\z@}% %name, level, indent
{-.75\baselineskip}% %beforeskip
{.5\baselineskip}% %afterskip
{\reset@font\emph}% %italic
}
\renewcommand{\thesubsubsection}{\thesubsection.\@roman\c@subsection}
我已将一个最小工作示例放在网上。它包含三个文件和一个 pdf。
最小值.tex:https://dl.dropboxusercontent.com/u/10060444/min_ex/min_ex.tex ntmanuscript.cls:https://dl.dropboxusercontent.com/u/10060444/min_ex/ntmanuscript.cls min_ex.pdf:https://dl.dropboxusercontent.com/u/10060444/min_ex/min_ex.pdf
答案1
您不需要\@ifstar
在定义中添加任何内容,因为\@startsection
已经处理好了。但是,您使用的某些包重新定义了\@ifstar
。出于某种原因,此重新定义使用\new@ifnextchar
而不是标准\@ifnextchar
。旧定义会忽略空格,但这个新定义不会。您在 的末尾\@startsection
和星号之间引入了一个空格:
\renewcommand\section{\@startsection%
{section}{1}{\z@}% %name, level, indent
{-\baselineskip}% %beforeskip
{.75\baselineskip}% %afterskip
{\reset@font\bf\MakeUppercase} %bold, uppercase
}
{\reset@font\bf\MakeUppercase} %bold, uppercase
在百分号之前的 那行中看到它。将其更改为{\reset@font\bf\MakeUppercase}% bold, uppercase
。
由于您正在加载 titlesec 包,我不明白为什么您选择使用低级 LaTeX 界面\@atartsection
。您不应该使用titlesec
的功能来更改章节标题的外观吗?
答案2
请注意,所有默认的部门单位都将其字体定义为开关(从article.cls
:
\newcommand\section{\@startsection {section}{1}{\z@}%
{-3.5ex \@plus -1ex \@minus -.2ex}%
{2.3ex \@plus.2ex}%
{\normalfont\Large\bfseries}}
\newcommand\subsection{\@startsection{subsection}{2}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\large\bfseries}}
\newcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
{-3.25ex\@plus -1ex \@minus -.2ex}%
{1.5ex \@plus .2ex}%
{\normalfont\normalsize\bfseries}}
\newcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
{3.25ex \@plus1ex \@minus.2ex}%
{-1em}%
{\normalfont\normalsize\bfseries}}
\newcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
{3.25ex \@plus1ex \@minus .2ex}%
{-1em}%
{\normalfont\normalsize\bfseries}}
在你的课堂上你使用宏(\MakeUppercase
并不是\emph
开关。这些宏会抓取它们可以抓取的第一个参数,并且可能会在扩展期间抓取错误的信息\@startsection
。此外,为了避免出现\@ifstar
问题,请不要在分段定义中留下空格。以下是您应该做的添加到你的班级:
\RequirePackage{regexpatch}% http://ctan.org/pkg/regexpatch
\newcommand{\@sec@title@format}[1]{#1}
\makeatletter
\xpatchcmd*{\@sect}{#8}{\@sec@title@format{#8}}{}{}
\xpatchcmd*{\@ssect}{#5}{\@sec@title@format{#5}}{}{}
\makeatletter
您对部分单位的定义应类似于:
%%%%%%%%%%% SECTIONING %%%%%%%%%%%
\renewcommand{\section}{\renewcommand{\@sec@title@format}[1]{\MakeUppercase{##1}}%
\@startsection%
{section}{1}{\z@}% %name, level, indent
{-\baselineskip}% %beforeskip
{.75\baselineskip}% %afterskip
{\reset@font\bfseries}% %bold, uppercase
}
\renewcommand{\thesection}{\@Roman\c@section}
\renewcommand{\subsection}{\renewcommand{\@sec@title@format}[1]{##1}%
\@startsection%
{subsection}{2}{\z@}% %name, level, indent
{-\baselineskip}% %beforeskip
{.75\baselineskip}% %afterskip
{\reset@font\bfseries}% %bold
}
\renewcommand{\thesubsection}{\thesection\@Alph\c@subsection}
\renewcommand{\subsubsection}{\renewcommand{\@sec@title@format}[1]{\emph{##1}}%
\@startsection
{subsubsection}{3}{\z@}% %name, level, indent
{-.75\baselineskip}% %beforeskip
{.5\baselineskip}% %afterskip
{\reset@font}% %italic
}
\renewcommand{\thesubsubsection}{\thesubsection.\@roman\c@subsection}