我对将章节标题等设置为小写字母感兴趣。但我不知道如何自动实现这一点。
\documentclass{scrartcl}
\setkomafont{sectioning}{\scshape}
\usepackage{hyperref}
\begin{document}
\section{Hello}
\section{hello}
\subsection{helloHello}
\end{document}
但如果我把所有内容都写成小写,那么\tableofcontents
除非我也使用小写字母,否则看起来就不太好。我知道,\MakeLowercase{}
但这需要争论。
顺便说一句,正如我所说,我只想在文档中以小写字母显示它们,而不是在目录中显示它们,......
有任何想法吗?
PS:我不知道这是否有必要,但我正在使用该MinionPro
包。
编辑:经过一些研究,除了这里回答的问题之外,经典论文.sty您可以看看其他不同的(或半不同的)方法。
答案1
在他的主页,KOMA 字体的作者 Markus Kohm 在章节标题中设计了大写字母的代码。
我稍微修改了代码归类于 \section 和 \subsection?)
\documentclass[11pt]{scrartcl}
\usepackage[UKenglish]{babel}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{MinionPro}
\renewcommand{\scdefault}{ssc} % MinionPro's spaced small caps as standard
\makeatletter
\newcommand*{\Section}{}
\let\Section\section
\renewcommand*{\section}{%
\@ifstar {\star@section}{\@dblarg\nonstar@section}%
}
\newcommand*{\star@section}[1]{%
\Section*{\MakeLowercase{#1}}%
}
\newcommand*{\nonstar@section}[2][]{%
\Section[{#1}]{\MakeLowercase{#2}}%
}
\let\Subsection\subsection
\renewcommand*{\subsection}{%
\@ifstar {\star@subsection}{\@dblarg\nonstar@subsection}%
}
\newcommand*{\star@subsection}[1]{%
\Subsection*{\MakeLowercase{#1}}%
}
\newcommand*{\nonstar@subsection}[2][]{%
\Subsection[{#1}]{\MakeLowercase{#2}}%
}
\setkomafont{disposition}{\normalcolor\scshape}
\usepackage{hyperref}
\begin{document}
\tableofcontents
\section{Heading level 1}
\subsection{Heading level 2}
\end{document}
此解决方案适用于带星号的部分。并且使用常规方法可以轻松添加更多格式:
\setkomafont{level}{command}
\addtokomafont{level}{command}
我还建议您使用以下软件包文本大小写使案件变更更加万无一失:
\usepackage[overload]{textcase}
答案2
这是一个使用titlesec
包裹:
\documentclass{scrartcl}
\usepackage[spanish, es-noindentfirst, es-nosectiondot]{babel}
\usepackage[explicit]{titlesec}
\usepackage{textcase}
\usepackage{microtype}
\usepackage[colorlinks]{hyperref}
\titleformat{\section}
{\normalfont\Large\scshape}{\large\thesection}{0.7em}{\textls{\MakeTextLowercase{#1}}}
\titleformat{\subsection}
{\normalfont\large\scshape}{\small\thesubsection}{0.7em} {\textls{\MakeTextLowercase{#1}}}
\begin{document}
\tableofcontents
\section{Una Secci\'on de Prueba}
\subsection{Una Subsecci\'on de Prueba}
\end{document}
\MakeTextLowercase
来自的命令textcase
使用包是因为与标准不同\MakeUppercase
,它不会改变任何数学的大小写,或者的参数\cite
以及\label
参数\ref
内的命令。
然而,使用这种方法时应谨慎(见KOMA-Script 与 titlesec 之间的不兼容性)。
答案3
下面的补丁似乎可以满足您的要求。它将适用于全部但是,分部单位。
这hyperref
必须加载后补丁已经应用。
\documentclass{scrartcl}
\usepackage[rm=oldstyle]{cfr-lm} % for oldstyle figures
\usepackage{microtype}
\usepackage{xpatch}
\makeatletter
% patch the relevant commands to enclose the section title as argument to a command
\xpatchcmd{\@sect}{#8\@@par}{\lowsmallcaps{#8}\@@par}{}{}
\xpatchcmd{\@ssect}{#5\@@par}{\lowsmallcaps{#5}\@@par}{}{}
\makeatother
% \usepackage{hyperref} % Must go after the patches
\setkomafont{disposition}{\normalfont\scshape} % use small caps for section titles
\setkomafont{sectionentry}{\normalfont} % use normal font in the TOC
% make everything lower case in section titles
\newcommand\lowsmallcaps[1]{\textls{\MakeLowercase{#1}}}
\begin{document}
\tableofcontents
\section{A section With Mixed Case}
\subsection{This is small caps}
\end{document}
受 Sveinung 的回答启发,另一种方法是重新定义命令;注意不要让其他包重新定义它们,因为这可能会导致冲突。
\documentclass{article}
\usepackage{xparse}
\usepackage{textcase,color}
\ExplSyntaxOn
\NewDocumentCommand{\changesectionalcommand}{mm}
{
\cs_new_eq:cN { csc_\cs_to_str:N #1 } #1
\RenewDocumentCommand{#1}{som}
{
\IfBooleanTF{##1}
{
\IfValueT{##2}{ \use:c { phantomsection } }
\use:c { csc_\cs_to_str:N #1 } * { #2 { ##3 } }
\IfValueT{##2}{ \addcontentsline{toc}{\cs_to_str:N #1}{##2} }
}
{
\IfNoValueTF{##2}
{
\use:c { csc_\cs_to_str:N #1 } [ ##3 ] { #2 { ##3 } }
}
{
\use:c { csc_\cs_to_str:N #1 } [ ##2 ] { #2 { ##3 } }
}
}
}
}
\NewDocumentCommand{\changesectionnumber}{mm}
{
\cs_set:cpn { @seccntformat@\cs_to_str:N #1 } { #2 }
}
\ExplSyntaxOff
\makeatletter
\renewcommand{\@seccntformat}[1]{%
\@nameuse{@seccntformat@#1}\csname the#1\endcsname\quad}%
}
\usepackage{hyperref}
\usepackage{lipsum}
\changesectionalcommand{\section}{\MakeTextUppercase}
\changesectionalcommand{\subsection}{\textcolor{red}}
\begin{document}
\tableofcontents
\section{Mixed Case}
\lipsum[2]
\subsection{Red title}
\lipsum[2]
\section[Bar]{Foo}
\lipsum[2]
\section*{Foo foo}
\lipsum[2]
\section*[Bar bar]{Foo foo foo}
\lipsum[2]
\end{document}
此重新定义的一个特点是\section*[<toc entry>]{Title}
允许,它将自动执行\addcontentsline
指令。当然,人们通常会输入\section*[Title]{Title}
。
语法是
\changesectionalcommand{\seccommand}{\macro}
其中\macro
接收一个参数并且\seccommand
是已知的分段命令之一(从\part
到\subparagraph
)。
例如,要使部分内容采用间隔小写字母,可以这样写
\changesectionalcommand{\section}{\lowsmallcaps}
\newcommand{\lowsmallcaps}[1]{\normalfont\scshape\textls{\MakeTextLowercase{#1}}}
(对于\textls
,microtype
是需要的)。
然而,也需要对章节编号的排版方式进行相应的更改,因此定义了一个补充,并且完整的代码也将具有
\changesectionnumber{\section}{\normalfont}
或者章节编号仍将像往常一样以粗体显示。
答案4
以下是使用该sectsty
包的解决方案:
\documentclass{scrartcl}
\usepackage{sectsty}
\allsectionsfont{\mdseries\scshape\lowercase}
\usepackage[colorlinks=true]{hyperref}
\begin{document}
\tableofcontents
\section{Hello}
\section{Anyone Home?}
\subsection{Hello Hello}
\end{document}
请注意,KOMA-Script 文档中关于列出节级标题(无衬线字体,粗体)和子节级标题(衬线字体,非粗体)的默认设置均被保留。如果我理解您的规范,这就是您想要的。