LyX 上 bfseries 和 makeuppercase 的更新部分

LyX 上 bfseries 和 makeuppercase 的更新部分

我想定义一个新的部分样式如下

\renewcommand\section{%
  \@startsection{section}{1}
                {\z@}%
                {-3.5ex \@plus -1ex \@minus -.2ex}%
                {2.3ex \@plus.2ex}%
                {\normalfont\normalsize\bfseries}%
}

但每当我尝试 \MakeUppercase

                {\normalfont\normalsize\bfseries\MakeUppercase}%

我收到错误“文件不存在”。如果我放置 \uppercase

                {\normalfont\normalsize\bfseries\uppercase}%

目录中的章节标题不是大写的。对此有什么想法吗?

最小工作示例(MWE):

\documentclass{article}
\usepackage[T1]{fontenc}

\makeatletter

%Setting section style
\renewcommand\section{%
  \@startsection{section}{1}
                {\z@}%
                {-3.5ex \@plus -1ex \@minus -.2ex}%
                {2.3ex \@plus.2ex}%
                {\normalfont\normalsize\bfseries}% normal size, boldface
}

%Setting subsection
\renewcommand\subsection{%
  \@startsection{subsection}{2}
                {\z@}%
                {-3.25ex\@plus -1ex \@minus -.2ex}%
                {2.3ex \@plus.2ex}%
                {\normalfont\normalsize\uppercase}% normal size, uppercase
}

%Redefining sub-subsection
\renewcommand\subsubsection{%
  \@startsection{subsubsection}{3}
                {\z@}%
                {-3.25ex\@plus -1ex \@minus -.2ex}%
                {2.3ex \@plus.2ex}%
                {\normalfont\normalsize\MakeUppercase}% normal size, uppercase
}

\makeatother


\begin{document}

\tableofcontents
\section{This should be capitalized here and at ToC}
\subsection{Anything}
\subsubsection{Anything else}

\end{document}

答案1

您必须重新定义\l@section,它是负责排版目录中章节条目的宏。

\documentclass{article}

\makeatletter
%Setting section style
\renewcommand\section{%
  \@startsection{section}{1}
                {\z@}%
                {-3.5ex \@plus -1ex \@minus -.2ex}%
                {2.3ex \@plus.2ex}%
                {\normalfont\normalsize\bfseries\MakeUppercase}%
}

%Setting subsection
\renewcommand\subsection{%
  \@startsection{subsection}{2}
                {\z@}%
                {-3.25ex\@plus -1ex \@minus -.2ex}%
                {2.3ex \@plus.2ex}%
%                {1sp}% No space after subsubsections
                {\normalfont\normalsize\MakeUppercase}% normal size, boldface
}

%Redefining sub-subsection
\renewcommand\subsubsection{%
  \@startsection{subsubsection}{3}
                {\z@}%
                {-3.25ex\@plus -1ex \@minus -.2ex}%
                {2.3ex \@plus.2ex}%
                {\normalfont\normalsize\bfseries}% normal size, medium
}
\renewcommand*\l@section[2]{%
  \ifnum \c@tocdepth >\z@
    \addpenalty\@secpenalty
    \addvspace{1.0em \@plus\p@}%
    \setlength\@tempdima{1.5em}%
    \begingroup
      \parindent \z@ \rightskip \@pnumwidth
      \parfillskip -\@pnumwidth
      \leavevmode \bfseries
      \advance\leftskip\@tempdima
      \hskip -\leftskip
      \MakeUppercase{#1}\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
    \endgroup
  \fi}
\makeatother
\begin{document}

\tableofcontents

\section{This should be capitalized here and at ToC}

Anything

\end{document}

我已删除代码中所有不必要的部分,仅减少到部分标题和的重新定义\l@section。再添加您需要的部分。

答案2

这不起作用的原因(最初在这个 comp.text.tex 线程),并且\MakeUppercase\uppercase接受参数,并且不是声明(如\bfseries)。

该主题的一位回复者定义了以下宏来解决这个问题:

\def\MIA@up{%
  \def\@M##1\par{10000 \MakeUppercase{##1}\par}}

\makeatother可以在标题中的和之间的乳胶文件中设置宏\makeatletter。此宏应该可以按照您尝试使用的方式与您的代码一起使用\MakeUppercase,如下所示:

\renewcommand\section{%
  \@startsection{section}{1}{\normalfont\normalsize\bfseries\MIA@up}%
}

请注意,我最终用来解决相同问题的该宏的版本(类似于上面的宏,但增加了一些大小调整和\centering,但使用\def而不是来定义\renewcommand)都是在一个.dtx文件中定义的,我将其编译为一个.cls文件并使用来加载\usepackage{}。可能需要在乳胶文件的标题中进行微小的调整才能完成所有操作。

相关内容