Estou lutando com um problema simples. Estou usando a classe KOMA
\documentclass[11pt]{scrartcl}%
Preciso formatar os títulos dos meus títulos para que:
- Títulos de seçãodevem ser identificados por números arábicos seguidos de um ponto, por exemplo, 1., 2., etc.Texto em negrito
- Subtítulosdevem ser identificados por números arábicos seguidos de um ponto, por exemplo, 1.1, 2.1 Texto sem negrito
- Subsubtítulosser identificados por algarismos arábicos seguidos de ponto. por exemplo, 1.1.1Texto em itálico.
Para todos os títulos de seção, todas as palavras principais do título devem ser maiúsculas, por exemplo, “Olá Stackoverflow, isso é ótimo”
Obrigado!!!!
Responder1
Existe uma maneira simples de adicionar pontos a todos os níveis de corte:
\usepackage[numbers=endperiod]{scrartcl}
Mas, na verdade, você deseja que apenas as seções tenham pontos finais, então você precisa fazer o seguinte:
\documentclass[]{scrartcl}
\renewcommand*{\sectionformat}{\thesection.\enskip}
Existe uma maneira simples de alterar as fontes:
\setkomafont{subsection}{\normalfont}
\setkomafont{subsubsection}{\normalfont\itshape}
Não há uma maneira simples de fazer o título automaticamente. Mas adaptando a resposta aqui:
é possível usar o titlecaps
pacote com a scrartcl
classe da seguinte maneira. Se você conseguir viver sem maiúsculas e minúsculas automáticas (eu pessoalmente faria isso sozinho), poderá eliminar toda essa parte do código. Aqui está o exemplo completo.
Se você quiser fazer isso, entãoA resposta de Schweinebackeé um pouco mais simples, pois modifica o código em um nível de abstração superior ao código que modifiquei.
\documentclass[]{scrartcl}
\setkomafont{subsection}{\normalfont}
\setkomafont{subsubsection}{\normalfont\itshape}
\renewcommand*{\sectionformat}{\thesection.\enskip}
% The rest of this preamble code is only needed for automatic title casing
\usepackage{titlecaps}
% this is a space separated list of words that should be lowercase
% since you have to add to this list manually, title casing is not truly automatic
\Addlcwords{a an the that to this is are and with}
\makeatletter
% adapted from https://tex.stackexchange.com/a/33215/
% ---- only needed for automatic title case ----
\let\scr@section\section
\let\scr@subsection\subsection
\let\scr@subsubsection\subsubsection
\def\section{\@ifstar\cased@sections\cased@section}
\def\subsection{\@ifstar\cased@subsections\cased@subsection}
\def\subsubsection{\@ifstar\cased@subsubsections\cased@subsubsection}
\def\cased@sections#1{\scr@section*{\titlecap{#1}}}
\def\cased@subsections#1{\scr@subsection*{\titlecap{#1}}}
\def\cased@subsubsections#1{\scr@subsubsection*{\titlecap{#1}}}
\def\cased@section{\@dblarg{\cased@section@}}
\def\cased@subsection{\@dblarg{\cased@subsection@}}
\def\cased@subsubsection{\@dblarg{\cased@subsubsection@}}
\def\cased@section@[#1]#2{%
\scr@section[\titlecap{#1}]{\titlecap{#2}}}
\def\cased@subsection@[#1]#2{%
\scr@subsection[\titlecap{#1}]{\titlecap{#2}}}
\def\cased@subsubsection@[#1]#2{%
\scr@subsubsection[\titlecap{#1}]{\titlecap{#2}}}
\makeatother
% ---- only needed for automatic titlecase ----
\begin{document}
\section{A section with a word that should use uppercase}
\subsection{This is a subsection with most words uppercase}
\subsubsection{This is a subsubsection}
\end{document}
Responder2
Na adaptação deA ótima resposta de Alansvocê poderia redefinir \sectionlinesformat
em vez de \section
e \subsection
colocar \subsubsection
os títulos em maiúsculas automaticamente:
\let\orig@sectionlinesformat\sectionlinesformat
\renewcommand*{\sectionlinesformat}[4]{%
\orig@sectionlinesformat{#1}{#2}{#3}{\titlecap{#4}}%
}%
Para alterar a caixa das entradas do índice, você pode redefinir \addtocentrydefault
:
\let\orig@addtocentrydefault\addtocentrydefault
\renewcommand*{\addtocentrydefault}[3]{%
\orig@addtocentrydefault{#1}{#2}{\titlecap{#3}}%
}
E para alterar o caso do cabeçote em execução, você pode redefinir \MakeMarkcase
:
\let\MakeMarkcase\titlecap
MWE:
\documentclass[]{scrartcl}
\setkomafont{subsection}{\normalfont}
\setkomafont{subsubsection}{\normalfont\itshape}
\renewcommand*{\sectionformat}{\thesection.\enskip}
\renewcommand*{\sectionmarkformat}{\sectionformat}% also for running head
% The rest of this preamble code is only needed for automatic title casing
\usepackage{titlecaps}
% this is a space separated list of words that should be lowercase
% since you have to add to this list manually, title casing is not truly automatic
\Addlcwords{a an the that to this is are and with}
\makeatletter
\let\orig@sectionlinesformat\sectionlinesformat
\renewcommand*{\sectionlinesformat}[4]{%
\orig@sectionlinesformat{#1}{#2}{#3}{\titlecap{#4}}%
}%
\let\orig@addtocentrydefault\addtocentrydefault
\renewcommand*{\addtocentrydefault}[3]{%
\orig@addtocentrydefault{#1}{#2}{\titlecap{#3}}%
}
% and if you also want the case change for \paragraph and \subparagraph:
\let\orig@sectioncatchphraseformat\sectioncatchphraseformat
\renewcommand*{\sectioncatchphraseformat}[4]{%
\orig@sectioncatchphraseformat{#1}{#2}{#3}{\titlecap{#4}}%
}
\makeatother
\let\MakeMarkcase\titlecap
% ---- only needed for automatic titlecase ----
\pagestyle{headings}% to show the running head
\begin{document}
\tableofcontents
\section{A section with a word that should use uppercase}
\subsection{This is a subsection with most words uppercase}
\subsubsection{This is a subsubsection}
\newpage
Empty page
\end{document}
Mas se você gosta de truques sujos, você também pode fazer:
\documentclass[]{scrartcl}
\setkomafont{subsection}{\normalfont}
\setkomafont{subsubsection}{\normalfont\itshape}
\renewcommand*{\sectionformat}{\thesection.\enskip}
\renewcommand*{\sectionmarkformat}{\sectionformat}% also for running head
% The rest of this preamble code is only needed for automatic title casing
\usepackage{titlecaps}
% this is a space separated list of words that should be lowercase
% since you have to add to this list manually, title casing is not truly automatic
\Addlcwords{a an the that to this is are and with}
\makeatletter
\let\orig@sectionlinesformat\sectionlinesformat
\renewcommand*{\sectionlinesformat}[4]{%
\orig@sectionlinesformat{#1}{#2}{#3}{\titlecap{#4}}%
\expandafter\gdef\expandafter\@currenttocentry\expandafter{%
\expandafter\titlecap\expandafter{\@currenttocentry}%
}%
\expandafter\gdef\expandafter\@currentheadentry\expandafter{%
\expandafter\titlecap\expandafter{\@currentheadentry}%
}%
}%
\let\orig@sectioncatchphraseformat\sectioncatchphraseformat
\renewcommand*{\sectioncatchphraseformat}[4]{%
\orig@sectioncatchphraseformat{#1}{#2}{#3}{\titlecap{#4}}%
\expandafter\gdef\expandafter\@currentheadentry\expandafter{%
\expandafter\titlecap\expandafter{\@currentheadentry}%
}%
}
\makeatother
% ---- only needed for automatic titlecase ----
\pagestyle{headings}% to show the running head
\begin{document}
\tableofcontents
\section{A section with a word that should use uppercase}
\subsection{This is a subsection with most words uppercase}
\subsubsection{This is a subsubsection}
\newpage
Empty page
\end{document}
Ambas as sugestões resultam em:
O código da frase de efeito é para \paragraph
e \subparagraph
.
Responder3
Última edição(Tive que editar a resposta por causa de muitos votos positivos que ela realmente não merecia)
\documentclass[11pt]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{nameref}
\usepackage{mfirstuc}
\MFUnocap{$f(x)=2\cdot x$}
\renewcommand{\sectionformat}{}
\renewcommand{\subsectionformat}{}
\renewcommand{\subsubsectionformat}{}
\renewcommand*\sectionformat{\normalfont\bfseries\Large}
\renewcommand*\subsectionformat{\normalfont\mdseries\rmfamily\large}
\renewcommand*\subsubsectionformat{\normalfont\itshape\large}
\let\oldsection\section
\makeatletter
\def\section{%
\@ifstar{\@Starred}{\@nonStarred}%
}
\def\@Starred{%
\setkomafont{section}{\sectionformat}%
\@ifnextchar[%
{\GenericWarning{}{Warning: A starred section can not have parameters. I am going to ignore them!}\@StarredWith}%
{\@StarredWithout}%
}
\def\@StarredWith[#1]#2{%
\oldsection*{\capitalisewords{#2}}%
}
\def\@StarredWithout#1{%% This would be simpler if your table of contents is not a section...
\ifnum\pdfstrcmp{#1}{\contentsname}=0%
\renewcommand{\sectionformat}{}%
\setkomafont{section}{\sectionformat}%
\oldsection*{\contentsname}%
\else%
\oldsection*{\capitalisewords{#1}}%
\fi%
}
\def\@nonStarred{%
\setkomafont{section}{\sectionformat\thesection.\space}%
\@ifnextchar[%
{\@nonStarredWith}%
{\@nonStarredWithout}%
}
\def\@nonStarredWith[#1]#2{%
\oldsection[#1]{\capitalisewords{#2}}%
}
\def\@nonStarredWithout#1{%
\oldsection{\capitalisewords{#1}}%
}
\makeatother
\let\oldsubsection\subsection
\makeatletter
\def\subsection{%
\@ifstar{\@Starredss}{\@nonStarredss}%
}
\def\@Starredss{%
\setkomafont{subsection}{\subsectionformat}%
\@ifnextchar[%
{\GenericWarning{}{Warning: A starred section can not have parameters. I am going to ignore them!}\@StarredWithss}%
{\@StarredWithout}%
}
\def\@StarredWithss[#1]#2{%
\oldsubsection*{\capitalisewords{#2}}%
}
\def\@StarredWithoutss#1{%% This would be simpler if your table of contents is not a subsection...
\ifnum\pdfstrcmp{#1}{\contentsname}=0%
\renewcommand{\sectionformat}{}%
\setkomafont{subsection}{\sectionformat}%
\oldsubsection*{\contentsname}%
\else%
\oldsubsection*{\capitalisewords{#1}}%
\fi%
}
\def\@nonStarredss{%
\setkomafont{subsection}{\subsectionformat\thesubsection\space}%
\@ifnextchar[%
{\@nonStarredWithss}%
{\@nonStarredWithoutss}%
}
\def\@nonStarredWithss[#1]#2{%
\oldsubsection[#1]{\capitalisewords{#2}}%
}
\def\@nonStarredWithoutss#1{%
\oldsubsection{\capitalisewords{#1}}%
}
\makeatother
\let\oldsubsubsection\subsubsection
\makeatletter
\def\subsubsection{%
\@ifstar{\@Starredsss}{\@nonStarredsss}%
}
\def\@Starredsss{%
\setkomafont{subsubsection}{\subsubsectionformat}%
\@ifnextchar[%
{\GenericWarning{}{Warning: A starred section can not have parameters. I am going to ignore them!}\@StarredWithsss}%
{\@StarredWithout}%
}
\def\@StarredWithsss[#1]#2{%
\oldsubsubsection*{\capitalisewords{#2}}%
}
\def\@StarredWithoutsss#1{%% This would be simpler if your table of contents is not a subsection...
\ifnum\pdfstrcmp{#1}{\contentsname}=0%
\renewcommand{\sectionformat}{}%
\setkomafont{subsection}{\sectionformat}%
\oldsubsubsection*{\contentsname}%
\else%
\oldsubsubsection*{\capitalisewords{#1}}%
\fi%
}
\def\@nonStarredsss{%
\setkomafont{subsubsection}{\subsubsectionformat\thesubsubsection\space}%
\@ifnextchar[%
{\@nonStarredWithsss}%
{\@nonStarredWithoutsss}%
}
\def\@nonStarredWithsss[#1]#2{%
\oldsubsubsection[#1]{\capitalisewords{#2}}%
}
\def\@nonStarredWithoutsss#1{%
\oldsubsubsection{\capitalisewords{#1}}%
}
\makeatother
\begin{document}
\tableofcontents
\section{test section 1 with text of non-capitalized first word}
That was the first test section and here comes the second named ``\nameref{sec:secd}''
\section{the second section with equation $f(x)=2\cdot x$}\label{sec:secd}
\section*{a section with star}
\subsection{the first subsection}
And we can use very simple the nameref like this: ``\nameref{subsub}''
\subsubsection{a subsubsection}\label{subsub}
\end{document}
Editar: Como @AlanMunn mencionou, meu método não é sugerido com esta documentclass e vou atualizar a resposta para incluir esta documentclass ... Se alguém chegou a essa pergunta usando outra documentclass, provavelmente poderá usar esse método como fácil.
Aqui está uma maneira fácil para tudo que você precisa... Só não se esqueça de excluir as equações ou as palavras que você não deseja colocar em maiúscula da função capitalizar como fiz com o comando MFUnocap... caso contrário você terá erros.
\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{nameref}
\usepackage[explicit]{titlesec}
\usepackage{mfirstuc}
\MFUnocap{$f(x)=2\cdot x$}
\titleformat{\section}
{\normalfont\Large\bfseries}{\thesection.}{1em}{\capitalisewords{#1}}
\titleformat{\subsection}
{\normalfont\large}{\thesubsection}{1em}{\capitalisewords{#1}}
\titleformat{\subsubsection}
{\normalfont\large\itshape}{\thesubsubsection}{1em}{\capitalisewords{#1}}
\begin{document}
\section{Test section 1 with text of non-capitalized first word}
That was the first test section and here comes the second named ``\nameref{sec:second}''
\section{the second section with equation $f(x)=2\cdot x$}\label{sec:second}
\subsection{the first subsection}
\subsubsection{a subsubsection}
\end{document}
Veja também que o possível uso de nameref não mostrará o título como realmente está no título. Portanto, você terá que corrigir manualmente os títulos se quiser usar nameref como sugerido por @MichaelPalmer.
Resultado: