自动添加定理以进行索引和标记

自动添加定理以进行索引和标记

在另一个问题中(从命令参数中删除数学运算以仅获取字母)这个命令被详细说明,有一个可选参数,用于索引内的排序目的

\documentclass{article}
\usepackage{makeidx}
\usepackage{xparse}
\NewDocumentCommand{\defined}{om}{%
    {\bfseries #2}%
    \IfNoValueTF{#1}
        {\index{#2}\label{#2}}
        {\index{#1@#2}\label{#1}}
    }
\makeindex
\begin{document}
\defined{$G$-invariant}

\defined[G-invariant]{$G$-invariant}
\printindex
\end{document}

我现在想知道是否有办法对自己的定理风格使用相同的可选参数,所以沿着这条线做点什么。

\newtheoremstyle{blanksample} % name of the style to be used
  {}             % measure of space to leave above the theorem
  {}             % measure of space to leave below the theorem
  {}             % name of font to use in the body of the theorem
  {}             % measure of space to indent
  {\bfseries}    % name of head font
  {}             % punctuation between head and body
  {\newline}     % space after theorem head
  {\thmname{#1} \thmnumber{#2.} \thmnote{\normalfont(#3)} \defined{#1!#3}} % head

但是像这样,我再次遇到了#3 中的美元符号或其他东西的问题,因此再次想使用一个可选参数并将其交给\defined

此外,我实际上希望索引链接到定理编号而不是页码。

有任何想法吗?


所以我想以某种方式像这样使用它使用\theoremstyle{blanksample}anf 因为\newtheorem{definition}{Definition}我想以某种方式像这样使用它

\begin{definition}[G-invariant][$G$-invariant]
    some definition
\end{definition}

答案1

我将使用两步方法:定义一个内部环境,\newtheorem并在其上定义一个新环境,该新环境检查可选参数,并将它们传递给内部环境和\index

\documentclass{article}
\usepackage{imakeidx} % instead of makeidx, so you don't need to run MakeIndex
\usepackage{xparse}
\usepackage{amsthm}

\NewDocumentCommand{\defined}{om}{%
  {\bfseries #2}%
  \IfNoValueTF{#1}
    {\index{#2}\label{#2}}
    {\index{#1@#2}\label{#1}}%
}

\theoremstyle{definition} % use any style you prefer
\newtheorem{xdefinition}{Definition} % note the "x"

\NewDocumentEnvironment{definition}{oo}
  {\IfNoValueTF{#1}
     % no optional argument to definition
     {\begin{xdefinition}}
     % at least one optional argument
     {\IfNoValueTF{#2}
       % only one optional argument
       {\begin{xdefinition}[#1]\index{Definition!#1}\label{def-#1}}
       % two optional arguments
       {\begin{xdefinition}[#2]\index{Definition!#1@#2}\label{def-#1}}%
    }%
  }
  {\end{xdefinition}}
\makeindex

\begin{document}
\defined[G-invariant]{$G$-invariant}

\begin{definition}[G-invariant][$G$-invariant]
Something
\end{definition}

\begin{definition}[group]
Something
\end{definition}

The concept of $G$-invariant subgroup has been defined in~\ref{def-G-invariant} on page~\pageref{def-G-invariant}.

\printindex
\end{document}

当仅指定一个可选参数时,该参数用于索引条目和标签。

隐式\label命令将引用定义的编号,但它前面有一个def-前缀,以避免重复的标签:在definition使用\defined相同术语的环境主体中,您最终会得到两个相同的标签。

如果要将定义编号添加到索引条目,请将definition定义的块更改为

\NewDocumentEnvironment{definition}{oo}
  {\IfNoValueTF{#1}
     {\begin{xdefinition}}
     {\IfNoValueTF{#2}
       {\begin{xdefinition}[#1]\doindex{Definition!#1@#1}\label{def-#1}}
       {\begin{xdefinition}[#2]\doindex{Definition!#1@#2}\label{def-#1}}%
    }%
  }
  {\end{xdefinition}}
\ExplSyntaxOn
\NewDocumentCommand{\doindex}{m}
 {
  \use:x { \exp_not:N \index { \exp_not:n { #1~ } (\thexdefinition) } }
 }
\ExplSyntaxOff

这将在索引中打印类似

定义
    G-不变(1),1

其中 (1) 表示定义编号,后面照例跟着页码。

相关内容