
Dies ist eine Fortsetzung vondiese FrageUndDieses hier. Grundsätzlich möchte ich die Sequenz ([...]) in den optionalen Argumenten des Theorems vermeiden, wie unten gezeigt:

Um dieses Ergebnis zu erhalten, wie vorgeschlagen vondiese Antwort\patchcmd
habe ich das Makro des Pakets verwendet etoolbox
. Allerdings muss ich bei jeder Änderung von
\patchcmd{\thmhead}{(#3)}{#3}{}{}
auf umschalten \patchcmd{\thmhead}{#3}{(#3)}{}{}
, was bei einem großen Buch mit vielen Theoremen nicht sehr praktisch ist. Daher habe ich mich gefragt, ob ein einzelner Befehl möglich wäre. Beachten Sie, dass ich die beiden Formen \cite{}
und verwende \cite[]{}
, was die Dinge etwas komplexer macht.
\documentclass[10pt]{article}
\usepackage[]{amsmath, amssymb, amsthm}
\newtheorem{theorem}{Theorem}[section]
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\begin{document}
\section{Pythagoras' theorem}
\noindent Correct versions:
\begin{theorem}[Pythagoras]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[Pythagoras, \cite{Pythagoras}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[Pythagoras, {\cite[p.\ 345]{Pythagoras}}]
$a^2 + b^2 = c^2$.
\end{theorem}
\patchcmd{\thmhead}{(#3)}{#3}{}{}
\begin{theorem}[\cite{Pythagoras}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[{\cite[p.\ 21]{Pythagoras}}]
$a^2 + b^2 = c^2$.
\end{theorem}
\noindent To be avoided:
\patchcmd{\thmhead}{#3}{(#3)}{}{}
\begin{theorem}[\cite{Pythagoras}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[{\cite[p.\ 21]{Pythagoras}}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{thebibliography}{HD}
\bibitem[1]{Pythagoras}
Pythagoras' theorem.
\end{thebibliography}
\end{document}
Antwort1
Sie können das Argument mit einem regulären Ausdruck abgleichen, der darstellt, \cite
gefolgt von null oder einem Vorkommen von [...]
und von {...}
.
\documentclass[10pt]{article}
\usepackage[]{amsmath, amssymb, amsthm}
% see https://tex.stackexchange.com/a/17555/4427 for the parameters
\newtheoremstyle{jepinplain}
{\topsep} % ABOVESPACE
{\topsep} % BELOWSPACE
{\itshape} % BODYFONT
{0pt} % INDENT (empty value is the same as 0pt)
{\bfseries} % HEADFONT
{.} % HEADPUNCT
{5pt plus 1pt minus 1pt} % HEADSPACE
{\thmname{#1}\thmnumber{ #2}\thmnote{{\normalfont\ \checkcite{#3}}}} % CUSTOM-HEAD-SPEC
\ExplSyntaxOn
\NewDocumentCommand{\checkcite}{m}
{
\regex_match:nnTF {\A \c{cite}(?:\[[^]]*\])?\{.*\} \Z} { #1 }
{% only \cite
#1
}
{ (#1) }
}
\ExplSyntaxOff
\theoremstyle{jepinplain}
\newtheorem{theorem}{Theorem}[section]
\begin{document}
\section{Pythagoras' theorem}
\noindent Correct versions:
\begin{theorem}
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[Pythagoras]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[Pythagoras, \cite{Pythagoras}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[Pythagoras, {\cite[p.\ 345]{Pythagoras}}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[\cite{Pythagoras}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[{\cite[p.\ 21]{Pythagoras}}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{thebibliography}{1}
\bibitem[1]{Pythagoras}
Pythagoras' theorem.
\end{thebibliography}
\end{document}
Ein neuer Theoremstil ist besser, es sei denn, Sie möchten den Standardbefehl ändern \thmhead
.
Antwort2
Diese Frage ist jetzt schon etwas älter, aber ich habe mich mit demselben Problem befasst und dachte, ich poste, wie ich es gemacht habe. Es wäre schön, wenn man irgendwie einfach kennzeichnen könnte, ob Klammern hinzugefügt werden sollen oder nicht, aber ich habe es manuell umgangen.
Lösung 0:
Lassen Sie die Änderung dauerhaft bestehen und fügen Sie Ihre eigenen Klammern hinzu.
\patchcmd{\thmhead}{(#3)}{#3}{}{}
\begin{theorem}[(Pythagoras)]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[(Pythagoras, \cite{Pythagoras})]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[\cite{Pythagoras}]
$a^2 + b^2 = c^2$.
\end{theorem}
Natürlich geht dadurch ein Teil des Vorteils von LaTeX-Makros verloren, nämlich dass Sie ein Erscheinungsbild an einer Stelle neu definieren und es überall anwenden können – wenn Sie sich plötzlich dazu entschließen, die Theoremnotizen auf andere Weise einzuklammern, müssen Sie sie alle manuell durchgehen und ändern. Eine kleine Verbesserung ist also:
Lösung 1:
Definieren Sie ein Makro.
\patchcmd{\thmhead}{(#3)}{#3}{}{}
\newcommand{\notewrap}[1]{(#1)}
\begin{theorem}[\notewrap{Pythagoras}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[\notewrap{Pythagoras, \cite{Pythagoras}}]
$a^2 + b^2 = c^2$.
\end{theorem}
\begin{theorem}[\cite{Pythagoras}]
$a^2 + b^2 = c^2$.
\end{theorem}