章节和目录中的大写字母

章节和目录中的大写字母
\usepackage{titlesec}
\titleformat{\section}
{\bfseries}{\thesection}{1em}{\MakeUppercase}

使用这个包我可以将部分内容设为大写:

\section{This will be upper case}

在此处输入图片描述

但目录中将是来自章节的原始文本,是否可以在目录中也将其变为大写? 在此处输入图片描述

答案1

无需附加包的解决方案可以是一个新的\Section命令,通过使用\section大写文本的命令来改变两者。

\documentclass{article}
\newcommand{\Section}[2][]{%
  \def\shortsec{#1}%
  \ifx\shortsec\empty%
    \section{\MakeUppercase{#2}}
  \else%
    \section[\MakeUppercase{#1}]{\MakeUppercase{#2}}
  \fi}
\begin{document}
\tableofcontents
\Section[t]{title}
\end{document}

结果

编辑:为了使其与hyperref包一起工作,需要调整代码(\ifdefined我修改了该行的行为,因此它可以与 hyperref 一起使用或不与 hyperref 一起使用):

\documentclass{article}
\usepackage{hyperref}

\ifdefined\texorpdfstring\else\newcommand{\texorpdfstring}[2]{#1}\fi
\newcommand{\Section}[2][]{%
  \def\shortsec{#1}%
  \ifx\shortsec\empty%
    \section{\texorpdfstring{\MakeUppercase{#2}}{#2}}
  \else%
    \section[\texorpdfstring{\MakeUppercase{#1}}{#1}]{\texorpdfstring{\MakeUppercase{#2}}{#2}}
  \fi}
\begin{document}
\tableofcontents
\Section{title}
\end{document}

可能使用 lua(la)tex 有一种更漂亮的方法,如果有人感兴趣的话我可以研究一下。

编辑2:要替换旧\section命令,可以执行以下操作:

\documentclass{article}
\usepackage{hyperref}

\ifdefined\texorpdfstring\else\newcommand{\texorpdfstring}[2]{#1}\fi
\let\oldsection\section

\makeatletter
\renewcommand{\section}{\@ifstar{\@sSection}{\@Section}}
\newcommand{\@sSection}[2][]{%
  \oldsection*{\texorpdfstring{\MakeUppercase{#2}}{#2}}}
\newcommand{\@Section}[2][]{%
  \def\shortsec{#1}%
  \ifx\shortsec\empty%
    \oldsection{\texorpdfstring{\MakeUppercase{#2}}{#2}}
  \else%
    \oldsection[\texorpdfstring{\MakeUppercase{#1}}{#1}]{\texorpdfstring{\MakeUppercase{#2}}{#2}}
  \fi}
\makeatother

\begin{document}
\tableofcontents
\section{title}
\end{document}

编辑3:如果你想保留旧的\section*行为,例如保留旧的 toc 标题而不是大写版本,你可以替换

\renewcommand{\section}{\@ifstar{\@sSection}{\@Section}}

\renewcommand{\section}{\@ifstar{\oldsection*}{\@Section}}

相关内容