我如何重新定义定理样式,以便我可以提供两个“可选”参数(\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}
结果: