在另一个问题中(从命令参数中删除数学运算以仅获取字母)这个命令被详细说明,有一个可选参数,用于索引内的排序目的
\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) 表示定义编号,后面照例跟着页码。