summaryrefslogtreecommitdiff
path: root/macros/latex/exptl/thmtools/thm-autoref.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/exptl/thmtools/thm-autoref.dtx')
-rw-r--r--macros/latex/exptl/thmtools/thm-autoref.dtx119
1 files changed, 119 insertions, 0 deletions
diff --git a/macros/latex/exptl/thmtools/thm-autoref.dtx b/macros/latex/exptl/thmtools/thm-autoref.dtx
new file mode 100644
index 0000000000..90a164f1af
--- /dev/null
+++ b/macros/latex/exptl/thmtools/thm-autoref.dtx
@@ -0,0 +1,119 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2008 by Ulrich M. Schwarz
+%
+% This file may be distributed and/or modified under the conditions of
+% the LaTeX Project Public License, version 1.3a.
+% The license can be obtained from
+% http://www.latex-project.org/lppl/lppl-1-3a.txt
+%
+% \fi
+%
+%\iffalse (hide this from DocInput)
+%<*autoref>
+%\fi
+%
+% \pkg{hyperref}'s |\autoref| command does not work well with theorems that
+% share a counter: it'll always think it's a Lemma even if it's a Remark
+% that shares the Lemma counter. Load this package to fix it. No further
+% intervention needed.
+%
+%\StopEventually{}
+% \begin{macrocode}
+
+\RequirePackage{thm-patch, aliasctr, parseargs, keyval}
+
+\let\@xa=\expandafter
+\let\@nx=\noexpand
+
+\newcommand\thmt@autorefsetup{%
+ \@xa\def\csname\thmt@envname autorefname\@xa\endcsname\@xa{\thmt@thmname}%
+ \ifthmt@hassibling
+ \@counteralias{\thmt@envname}{\thmt@sibling}%
+ \@xa\def\@xa\thmt@autoreffix\@xa{%
+ \@xa\let\csname the\thmt@envname\@xa\endcsname
+ \csname the\thmt@sibling\endcsname
+ \def\thmt@autoreffix{}%
+ }%
+ \protected@edef\thmt@sibling{\thmt@envname}%
+ \fi
+}
+\g@addto@macro\thmt@newtheorem@predefinition{\thmt@autorefsetup}%
+\g@addto@macro\thmt@newtheorem@postdefinition{\csname thmt@autoreffix\endcsname}%
+
+\def\thmt@refnamewithcomma #1#2#3,#4,#5\@nil{%
+ \@xa\def\csname\thmt@envname #1utorefname\endcsname{#3}%
+ \ifcsname #2refname\endcsname
+ \csname #2refname\@xa\endcsname\@xa{\thmt@envname}{#3}{#4}%
+ \fi
+}
+\define@key{thmdef}{refname}{\thmt@trytwice{}{%
+ \thmt@refnamewithcomma{a}{c}#1,\textbf{?? (pl. #1)},\@nil
+}}
+\define@key{thmdef}{Refname}{\thmt@trytwice{}{%
+ \thmt@refnamewithcomma{A}{C}#1,\textbf{?? (pl. #1)},\@nil
+}}
+
+
+\ifcsname Autoref\endcsname\else
+\let\thmt@HyRef@testreftype\HyRef@testreftype
+\def\HyRef@Testreftype#1.#2\\{%
+ \ltx@IfUndefined{#1Autorefname}{%
+ \thmt@HyRef@testreftype#1.#2\\%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand\csname#1Autorefname\endcsname
+ \noexpand~%
+ }%
+ }%
+}
+
+
+\let\thmt@HyPsd@@autorefname\HyPsd@@autorefname
+\def\HyPsd@@Autorefname#1.#2\@nil{%
+ \tracingall
+ \ltx@IfUndefined{#1Autorefname}{%
+ \thmt@HyPsd@@autorefname#1.#2\@nil
+ }{%
+ \csname#1Autorefname\endcsname\space
+ }%
+}%
+\def\Autoref{%
+ \parse{%
+ {\parseFlag*{\def\thmt@autorefstar{*}}{\let\thmt@autorefstar\@empty}}%
+ {\parseMand{%
+ \bgroup
+ \let\HyRef@testreftype\HyRef@Testreftype
+ \let\HyPsd@@autorefname\HyPsd@@Autorefname
+ \@xa\autoref\thmt@autorefstar{##1}%
+ \egroup
+ \let\@parsecmd\@empty
+ }}%
+ }%
+}
+\fi % ifcsname Autoref
+
+% not entirely appropriate here, but close enough:
+\AtBeginDocument{%
+ \@ifpackageloaded{nameref}{%
+ \addtotheorempostheadhook{%
+ \expandafter\NR@gettitle\expandafter{\thmt@shortoptarg}%
+ }}{}
+}
+
+\AtBeginDocument{%
+ \@ifpackageloaded{cleveref}{%
+ \@ifpackagelater{cleveref}{2010/04/30}{%
+ % OK, new enough
+ }{%
+ \PackageWarningNoLine{thmtools}{%
+ Your version of cleveref is too old!\MessageBreak
+ Update to version 0.16.1 or later%
+ }
+ }
+ }{}
+}
+% \end{macrocode}
+%\iffalse
+%</autoref>
+%\fi