在列表环境中引用标签时,\autoref 不会将句子中的首字母大写

在列表环境中引用标签时,\autoref 不会将句子中的首字母大写

我定义了以下内容

\providecommand*{\lstnumberautorefname}{line}

并在我的文本中

\begin{lstlisting} 
            |\label{sdd_1}|<sqlCallStatistics>YES</sqlCallStatistics>
\end{lstlisting}

当我现在在我的文本中使用

xxx. \autoref{sdd_1} 

然后我收到以下输出:

xxxx. line 1 

而不是(我所期望的)

xxxx. Line 1

答案1

\autoref不自动大写,如下例所示:

\documentclass{article}
\usepackage{listings}
\usepackage{hyperref}

\providecommand*{\lstnumberautorefname}{line}

\begin{document}

\section{Test}\label{sec:test}
\autoref{sec:test} and a period before the reference. \autoref{sec:test}
\begin{lstlisting} [escapeinside=||,numbers=left]
      <sqlCallStatistics>YES</sqlCallStatistics>|\label{sdd_1}|
\end{lstlisting}

\autoref{sdd_1}  and a period before the reference. \autoref{sdd_1}

\end{document}

您可以使用该cleveref包来获得\cref(用于小写)和\Cref(用于大写):

\documentclass{article}
\usepackage{listings}
\usepackage{cleveref}

\begin{document}

\begin{lstlisting} [escapeinside=||,numbers=left]
      <sqlCallStatistics>YES</sqlCallStatistics>|\label{sdd_1}|
\end{lstlisting}

\cref{sdd_1}  and a period before the reference. \Cref{sdd_1}

\end{document}

编辑:正如MWin123评论所说:默认情况下,\cref只将数字“1”变成超链接,而\autoref将整个“第 1 行”变成可点击的链接。幸运的是,有一个选项nameinlink可以做到这一点,即,您可以使用\usepackage[nameinlink]{cleveref}

答案2

解决这个问题没有简单的方法,除非重新定义\lstnumberautorefnameLine包含其他包。在这种情况下,你最好使用

\hyperref[sdd_1]{Line~\ref*{sdd_1}}

而不必诉诸其他方法。这将提供相同的链接,但大写。\ref*工作原理与 相同\ref,但不包含超链接。超链接由 提供\hyperref[<label>]{<stuff>}。这是一个最小示例:

在此处输入图片描述

\documentclass{article} 
\usepackage{hyperref}% http://ctan.org/pkg/hyperref
\usepackage{listings}% http://ctan.org/pkg/listings
\lstset{numbers=left,escapeinside=||}
\providecommand*{\lstnumberautorefname}{line}
\begin{document}
\begin{lstlisting} 
|\label{sdd_1}|<sqlCallStatistics>YES</sqlCallStatistics>
\end{lstlisting}
Here is some text. \hyperref[sdd_1]{Line~\ref*{sdd_1}} is important, and so is \autoref{sdd_1}.
\end{document}​

答案3

另一个选项提到手册

使用:

\usepackage[english]{babel}  
\addto\extrasenglish{  
  \def\typeautorefname{Type}  
}
\usepackage{hyperref}   

如果您想要大写使用\autoref或想要完全重命名自动引用名称。只需将其替换type为引用类型,因此,,,chapter等等。sectionsubsection

例如:

\usepackage[english]{babel}
\addto\extrasenglish{
  \def\subsectionautorefname{Subsection}
}

我意识到这不符合您定义\Autoref命令的要求。但是,我认为值得一提,因为它是一个更简洁的版本,可能满足其他人的要求,而且我花了一段时间才找到真正有用的方法。

答案4

一种简单的方法是添加以下内容

\renewcommand{\figureautorefname}{Figure}
\renewcommand{\tableautorefname}{Table}
\renewcommand{\partautorefname}{Part}
\renewcommand{\appendixautorefname}{Appendix}
\renewcommand{\chapterautorefname}{Chapter}
\renewcommand{\sectionautorefname}{Section}
\renewcommand{\subsectionautorefname}{Section}
\renewcommand{\subsubsectionautorefname}{Section}

就在你的

\begin{document}

相关内容