Как избежать скобок и квадратных скобок в заголовке в amsthm при использовании только \cite?

Как избежать скобок и квадратных скобок в заголовке в amsthm при использовании только \cite?

Это продолжениеэтот вопросиВот этот. По сути, я хотел бы избежать последовательности ([...]) в необязательных аргументах теоремы, как показано ниже:

Чтобы получить этот результат, как предлагаетэтот ответ, я использовал \patchcmdмакрос пакета etoolbox. Однако мне приходится переключаться с \patchcmd{\thmhead}{(#3)}{#3}{}{} на \patchcmd{\thmhead}{#3}{(#3)}{}{}при каждом изменении, что не очень удобно для большой книги со множеством теорем. Поэтому я задавался вопросом, возможно ли использовать одну команду. Обратите внимание, что я использую две формы \cite{}и \cite[]{}, что немного усложняет ситуацию.

\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}

решение1

Вы можете сопоставить аргумент с регулярным выражением, которое представляет собой , \citeза которым следует ноль или одно вхождение [...]и {...}.

\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}

Лучше использовать новый стиль теоремы, если только вы не хотите изменять стандартную \thmheadкоманду.

введите описание изображения здесь

решение2

Этот вопрос уже немного устарел, но я решал ту же проблему, поэтому подумал, что стоит опубликовать, как я это сделал. Было бы неплохо каким-то образом просто пометить, следует ли добавлять скобки или нет, но я обошел это вручную.

Решение 0:

Оставьте поправку в силе и добавьте свои собственные скобки.

\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}

Конечно, это теряет часть преимуществ макросов LaTeX, которые позволяют переопределить внешний вид в одном месте и применить его везде — если вы вдруг решите заключить примечания к теореме в скобки каким-то другим способом, вам придется вручную все изменить. Так что небольшое улучшение:

Решение 1:

Определите макрос.

\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}

Связанный контент