表格标题内的 MakeTextUppercase

表格标题内的 MakeTextUppercase

我正在修改一个较旧的大学模板,该模板要求在文本中将所有表格标题设置为大写,但在表格列表中不需要这样做。为了自动化该过程,我修补了模板的相应部分以\MakeTextUppercase在标题宏中使用。这有效,直到选项final传递给底层书籍类并hyperref与 发生冲突\MakeTextUppercase。这是一个 MWE:

\documentclass[final]{book}

\usepackage{hyperref}
\usepackage{textcase}


\makeatletter
\renewenvironment{table}{%
   \let\@makecaption\@maketablecaption
   \@float{table}}{\end@float}
\long\def\@maketablecaption#1#2{
  \begin{center}
    \makebox[\linewidth]{
      \parbox{\linewidth}{
      \centering
      \MakeTextUppercase{#1}\\
      \MakeTextUppercase{#2}%\par
      }%
    }%
  \end{center}
}
\makeatother

\begin{document}
\listoftables
\chapter{One}

\begin{table}
  \caption{A Caption}
\end{table}

\end{document}

\MakeTextuppercase如果删除,则错误消息会消失:

! Undefined control sequence.
\@hyper@@anchor ...r@spot {#2#3}\let \put@me@back
                                                  \@empty \ifx \relax #2\rel...

l.30   \caption{A Caption}

我不希望表格列表有大写的表格标题,标题在运行文本中只能是大写的。 是否有一个简单的修改上述示例来实现这一点? 如何\MakeTextUppercase仅应用于文本标题部分而不应用于表格列表中的标题部分? 我不想包含其他包,因为这都是更大模板的一部分……

答案1

的第二个参数\@makecaption(或者在这种情况下\@maketablecaption不仅仅是的参数的输入,\caption而是很多不同的指令。\MakeTextUppercase无法应对这个问题。

使用该caption包执行此类任务更加容易(而且在我看来也是一个更清洁的解决方案)。

\documentclass[final]{book}

\usepackage{caption}
\usepackage{textcase}

\DeclareCaptionLabelFormat{uppercase}{\MakeTextUppercase{#1~#2}}
\DeclareCaptionTextFormat{uppercase}{\MakeTextUppercase{#1}}
\captionsetup{
  labelsep = newline ,
  justification = centering ,
  labelformat = uppercase ,
  textformat = uppercase
}

\usepackage{hyperref}

\begin{document}

\listoftables

\chapter{One}

\begin{table}
  \caption{A Caption}
\end{table}

\end{document}

在此处输入图片描述


上述代码格式全部标题。如果你只想将其应用于表格,那么使用

\captionsetup[table]{
  ..
}

相关内容