
Quero que os nomes dos teoremas apareçam na margem. Tentei usar as notas de margem para fazer isso, mas não consegui.
Aqui está uma foto do que estou tentando fazer. A linha superior é como o ambiente do teorema funciona por padrão, abaixo está o que eu gostaria.
Aqui está o que tentei fazer, embora deva admitir que não tenho um bom entendimento de como fazer algo assim
\newenivorment{margintheorem}[#2]{
\begin{theorem}[\marginnote{#2}]
\end{theorem}
}
Responder1
Você pode definir indiretamente o theorem
ambiente:
\documentclass{article}
\usepackage{amsthm,marginnote,xparse}
\newtheorem{theoreminner}{Theorem}
\NewDocumentEnvironment{theorem}{o}
{\theoreminner\IfValueT{#1}{\marginnote{\normalfont\footnotesize#1}}}
{\endtheoreminner}
\reversemarginpar
\begin{document}
\begin{theorem}
This theorem has no attribution.
\end{theorem}
\begin{theorem}[theorem name]
This theorem has a name.
\end{theorem}
\end{document}
Responder2
Sua pergunta carece de alguns detalhes importantes e, em particular, você não especifica se está ou não usando um pacote específico para definir seus ambientes “semelhantes a teoremas”. Presumo que você esteja usando amsthm
.
A solução a seguir penetra diretamente na amsthm
definição do \@begintheorem
comando e, portanto, aplica-se automaticamente a todos os tipos de ambiente “semelhante a um teorema” (proposições, lemas, definições…). É baseado no uso do \marginpar
comando do kernel LaTeX: isso torna as coisas um pouco mais complicadas, porque este comando deve ser emitido “no modo de parágrafo externo”. Na verdade, escrevi o código exatamente com o intuito de mostrar que uma solução baseada no \marginpar
comando original era possível.
% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly
% declare the paper format.
\usepackage[T1]{fontenc} % Not always necessary, but recommended.
% End of standard header. What follows pertains to the problem at hand.
% \usepackage{amsmath} % not essential, but you probably want it too
\usepackage{amsthm}
\usepackage{etoolbox} % for "\patchcmd"/"\pretocmd"
%%%%%%%% BEGIN WIZARDRY %%%%%%%%
\makeatletter
\wlog{****************************************}
\patchcmd{\@begintheorem}{% search for:
\@ifempty{#3}{\let\thmnote\@gobble}{\let\thmnote\@iden}%
\thm@swap\swappedhead\thmhead{#1}{#2}{#3}%
}{% replace with:
\let\thmnote\@gobble
\thm@swap\swappedhead\thmhead{#1}{#2}{}%
}{% execute if succeeded:
\wlog{>>> 1st patch succeeded.}
}{% execute if failed:
\wlog{>>> 1st patch FAILED!}
}
\pretocmd{\@begintheorem}{% prepended code:
\@ifnotempty{#3}{\def\@thm@marginal@note@text{#3}}%
}{% execute if succeeded:
\wlog{>>> 2nd patch succeeded.}
}{% execute if failed:
\wlog{>>> 2nd patch FAILED!}
}
\wlog{****************************************}
\newcommand*\@thm@marginal@note@text{}
\newcommand*\@thm@marginal@note@helper{%
\begingroup \setbox\z@ \lastbox \endgroup
\marginnote{\@thm@marginal@note@text}%
}
\dth@everypar = \expandafter {%
\expandafter \@thm@marginal@note@helper
\the \dth@everypar
}
\makeatother
%%%%%%%% END WIZARDRY %%%%%%%%
\newcommand*{\marginnote}[1]{%
\marginpar
[\footnotesize\raggedleft #1]%
{\footnotesize\raggedright #1}%
}
\reversemarginpar % ?
\newtheorem{theorem}{Theorem}
\newtheorem{lemma} {Lemma}
\theoremstyle{definition}
\newtheorem{defin}{Definition}
\begin{document}
This text comes before the first definition.
\begin{defin}[Important definition]
A definition is \textbf{important} if and only if it is not
unimportant.
\end{defin}
And, of course:
\begin{defin}
An \textbf{unimportant} definition is one that is not important.
\end{defin}
Now a theorem:
\begin{theorem}[Important Theorem]
All theorems are important, but some theorems are more important
than others.
\end{theorem}
The proof rests on the following
\begin{lemma}[Important lemma]
Not all theorems (or lemmas) are equally important.
\end{lemma}
An unimportant theorem:
\begin{theorem}
Blah blah blah\ldots
\end{theorem}
And an unimportant lemma:
\begin{lemma}
Blah blah blah\ldots
\end{lemma}
Here is a little more text.
\end{document}
Observe o código “vintage” antiquado e seu uso de \expandafter
… ;-)
A saída: