自动将章节、小节等的标题大写

自动将章节、小节等的标题大写

我正在尝试自动将章节、小节等标题的大写化。基本上,我想使用包\capitalize中的命令格式化每个标题stringstrings。我尝试过的一种方法是使用包\titleformat中的命令\titlesec,但我遇到了错误。例如:

\titleformat{\section}{\normalfont}{\thesection}{1em}{\capitalizetitle}

我错过了什么?也许我不知道如何正确使用上述命令。

任何帮助或建议都将不胜感激!

编辑

根据以下建议,我创建了一个 MWE,它在引用参考书目时会引发错误。

文件 test.tex

\documentclass{article}

%%% Language support
\usepackage[english]{babel} % Get everything translated properly
\usepackage[latin1]{inputenc} % Input text correctly
\usepackage[T1]{fontenc} % Get hyphenation right
\usepackage{lmodern} % The Latin Modern fonts
%%%

%%% AMS support
\usepackage{amsmath}
\usepackage{amsfonts}   % fonts
\usepackage{amssymb}    % extra symbols
%%%

\usepackage{natbib}
\bibpunct{(}{)}{;}{a}{,}{,}

\usepackage{titlesec,titlecaps}

\Addlcwords{is with}
\titleformat{\section}[block]{}{\normalfont\Large\bfseries\thesection.\;}{0pt}{\formatsectiontitle}
\newcommand{\formatsectiontitle}[1]{\normalfont\Large\bfseries\titlecap{#1}}

\titleformat{\subsection}[block]{}{\normalfont\large\bfseries\thesubsection.\;}{0pt}{\formatsubsectiontitle}
\newcommand{\formatsubsectiontitle}[1]{\normalfont\large\bfseries\titlecap{#1}}


\begin{document}

\section{this is a title 1}

\subsection{this is a Subsection Title 1}

\section{Another title 2}

Please see \cite{author2016}.

\bibliographystyle{plain}
\bibliography{test_bib}

\end{document}

文件 test_bib.bib:

@Article{author2016,
author = {Last Name, F. N.},
title = {{Title of the Paper}},
journal = {Journal X.},
volume = {130},
number = {20},
pages = {6342-6344},
year = {2016}
}

然后调用:

pdflatex -> 有效

bibtex -> 作品

pdflatex->错误

错误如下所示:

! \ttl@gmk 的参数有一个额外的}。

\par
l.1 \begin{参考书目}{5}
我遇到了似乎不匹配任何内容的“}”。
例如,‘\def\a#1{...}’ 和 ‘\a}’ 将产生
此错误。如果你现在继续,则“\par”
我刚刚插入的将导致我报告失控
这可能是问题的根源。但如果
你的“}”是虚假的,只需输入“2”它就会消失。
失控的争论?

有什么想法可以解决这个问题吗?

编辑2

按照建议,下面的新文件 test.tex 编译时没有错误。

\documentclass{article}

%%% Language support
\usepackage[english]{babel} % Get everything translated properly
\usepackage[latin1]{inputenc} % Input text correctly
\usepackage[T1]{fontenc} % Get hyphenation right
\usepackage{lmodern} % The Latin Modern fonts
%%%

%%% AMS support
\usepackage{amsmath}
\usepackage{amsfonts}   % fonts
\usepackage{amssymb}    % extra symbols
%%%

\usepackage{natbib}
\bibpunct{(}{)}{;}{a}{,}{,}

\usepackage{titlesec,titlecaps}

\let\titlecap\relax \def\Addlcwords#1{}

\Addlcwords{is with}
\titleformat{\section}[block]{}{\normalfont\Large\bfseries\thesection.\;}{0pt}{\formatsectiontitle}
\newcommand{\formatsectiontitle}[1]{\normalfont\Large\bfseries\titlecap{#1}}

\titleformat{\subsection}[block]{}{\normalfont\large\bfseries\thesubsection.\;}{0pt}{\formatsubsectiontitle}
\newcommand{\formatsubsectiontitle}[1]{\normalfont\large\bfseries\titlecap{#1}}


\begin{document}

\section{this is a title 1}

\subsection{this is a Subsection Title 1}

\section{Another title 2}

Please see \cite{author2016}.

\bibliographystyle{apalike}
\bibliography{test_bib}

\end{document}

pdflatex -> bibtex -> pdflatex -> pdflatex 产生以下结果。现在的问题是标题没有自动大写。

输出

答案1

编辑(见补充为了兼容natbib

我承认我的评论有误。这是可以做到的。我遵循了章节标题与 titleformat 对齐但将其改为标题大写,而不是小写。

我甚至用了 中的“排除”这个词\Addlcwords{}

在我最初对 OP 的评论中,我推荐使用该titlecaps包,我之所以写这个包正是因为\capitalizetitlestringstrings包的宏(也是我写的)慢得令人尴尬。

\documentclass[12pt]{book}

\usepackage{titlesec}
\usepackage{xcolor,lipsum,titlecaps}

\titleformat{\chapter}[block]
  {}
  {\llap{\color{gray}\chapterNumber\thechapter
   \hspace{10pt}\vline}}
  {10pt}
  {\formatchaptertitle}

\newcommand{\formatchaptertitle}[1]{%
  \parbox[t]{\dimexpr\textwidth-10pt}{\raggedright\LARGE\titlecap{#1}}}

\newcommand{\chapterNumber}{%
  \fontsize{50}{50}\usefont{U}{eur}{b}{n}}

\Addlcwords{is with}
\begin{document}
\chapter{this is my long long long long title with several lowercase words}

\lipsum[1]
\end{document}

在此处输入图片描述

补充

\titlecap显然,在章节标题中使用viatitlesec与 不兼容natbib。这里的解决方案是\let\titlecap\relax 在书目征集之前,这实际上关闭了titlecap参考书目。但由于参考书目的部分名称是“参考文献”,不需要\titlecap,所以这样做并没有什么坏处。

\documentclass{article}
%%% Language support
\usepackage[english]{babel} % Get everything translated properly
\usepackage[latin1]{inputenc} % Input text correctly
\usepackage[T1]{fontenc} % Get hyphenation right
\usepackage{lmodern} % The Latin Modern fonts
%%%
%%% AMS support
\usepackage{amsmath}
\usepackage{amsfonts}   % fonts
\usepackage{amssymb}    % extra symbols
%%%
\usepackage{natbib}
\bibpunct{(}{)}{;}{a}{,}{,}

\usepackage{titlesec,titlecaps}

\Addlcwords{is with}
\titleformat{\section}[block]{}{\normalfont\Large\bfseries\thesection.\;}{0pt}{\formatsectiontitle}
\newcommand{\formatsectiontitle}[1]{\normalfont\Large\bfseries\titlecap{#1}}

\titleformat{\subsection}[block]{}{\normalfont\large\bfseries\thesubsection.\;}{0pt}{\formatsubsectiontitle}
\newcommand{\formatsubsectiontitle}[1]{\normalfont\large\bfseries\titlecap{#1}}

\begin{document}

\section{this is a title 1}

\subsection{this is a Subsection Title 1}

\section{Another title 2}

Please see \cite{author2016}.

\let\titlecap\relax
\bibliographystyle{apalike}
\bibliography{test_bib}
\end{document}

在此处输入图片描述

相关内容