将 cleveref 字符串转换为小写

将 cleveref 字符串转换为小写

我用它cleveref来交叉引用整个文档中的定理。但是,由于某些定理非常流行,我更喜欢用名称而不是定理编号来引用它们;但我仍然希望它们是可点击的,这样无论定理在哪里被提及,点击定理的名称都会直接带你到它那里。

为了创建自定义字符串,我实现了提供的解决方案这个答案,可以在下面的 MWE 中显示。

\documentclass{article}
\usepackage{amsthm, parskip, hyperref, cleveref}

% Theorems
\theoremstyle{definition}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{example}[theorem]{Example}

% Solution from https://tex.stackexchange.com/a/109864/78913
\makeatletter
\newcommand{\myref}[1]{\cref{#1}\mynameref{#1}{\csname r@#1\endcsname}}
\newcommand{\Myref}[1]{\Cref{#1}\mynameref{#1}{\csname r@#1\endcsname}}

\def\mynameref#1#2{%
    \begingroup
    \edef\@mytxt{#2}%
    \edef\@mytst{\expandafter\@thirdoffive\@mytxt}%
    \ifx\@mytst\empty\else
    \space(\nameref{#1})\fi
    \endgroup
}
\makeatother

\begin{document}
    \section{Group Actions}

    \begin{theorem}[Orbit-Stabiliser Theorem]
        \label{thm:ost}
        Let $G$ be a finite group acting on a finite set $X$. Then 
        \[|G| = \mathop{\mathrm{Orb}}(x) \times \mathop{\mathrm{Stab}}(x).\]
    \end{theorem}

    \begin{example}
        Let $G$ act on $X$, where $|G| = 55$ and $|X| = 18$. Show that the action has at least two fixed points.

        By the \nameref{thm:ost}, ...
    \end{example}

\end{document}

此代码提供以下输出:

图1

有没有办法可以更改标签,使文本变为小写?我尝试使用\MakeLowercase{},但没有成功。有没有办法可以修改标签?例如,如果我有“柯西定理”之类的东西,我希望它显示为“柯西定理”文本中的“定理”,用小写字母 表示t

我非常感谢您的帮助。

答案1

您必须明确告诉 LaTeX 定理名称如何大写。没有办法自动检测哪些词是专有名词,如“Cauchy”,应该保持大写。

按名称引用事物更属于该nameref包的职责范围。Cleveref涉及按其标签引用事物。但由于无论如何您都必须明确指定正确大写的定理名称,因此有一种方法可以做到这一点,而无需cleveref付出太多额外的努力:

\documentclass{article}
\usepackage{amsthm, parskip, hyperref, cleveref}

% Theorems
\theoremstyle{definition}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{example}[theorem]{Example}

\begin{document}
    \section{Group Actions}

    \begin{theorem}[Orbit-Stabiliser Theorem]
      \label{thm:ostnum}
      \label[ost]{thm:ostname}
      \crefformat{ost}{#2orbit-stabiliser theorem#3}
      \Crefformat{ost}{#2Orbit-stabiliser theorem#3}
      Let $G$ be a finite group acting on a finite set $X$. Then
      \[|G| = \mathop{\mathrm{Orb}}(x) \times \mathop{\mathrm{Stab}}(x).\]
    \end{theorem}

    \begin{example}
        Let $G$ act on $X$, where $|G| = 55$ and $|X| = 18$. Show that the action has at least two fixed points.

        By the \cref{thm:ostname}, which is given in \cref{thm:ostnum}, \dots
    \end{example}

\end{document}

这通过定义一个新的交叉引用类型ost并告诉cleveref使用正确大写的定理名称格式化对它的引用来实现。附加thm:ostnum标签只是为了演示如何仍然可以通过其标签引用该定理(如果需要)。

如果您想经常这样做,可以通过将 \label、\crefformat、\Crefformat 甚至定理定义捆绑到新的宏或环境中来稍微整理一下。

答案2

crossreftools几周前我编写了这个包(它在 CTAN、TeXLive 和 MikTeX 上可用,当前版本是 0.4),它提供了对hyperref和存储的交叉引用信息的可扩展提取cleveref

\MakeLowercase无法与 一起使用\nameref,因为\nameref不可扩展,因此必须先提取名称信息,然后应用\MakeLowercase

名称引用已使用 完成\crtrefname,但这不会提供超链接,这将使整个问题再次无法展开。可以使用 提取超锚点\crtrefanchor,并将其与\hyperlink包装在新命令中,假设\lowernameref这将提供小写标题。

请注意,这\lowernameref当然是无法扩展的。

\documentclass{article}
\usepackage{amsthm, parskip, hyperref, cleveref}

\usepackage{crossreftools}

% Theorems
\theoremstyle{definition}
\newtheorem{theorem}{Theorem}[section]
\newtheorem{example}[theorem]{Example}

% Solution from https://tex.stackexchange.com/a/109864/78913
\makeatletter
\newcommand{\myref}[1]{\cref{#1}\mynameref{#1}{\csname r@#1\endcsname}}
\newcommand{\Myref}[1]{\Cref{#1}\mynameref{#1}{\csname r@#1\endcsname}}

\newcommand{\lowernameref}[1]{\hyperlink{\crtrefanchor{#1}}{\MakeLowercase{\crtrefname{#1}}}}


\def\mynameref#1#2{%
    \begingroup
    \edef\@mytxt{#2}%
    \edef\@mytst{\expandafter\@thirdoffive\@mytxt}%
    \ifx\@mytst\empty\else
    \space(\nameref{#1})\fi
    \endgroup
}
\makeatother

\begin{document}
    \section{Group Actions}

    \begin{theorem}[Orbit-Stabiliser Theorem]
        \label{thm:ost}
        Let $G$ be a finite group acting on a finite set $X$. Then 
        \[|G| = \mathop{\mathrm{Orb}}(x) \times \mathop{\mathrm{Stab}}(x).\]
    \end{theorem}

    \begin{example}
        Let $G$ act on $X$, where $|G| = 55$ and $|X| = 18$. Show that the action has at least two fixed points.

        By the \lowernameref{thm:ost}, ...
    \end{example}

\end{document}

在此处输入图片描述

相关内容