我正在使用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}