GeneralUsing Equation Tags as Hyperlinks to Endnotes

LaTeX specific issues not fitting into one of the other forums of this category.
Post Reply
bodhi
Posts: 1
Joined: Sun Mar 27, 2016 7:13 pm

Using Equation Tags as Hyperlinks to Endnotes

Post by bodhi »

Hallo LaTeX-Gemeinde,

my goal:

I want my equation tags to function as clickable links to endnotes, where the latters' counters should look exactly like the equation tags they refer to (e.g. if the equation tag was (1.2), then so should be the counter before the endnote text).

my efforts so far:

To my knowledge, I have two main options as regards endnotes: 'endnotes' and 'enotez'. My first try was with 'endnotes', where I included the following hack I found in the inet to make 'endnotes' comply with 'hyperref':

Code: Select all

%%% hyperendnotes.sty
\makeatletter
\newif\ifenotelinks
\newcounter{Hendnote}
% Redefining portions of endnotes-package:
\let\savedhref\href
\let\savedurl\url
\def\endnotemark{%
\@ifnextchar[\@xendnotemark{%
\stepcounter{endnote}%
\protected@xdef\@theenmark{\theendnote}%
\protected@xdef\@theenvalue{\number\c@endnote}%
\@endnotemark
}%
}%
\def\@xendnotemark[#1]{%
\begingroup\c@endnote#1\relax
\unrestored@protected@xdef\@theenmark{\theendnote}%
\unrestored@protected@xdef\@theenvalue{\number\c@endnote}%
\endgroup
\@endnotemark
}%
\def\endnotetext{%
\@ifnextchar[\@xendnotenext{%
\protected@xdef\@theenmark{\theendnote}%
\protected@xdef\@theenvalue{\number\c@endnote}%
\@endnotetext
}%
}%
\def\@xendnotenext[#1]{%
\begingroup
\c@endnote=#1\relax
\unrestored@protected@xdef\@theenmark{\theendnote}%
\unrestored@protected@xdef\@theenvalue{\number\c@endnote}%
\endgroup
\@endnotetext
}%
\def\endnote{%
\@ifnextchar[\@xendnote{%
\stepcounter{endnote}%
\protected@xdef\@theenmark{\theendnote}%
\protected@xdef\@theenvalue{\number\c@endnote}%
\@endnotemark\@endnotetext
}%
}%
\def\@xendnote[#1]{%
\begingroup
\c@endnote=#1\relax
\unrestored@protected@xdef\@theenmark{\theendnote}%
\unrestored@protected@xdef\@theenvalue{\number\c@endnote}%
\show\@theenvalue
\endgroup
\@endnotemark\@endnotetext
}%
\def\@endnotemark{%
\leavevmode
\ifhmode
\edef\@x@sf{\the\spacefactor}\nobreak
\fi
\ifenotelinks
\expandafter\@firstofone
\else
\expandafter\@gobble
\fi
{%
\Hy@raisedlink{%
\hyper@@anchor{Hendnotepage.\@theenvalue}{\empty}%
}%
}%
\hyper@linkstart{link}{Hendnote.\@theenvalue}%
\makeenmark
\hyper@linkend
\ifhmode
\spacefactor\@x@sf
\fi
\relax
}%
\long\def\@endnotetext#1{%
\if@enotesopen
\else
\@openenotes
\fi
\immediate\write\@enotes{%
\@doanenote{\@theenmark}{\@theenvalue}%
}%
\begingroup
\def\next{#1}%
\newlinechar='40
\immediate\write\@enotes{\meaning\next}%
\endgroup
\immediate\write\@enotes{%
\@endanenote
}%
}%
\def\theendnotes{%
\immediate\closeout\@enotes
\global\@enotesopenfalse
\begingroup
\makeatletter
\edef\@tempa{`\string>}%
\ifnum\catcode\@tempa=12
\let\@ResetGT\relax
\else
\edef\@ResetGT{\noexpand\catcode\@tempa=\the\catcode\@tempa}%
\@makeother\>%
\fi
\def\@doanenote##1##2##3>{%
\def\@theenmark{##1}%
\def\@theenvalue{##2}%
\par
\smallskip %<-small vertical gap between endnotes
\begingroup
\def\href{\expandafter\savedhref}%
\def\url{\expandafter\savedurl}%
\@ResetGT
\edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}%
\enoteformat
}%
\def\@endanenote{%
\par\endgroup
}%
% Redefine, how numbers are formatted in the endnotes-section:
\renewcommand*\@makeenmark{%
\hbox{\normalfont\@theenmark~}%
}%
% header of endnotes-section
\enoteheading
% font-size of endnotes
\enotesize
\input{\jobname.ent}%
\endgroup
}%
\def\enoteformat{%
\rightskip\z@
\leftskip1.8em
\parindent\z@
\leavevmode\llap{%
\setcounter{Hendnote}{\@theenvalue}%
\addtocounter{Hendnote}{-1}%
\refstepcounter{Hendnote}%
\ifenotelinks
\expandafter\@secondoftwo
\else
\expandafter\@firstoftwo
\fi
{\@firstofone}%
{\hyperlink{Hendnotepage.\@theenvalue}}%
{\makeenmark}%
}%
}%
% stop redefining portions of endnotes-package:
\makeatother
% Toggle switch in order to turn on/off back-links in the
% endnote-section:
\enotelinkstrue
%\enotelinksfalse

Now comes my minimal example with 'endnotes':

Code: Select all

\documentclass{article}

\usepackage[backref = page, hyperfootnotes, colorlinks = true, linkcolor = blue]{hyperref}
\usepackage{endnotes}

\usepackage{hyperendnotes} % Hack für 'endnotes' obendrüber

\usepackage{mathtools}
\numberwithin{equation}{section}
\numberwithin{endnote}{section}

\usepackage{lastpage}
\newcommand\notelink[1]{\hyperref[LastPage]{(#1)}}
\newtagform{notetag}[\notelink]{}{}
\usetagform{notetag}

\renewcommand\notesname{Formula Sources \vspace{.25cm}}
\renewcommand\makeenmark{(\theenmark)\hspace{.15cm}}

\begin{document}

\begin{section}{Weltgleichung}

	\begin{equation} \refstepcounter{endnote} \endnotetext{Weltgleichung I }
	  a + b = c
	\end{equation}

\newpage 

	\begin{equation} \refstepcounter{endnote} \endnotetext{Weltgleichung II}
	  1 + 2 = 3
	\end{equation}
	
\end{section}

\clearpage

\theendnotes
	
\end{document}
This solution has two deficits:
  • I) The equation tags link to the page containing the endnotes, but not the endnotes themselves (not so important).
    II) The endnote backlinks do not refer back to the equations where their endnote texts were defined (very bad).
Here comes the second 'solution' using 'enotez':

Code: Select all

\documentclass{article}

\usepackage[hyperfootnotes, colorlinks = true, linkcolor = blue]{hyperref}
\usepackage[backref]{enotez}

\renewcommand\enotezwritemark[1]{}

\usepackage{mathtools}
\numberwithin{equation}{section}

\usepackage{lastpage}
\newcommand\notelink[1]{\hyperref[LastPage]{(#1)}}
\newtagform{notetag}[\notelink]{}{}
\usetagform{notetag}


\renewcommand*\enmark[1]{#1}
\DeclareInstance{enotez-list}{plain}{paragraph}{number = (\enmark{#1})}

\begin{document}

\begin{section}{Weltgleichung}
	
	\begin{equation} \endnote{Weltgleichung I}
	  a + b = c
	\end{equation}
\end{section}

\newpage

\begin{section}{Weltgleichung zum Zweiten}
	
	\begin{equation} \endnote{Weltgleichung II}
	1 + 2 = 3
	\end{equation}
\end{section}

\clearpage

\printendnotes
	
\end{document}
This approach has the problem that the endnote counters do not coincide with the equation counters (very bad).
After consultation with package maintainer Clemens Niederberger this is not a trivial problem to solve since 'enotez' does not employ a LaTeX counter but a 'expl3 int variable' named '\g__enotez_endnote_mark_int' (no idea why). Hence, I am totally clueless how to change this.

Can someone come up with an elegant solution to this? Otherwise, I would need to dive deep into the intestines of TeX, which I would like to avoid.

Thank you and best regards,
bodhisat

Recommended reading 2024:

LaTeXguide.org • LaTeX-Cookbook.net • TikZ.org

NEW: TikZ book now 40% off at Amazon.com for a short time.

Johannes_B
Site Moderator
Posts: 4182
Joined: Thu Nov 01, 2012 4:08 pm

Using Equation Tags as Hyperlinks to Endnotes

Post by Johannes_B »

The smart way: Calm down and take a deep breath, read posts and provided links attentively, try to understand and ask if necessary.
Post Reply