通过引用将定理标题扩展为标题

通过引用将定理标题扩展为标题

我如何重新定义定理样式,以便我可以提供两个“可选”参数(\begin{Definition}[title]{}如果不需要引用,我可以使用。)

猜测我对使用的包非常灵活,现在我使用\listtheorems{Definition}ntheorem但我不确定是否要保留它。

\documentclass{article}

\usepackage[amsthm,thmmarks,hyperref]{ntheorem}

\theoremstyle{definition}
\newtheorem{Definition}{Definition}[section]

\begin{document}
\begin{Definition}[title]
content
\end{Definition}

%goal:
\noindent\textbf{Definition 0.1 (title) \cite{testA}.} content

\cite{testA} %should not be bold here, so redefining \@cite wouldn't work?!

\begin{thebibliography}{9}
\bibitem{testA} Author A. Title A. 2019
\end{thebibliography}
\end{document}

答案1

您可以使用参数模式语法,\def使用分隔符将可选参数一分为二。从概念上讲,这不太清晰(最好使用第二个可选参数),并且存在实际问题(您不能在标题或引用键中使用分隔符),但对于预期的应用程序来说,这可能已经足够了。

在下面的 MWE 中,命令\thcite的定义是将 a |、一些字符、另一个|、一些字符和另一个作为参数|。在新定理样式的定义中,有一个测试(使用包\IfSubStr中的)来查看可选参数中xstring是否有。如果是,则使用该命令(在参数的开头和结尾添加字符),如果不是,则仅在括号之间重复参数。没有可选参数的定义由新定理样式的第一部分处理,它仅以粗体打印标签名称和编号。|\thcite|

如果您想使用,\listtheorems那么最简单的解决方案就是对带有参考的标题使用带星号的定理(未出现在列表中),并在列表中添加具有正确格式的列表条目的单独行。

代码:

\documentclass{article}
\usepackage[colorlinks,allcolors=black]{hyperref}
\usepackage[amsthm,thmmarks,hyperref]{ntheorem}
\usepackage{xstring}

% addtheoremline for use with \listtheorems
\def\thcite|#1|#2|{(#1) \cite{#2}\addtheoremline{citedef}{#1 \cite{#2}}}

\makeatletter
\newtheoremstyle{citedef}%
{\item[\normalfont\bfseries \hskip\labelsep ##1 ##2\theorem@separator]\normalfont}%
{\item[\normalfont\bfseries \hskip\labelsep ##1 ##2 \IfSubStr{##3}{|}{\thcite|##3|}{(##3)}.\theorem@separator]\normalfont}%
\makeatother

\theoremstyle{citedef}

\newtheorem{citedef}{Definition}[section]

\begin{document}
\begin{citedef}
content
\end{citedef}

\begin{citedef}[title]
content
\end{citedef}

% starred environment for use with \listtheorems
\begin{citedef*}[title|testA]
content
\end{citedef*}

\cite{testA} %should not be bold here

\listtheorems{citedef}

\begin{thebibliography}{9}
\bibitem{testA} Author A. Title A. 2019
\end{thebibliography}
\end{document}

结果:

在此处输入图片描述

相关内容