根据上下文改变引用样式

根据上下文改变引用样式

引用定理/引理/推论等子陈述的一种风格如下。假设我们有以下文本(我对第一部分的翻译)1区)。

第一章:态射

...

2. 准有限态射

命题 2.1。设 ... 则等价条件为:

(我) ...

(二)...

(三)...

我想将枚举列表中的项目引用为

  • (i),,在这个命题的证明中(在 SGA 中,这个特定的例子可能是一个坏例子,因为这个(ii)命题(iii)没有证明,而且这种引用风格甚至用在推论2.2紧接着这一提议);
  • (2.1, (i)),,(2.1, (ii))(2.1 (iii))第一章
  • (I, 2.1, (i)),,(I, 2.1, (ii))(I, 2.1, (iii))第一章

这种风格在 SGA 和 EGA 中(或多或少)都得到了遵循(EGA 中有逗号,SGA 中没有逗号)。我知道可以手动完成此操作,方法是label输入章节、命题和列表中的项目,然后提供三个不同的命令来实现这些风格。但我正在寻找一种上下文感知机制,即我只需要label列表中的三个项目,单个引用命令将根据调用位置产生正确的风格。这种机制需要保存每个项目的相关命题和章节,然后将它们进行比较以获得正确的风格。我也知道\p@enumi前缀\theenumi,但不知道如何使其工作。欢迎任何想法或软件包。


编辑:我不知道这是否有很大帮助,但这里有一个穷人对这个问题的解决方案(评论中要求的 MWE):

\documentclass{book}

\renewcommand{\thechapter}{\Roman{chapter}}
\counterwithout{section}{chapter}
\counterwithin*{section}{chapter}

\usepackage{amsthm}
\newtheorem{theorem}{Theorem}[section]

\usepackage{enumitem}
\setlist[enumerate]{label=\textup{(\roman*)}}

\NewDocumentCommand{\itmref}{ m o o }{% itm, thm, ch
    \IfValueT{#2}{(}%
    \IfValueT{#3}{\ref{#3}, }%
    \IfValueT{#2}{\ref{#2}, }%
    \ref{#1}%
    \IfValueT{#2}{)}%
}

\NewDocumentCommand{\thmref}{ m o }{% thm, ch
    (\IfValueT{#2}{\ref{#2}, }%
    \ref{#1})%
}

\begin{document}

\chapter{} \label{ch}
\section{}
\begin{theorem} \label{thm1}
    Let \dots
    \begin{enumerate}
        \item \label{itm}
    \end{enumerate}
\end{theorem}

\begin{proof}
    \itmref{itm}
\end{proof}

\begin{theorem} \label{thm2}
\end{theorem}

\itmref{itm}[thm1],
\thmref{thm2}

\chapter{}

\itmref{itm}[thm1][ch],
\thmref{thm2}[ch]

\end{document}

第 1 页:

在此处输入图片描述

第 3 页:

在此处输入图片描述

目标是有一个命令\itmref不需要可选参数[thm]或,[thm][ch]并且在所有情况下仍能产生正确的结果。 类似\thmref。 如果有一些命令\magicref结合了\itmref\nameref功能,那就更好了。

相关内容