我正在尝试自动将章节、小节等标题的大写化。基本上,我想使用包\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
包,我之所以写这个包正是因为\capitalizetitle
该stringstrings
包的宏(也是我写的)慢得令人尴尬。
\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}