保护章节标题中的引用不采用大写形式

保护章节标题中的引用不采用大写形式

我正在使用ACM SIG 替代样式,它会自动将所有章节标题转换为大写。我想在其中一个章节标题中包含引用(引理 X 的证明)。显而易见的方式(如下面的 MWE 所示)会导致以下警告:

LaTeX Warning: Reference `SEC:INTRODUCTION' on page \thepage  undefined on input line 9.

\ref显然,在生成引用之前,的参数已转换为大写。有没有办法在不将标签更改为大写的情况下解决这个问题?

\documentclass{sig-alternate}
\begin{document}

\section{Introduction}
\label{sec:introduction}
The introduction.

\section{The section after Section~\ref{sec:introduction}}

\end{document}

答案1

另一种选择是,sig-alternate.cls使用\uppercase\@sect格式化部分单元标题;您可以改为\@sect使用\MakeTextUppercase(来自textcase包);这样,标题中任何数学表达式的大小写都不会改变,并且 和 的参数\cite\label\ref不会被大写:

\documentclass{sig-alternate}
\usepackage{xpatch}
\usepackage{textcase}
\makeatletter
\xpatchcmd{\@sect}{\uppercase}{\MakeTextUppercase}{}{}
\xpatchcmd{\@sect}{\uppercase}{\MakeTextUppercase}{}{}
\makeatother
\begin{document}

\section{Introduction}
\label{sec:introduction}
The introduction.

\section{The section after Section~\ref{sec:introduction}}

\end{document}

如果xpatch没有,可以使用以下方法进行修补etoolbox,在本例中为

\usepackage{xpatch}
\makeatletter
\xpatchcmd{\@sect}{\uppercase}{\MakeTextUppercase}{}{}
\xpatchcmd{\@sect}{\uppercase}{\MakeTextUppercase}{}{}
\makeatother

必须替换为

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@sect}{\uppercase}{\MakeTextUppercase}{}{}
\patchcmd{\@sect}{\uppercase}{\MakeTextUppercase}{}{}
\makeatother

(请注意,现在修补命令的名称中没有“x”)。

答案2

如果这不太麻烦的话……

\documentclass{sig-alternate}
\begin{document}

\section{Introduction}
\label{sec:introduction}
The introduction.

\def\x{\ref{sec:introduction}}
\section{The section after Section~\x}

\end{document}

答案3

在仔细阅读了常见问题解答之后,我发现这个答案,这给出了另一个解决方案:

  • 下载并合并软件包 lcsect.sty进入你的源.tex文件。
  • 使用\lcsection部分命令,但手动将文本转换为大写,以与其他标题保持一致。
\documentclass{sig-alternate}
\usepackage{lcsect}
\begin{document}

\section{Introduction}
\label{sec:introduction}

The introduction.

\lcsection{THE SECTION AFTER SECTION~\ref{sec:introduction}}

\end{document}

相关内容