Cross-referencing forth and backCustomize backref similar to WikipediaBack link all headings with respective...
What's the difference between a cart and a wagon?
Casually inserting sexuality
Did 5.25" floppies undergo a change in magnetic coating?
Can I become debt free or should I file for bankruptcy? How do I manage my debt and finances?
Replacement ford fiesta radiator has extra hose
Find the next monthly expiration date
What is the difference between throw e and throw new Exception(e)?
Multiplication via squaring and addition
How to count occurrences of Friday 13th
Why do members of Congress in committee hearings ask witnesses the same question multiple times?
Book where the good guy lives backwards through time and the bad guy lives forward
Is there a frame of reference in which I was born before I was conceived?
Does music exist in Panem? And if so, what kinds of music?
Are small insurances worth it
CBP Reminds Travelers to Allow 72 Hours for ESTA. Why?
When was drinking water recognized as crucial in marathon running?
Waiting for the gravy at a dinner table
Exponential growth/decay formula: what happened to the other constant of integration?
What is this waxed root vegetable?
How to deny access to SQL Server to certain login over SSMS, but allow over .Net SqlClient Data Provider
How to tighten battery clamp?
Must a tritone substitution use a dominant seventh chord?
Is my plan for fixing my water heater leak bad?
Where is this triangular-shaped space station from?
Cross-referencing forth and back
Customize backref similar to WikipediaBack link all headings with respective TOC entrycustom counter and cross-referencinghyperref and cross-referencingFootnotes, Cross-Referencing and UpdatingCross-referencing specific wordsAppendix and cross-referencingCross-referencing between chaptersCross referencing a figureCross-referencing and chemnumCross-referencing multiple itemsCross-referencing external data
I will try to describe my question as clear as possible. First a working example.
documentclass[french,11pt]{article}
usepackage[french]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{kpfonts}
usepackage{geometry}
geometry{ a4paper, total={170mm,257mm}, left=20mm, top=20mm}
usepackage{blindtext}
setlength{parskip}{1.2ex} setlength{parindent}{0em} clubpenalty = 10000 widowpenalty = 10000
usepackage{graphicx,bm,url, amsfonts, latexsym, verbatim, xspace, setspace,mathrsfs,marvosym,wasysym,amsmath, amssymb}
usepackage{caption}
usepackage[caption=false]{subfig}
usepackage{epstopdf}
usepackage[colorlinks=true, linkcolor=red, urlcolor=blue, pdftitle={article}, pdfauthor={DSA}]{hyperref}
usepackage{authblk}
begin{document}
title{BlaBlaBla} author[,1]{Dimitriosthanks{texttt{url{dimitrios.@X.fr}}}} %
date{}
clearpagemaketitle thispagestyle{empty}
begin{itemize}
item blindtext
See reference ref{foo3}.
item blindtext
See reference ref{foo1}.
item blindtext
See reference ref{foo2}.
end{itemize}
newpage
blindtext
begin{enumerate}
itemlabel{foo1} textbf{The foo1 reference}
itemlabel{foo2} blindtext
textbf{The foo2 reference}
itemlabel{foo3} textbf{The foo3 reference}.
end{enumerate}
end{document}
When I click to the link, I move to the associated reference. What I want to achieve is by clicking to an small triangle or a vertical-point-upwards arrow next to the reference to move backwards to the text that the link is. That is, like the forth-and-back effect that wikipedia articles have (see Figure below).
cross-referencing
add a comment |
I will try to describe my question as clear as possible. First a working example.
documentclass[french,11pt]{article}
usepackage[french]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{kpfonts}
usepackage{geometry}
geometry{ a4paper, total={170mm,257mm}, left=20mm, top=20mm}
usepackage{blindtext}
setlength{parskip}{1.2ex} setlength{parindent}{0em} clubpenalty = 10000 widowpenalty = 10000
usepackage{graphicx,bm,url, amsfonts, latexsym, verbatim, xspace, setspace,mathrsfs,marvosym,wasysym,amsmath, amssymb}
usepackage{caption}
usepackage[caption=false]{subfig}
usepackage{epstopdf}
usepackage[colorlinks=true, linkcolor=red, urlcolor=blue, pdftitle={article}, pdfauthor={DSA}]{hyperref}
usepackage{authblk}
begin{document}
title{BlaBlaBla} author[,1]{Dimitriosthanks{texttt{url{dimitrios.@X.fr}}}} %
date{}
clearpagemaketitle thispagestyle{empty}
begin{itemize}
item blindtext
See reference ref{foo3}.
item blindtext
See reference ref{foo1}.
item blindtext
See reference ref{foo2}.
end{itemize}
newpage
blindtext
begin{enumerate}
itemlabel{foo1} textbf{The foo1 reference}
itemlabel{foo2} blindtext
textbf{The foo2 reference}
itemlabel{foo3} textbf{The foo3 reference}.
end{enumerate}
end{document}
When I click to the link, I move to the associated reference. What I want to achieve is by clicking to an small triangle or a vertical-point-upwards arrow next to the reference to move backwards to the text that the link is. That is, like the forth-and-back effect that wikipedia articles have (see Figure below).
cross-referencing
If you are looking for a bibliography solution and can usebiblatex
you could have a look at tex.stackexchange.com/q/396713/35864.
– moewe
14 hours ago
@moewe Thanks, but I don't want a bibliography solution. It was just for provide insight to I want to achieve that I include the image from wikipedia. Sorry for the misunderstanding.
– dimitris
14 hours ago
This is abibliographies
- related question and not about the cross-referencing between documents or within section/equation numbers. Thebackref
option ofhyperref
should do what you request
– Christian Hupfer
14 hours ago
@ChristianHupfer See my comment above. (Thanks for your feedback).
– dimitris
14 hours ago
@ChristianHupfer I rolled back your edit, because the OP confirmed that while the example screenshot was of a bibliography, the intended use case is not a backref forcite
but for the normallabel
-ref
mechanism.
– moewe
12 hours ago
add a comment |
I will try to describe my question as clear as possible. First a working example.
documentclass[french,11pt]{article}
usepackage[french]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{kpfonts}
usepackage{geometry}
geometry{ a4paper, total={170mm,257mm}, left=20mm, top=20mm}
usepackage{blindtext}
setlength{parskip}{1.2ex} setlength{parindent}{0em} clubpenalty = 10000 widowpenalty = 10000
usepackage{graphicx,bm,url, amsfonts, latexsym, verbatim, xspace, setspace,mathrsfs,marvosym,wasysym,amsmath, amssymb}
usepackage{caption}
usepackage[caption=false]{subfig}
usepackage{epstopdf}
usepackage[colorlinks=true, linkcolor=red, urlcolor=blue, pdftitle={article}, pdfauthor={DSA}]{hyperref}
usepackage{authblk}
begin{document}
title{BlaBlaBla} author[,1]{Dimitriosthanks{texttt{url{dimitrios.@X.fr}}}} %
date{}
clearpagemaketitle thispagestyle{empty}
begin{itemize}
item blindtext
See reference ref{foo3}.
item blindtext
See reference ref{foo1}.
item blindtext
See reference ref{foo2}.
end{itemize}
newpage
blindtext
begin{enumerate}
itemlabel{foo1} textbf{The foo1 reference}
itemlabel{foo2} blindtext
textbf{The foo2 reference}
itemlabel{foo3} textbf{The foo3 reference}.
end{enumerate}
end{document}
When I click to the link, I move to the associated reference. What I want to achieve is by clicking to an small triangle or a vertical-point-upwards arrow next to the reference to move backwards to the text that the link is. That is, like the forth-and-back effect that wikipedia articles have (see Figure below).
cross-referencing
I will try to describe my question as clear as possible. First a working example.
documentclass[french,11pt]{article}
usepackage[french]{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{kpfonts}
usepackage{geometry}
geometry{ a4paper, total={170mm,257mm}, left=20mm, top=20mm}
usepackage{blindtext}
setlength{parskip}{1.2ex} setlength{parindent}{0em} clubpenalty = 10000 widowpenalty = 10000
usepackage{graphicx,bm,url, amsfonts, latexsym, verbatim, xspace, setspace,mathrsfs,marvosym,wasysym,amsmath, amssymb}
usepackage{caption}
usepackage[caption=false]{subfig}
usepackage{epstopdf}
usepackage[colorlinks=true, linkcolor=red, urlcolor=blue, pdftitle={article}, pdfauthor={DSA}]{hyperref}
usepackage{authblk}
begin{document}
title{BlaBlaBla} author[,1]{Dimitriosthanks{texttt{url{dimitrios.@X.fr}}}} %
date{}
clearpagemaketitle thispagestyle{empty}
begin{itemize}
item blindtext
See reference ref{foo3}.
item blindtext
See reference ref{foo1}.
item blindtext
See reference ref{foo2}.
end{itemize}
newpage
blindtext
begin{enumerate}
itemlabel{foo1} textbf{The foo1 reference}
itemlabel{foo2} blindtext
textbf{The foo2 reference}
itemlabel{foo3} textbf{The foo3 reference}.
end{enumerate}
end{document}
When I click to the link, I move to the associated reference. What I want to achieve is by clicking to an small triangle or a vertical-point-upwards arrow next to the reference to move backwards to the text that the link is. That is, like the forth-and-back effect that wikipedia articles have (see Figure below).
cross-referencing
cross-referencing
edited 12 hours ago
moewe
92.6k10115351
92.6k10115351
asked 14 hours ago
dimitrisdimitris
354112
354112
If you are looking for a bibliography solution and can usebiblatex
you could have a look at tex.stackexchange.com/q/396713/35864.
– moewe
14 hours ago
@moewe Thanks, but I don't want a bibliography solution. It was just for provide insight to I want to achieve that I include the image from wikipedia. Sorry for the misunderstanding.
– dimitris
14 hours ago
This is abibliographies
- related question and not about the cross-referencing between documents or within section/equation numbers. Thebackref
option ofhyperref
should do what you request
– Christian Hupfer
14 hours ago
@ChristianHupfer See my comment above. (Thanks for your feedback).
– dimitris
14 hours ago
@ChristianHupfer I rolled back your edit, because the OP confirmed that while the example screenshot was of a bibliography, the intended use case is not a backref forcite
but for the normallabel
-ref
mechanism.
– moewe
12 hours ago
add a comment |
If you are looking for a bibliography solution and can usebiblatex
you could have a look at tex.stackexchange.com/q/396713/35864.
– moewe
14 hours ago
@moewe Thanks, but I don't want a bibliography solution. It was just for provide insight to I want to achieve that I include the image from wikipedia. Sorry for the misunderstanding.
– dimitris
14 hours ago
This is abibliographies
- related question and not about the cross-referencing between documents or within section/equation numbers. Thebackref
option ofhyperref
should do what you request
– Christian Hupfer
14 hours ago
@ChristianHupfer See my comment above. (Thanks for your feedback).
– dimitris
14 hours ago
@ChristianHupfer I rolled back your edit, because the OP confirmed that while the example screenshot was of a bibliography, the intended use case is not a backref forcite
but for the normallabel
-ref
mechanism.
– moewe
12 hours ago
If you are looking for a bibliography solution and can use
biblatex
you could have a look at tex.stackexchange.com/q/396713/35864.– moewe
14 hours ago
If you are looking for a bibliography solution and can use
biblatex
you could have a look at tex.stackexchange.com/q/396713/35864.– moewe
14 hours ago
@moewe Thanks, but I don't want a bibliography solution. It was just for provide insight to I want to achieve that I include the image from wikipedia. Sorry for the misunderstanding.
– dimitris
14 hours ago
@moewe Thanks, but I don't want a bibliography solution. It was just for provide insight to I want to achieve that I include the image from wikipedia. Sorry for the misunderstanding.
– dimitris
14 hours ago
This is a
bibliographies
- related question and not about the cross-referencing between documents or within section/equation numbers. The backref
option of hyperref
should do what you request– Christian Hupfer
14 hours ago
This is a
bibliographies
- related question and not about the cross-referencing between documents or within section/equation numbers. The backref
option of hyperref
should do what you request– Christian Hupfer
14 hours ago
@ChristianHupfer See my comment above. (Thanks for your feedback).
– dimitris
14 hours ago
@ChristianHupfer See my comment above. (Thanks for your feedback).
– dimitris
14 hours ago
@ChristianHupfer I rolled back your edit, because the OP confirmed that while the example screenshot was of a bibliography, the intended use case is not a backref for
cite
but for the normal label
-ref
mechanism.– moewe
12 hours ago
@ChristianHupfer I rolled back your edit, because the OP confirmed that while the example screenshot was of a bibliography, the intended use case is not a backref for
cite
but for the normal label
-ref
mechanism.– moewe
12 hours ago
add a comment |
2 Answers
2
active
oldest
votes
Here is an etoolbox
-based implementation of a backref-able ref
.
Use backrefref{<label>}
to create a ref
erence to a <label>
that can will be linked back to. Use backreflabel{<label>}
to set a label and output the backref marks. Note that backreflabel
should be called directly where the <label>
anchor attaches. Otherwise you may end up with incorrect link targets.
The solution works by writing info to the .aux
file, so it may will need at least two LaTeX runs.
documentclass[french,11pt]{article}
usepackage{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{blindtext}
usepackage{etoolbox}
usepackage[colorlinks]{hyperref}
newcommand*{backrefmarker}{$uparrow$}
newcommand*{backrefmultformat}{textsuperscript}
makeatletter
newcommand*{br@currlabels}{}
newcommand*{br@linklabels}{}
newcommand*{backrefref}[1]{%
listgadd{br@currlabels}{#1}%
ifltxcounter{br@curr@#1}
{}
{newcounter{br@curr@#1}
csgdef{thebr@curr@#1}{alph{br@curr@#1}}}%
{refstepcounter{br@curr@#1}%
label{br@#1@thevalue{br@curr@#1}}}%
ref{#1}}
newcommand*{backreflabel}[1]{%
label{#1}%
backreflabel@display{#1}}
newcommand*{backreflabel@display}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@link@#1}}{1}
{hyperref[br@#1@1]{backrefmarker}}
{ifnumgreater{value{br@link@#1}}{1}
{backrefmarker
backrefmultformat{backreflabel@display@loop{#1}}}
{textbf{??}}}}
{textbf{??}}}
newcounter{br@label@loop}
newcommand*{backreflabel@display@loop}[1]{%
setcounter{br@label@loop}{0}%
whileboolexpr{test {ifnumless{value{br@label@loop}}{value{br@link@#1}}}}
{stepcounter{br@label@loop}%
ref{br@#1@thevalue{br@label@loop}}}}
newcommand*{br@aux@readlabel}[2]{%
ifinlist{#1}{br@linklabels}
{}
{listgadd{br@linklabels}{#1}}%
ifltxcounter{br@link@#1}
{}
{newcounter{br@link@#1}}%
setcounter{br@link@#1}{#2}}
newcommand*{br@writelabel}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@curr@#1}}{value{br@link@#1}}
{}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}%
immediatewrite@mainaux{stringbr@aux@readlabel{#1}{thevalue{br@curr@#1}}}}
AtEndDocument{%
forlistloop{br@writelabel}{br@currlabels}}
makeatother
begin{document}
begin{itemize}
item blindtext
See reference backrefref{foo3}.
item blindtext
See reference backrefref{foo1}.
item blindtext
See reference backrefref{foo2}.
end{itemize}
clearpage
blindtext
begin{enumerate}
itembackreflabel{foo1} textbf{The foo1 reference}
itembackreflabel{foo2} blindtext
textbf{The foo2 reference}
itembackreflabel{foo3} textbf{The foo3 reference}.
end{enumerate}
clearpage
See reference backrefref{foo1}.
See reference backrefref{foo2}.
clearpage
See reference backrefref{foo2}.
end{document}
Wow! Exactly what I wanted it! Thank you very much! Bravo!
– dimitris
12 hours ago
add a comment |
This is more an extended comment than a real answer.
I agree with previous comments for the easy way to do that with backref package or more precisely the backref
option passed to hyperref
at load time. But it could be interesting to extend it to label
and not only to cite
. In my answer to question Back link all headings with respective TOC entry
I have provided a solution that could be used as a starting point.
But this raises a problem of ambiguity : the reference to a label is unique, but the reverse direction is not, as you could reference a single label several times.
Furthermore, the future references are not known at creation of the label, and even if you decide to fix the ambiguity by choosing to back link to last (or first) reference, you will have to write it to .aux
file and read it back at the next compilation, which becomes much more involved.
If you really need that, and left me a delay of a few days, I could extend the above quoted solution to labels.
By the way the requested feature is implemented out of the box in several popular pdf viewers, as they can keep a trace of browsing history, thus lifting the ambiguity problem.
Thanks for this answer. I understand from your words and the comments that this is not trivial (as I thought:-)!). Is there an easier way to achieve such a forth-and-back behavior? I saw withbackref
option. Is there an example somewhere ? And the upwards arrow in wiki manner?
– dimitris
13 hours ago
What do you mean by "an easier way" ? Is the pdf viewer feature not sufficient ? For which subject are you looking for an example ?
– Jhor
13 hours ago
I apologize for not being clear. If my understanding is correct the easiest way to achieve the requested feature with a common pdf viewer?backref
option was a couple of times mentioned. Where can I found an example of its usage in the current context? Thanks again for your time!
– dimitris
13 hours ago
Sorry but backref can not help "in the current context" as it works only for bibliography. It produces beside each bibliogaphic item the list of section numbers (or pages if you usepagebackref
) where the reference has beencite
d.
– Jhor
13 hours ago
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "85"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f477661%2fcross-referencing-forth-and-back%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Here is an etoolbox
-based implementation of a backref-able ref
.
Use backrefref{<label>}
to create a ref
erence to a <label>
that can will be linked back to. Use backreflabel{<label>}
to set a label and output the backref marks. Note that backreflabel
should be called directly where the <label>
anchor attaches. Otherwise you may end up with incorrect link targets.
The solution works by writing info to the .aux
file, so it may will need at least two LaTeX runs.
documentclass[french,11pt]{article}
usepackage{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{blindtext}
usepackage{etoolbox}
usepackage[colorlinks]{hyperref}
newcommand*{backrefmarker}{$uparrow$}
newcommand*{backrefmultformat}{textsuperscript}
makeatletter
newcommand*{br@currlabels}{}
newcommand*{br@linklabels}{}
newcommand*{backrefref}[1]{%
listgadd{br@currlabels}{#1}%
ifltxcounter{br@curr@#1}
{}
{newcounter{br@curr@#1}
csgdef{thebr@curr@#1}{alph{br@curr@#1}}}%
{refstepcounter{br@curr@#1}%
label{br@#1@thevalue{br@curr@#1}}}%
ref{#1}}
newcommand*{backreflabel}[1]{%
label{#1}%
backreflabel@display{#1}}
newcommand*{backreflabel@display}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@link@#1}}{1}
{hyperref[br@#1@1]{backrefmarker}}
{ifnumgreater{value{br@link@#1}}{1}
{backrefmarker
backrefmultformat{backreflabel@display@loop{#1}}}
{textbf{??}}}}
{textbf{??}}}
newcounter{br@label@loop}
newcommand*{backreflabel@display@loop}[1]{%
setcounter{br@label@loop}{0}%
whileboolexpr{test {ifnumless{value{br@label@loop}}{value{br@link@#1}}}}
{stepcounter{br@label@loop}%
ref{br@#1@thevalue{br@label@loop}}}}
newcommand*{br@aux@readlabel}[2]{%
ifinlist{#1}{br@linklabels}
{}
{listgadd{br@linklabels}{#1}}%
ifltxcounter{br@link@#1}
{}
{newcounter{br@link@#1}}%
setcounter{br@link@#1}{#2}}
newcommand*{br@writelabel}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@curr@#1}}{value{br@link@#1}}
{}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}%
immediatewrite@mainaux{stringbr@aux@readlabel{#1}{thevalue{br@curr@#1}}}}
AtEndDocument{%
forlistloop{br@writelabel}{br@currlabels}}
makeatother
begin{document}
begin{itemize}
item blindtext
See reference backrefref{foo3}.
item blindtext
See reference backrefref{foo1}.
item blindtext
See reference backrefref{foo2}.
end{itemize}
clearpage
blindtext
begin{enumerate}
itembackreflabel{foo1} textbf{The foo1 reference}
itembackreflabel{foo2} blindtext
textbf{The foo2 reference}
itembackreflabel{foo3} textbf{The foo3 reference}.
end{enumerate}
clearpage
See reference backrefref{foo1}.
See reference backrefref{foo2}.
clearpage
See reference backrefref{foo2}.
end{document}
Wow! Exactly what I wanted it! Thank you very much! Bravo!
– dimitris
12 hours ago
add a comment |
Here is an etoolbox
-based implementation of a backref-able ref
.
Use backrefref{<label>}
to create a ref
erence to a <label>
that can will be linked back to. Use backreflabel{<label>}
to set a label and output the backref marks. Note that backreflabel
should be called directly where the <label>
anchor attaches. Otherwise you may end up with incorrect link targets.
The solution works by writing info to the .aux
file, so it may will need at least two LaTeX runs.
documentclass[french,11pt]{article}
usepackage{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{blindtext}
usepackage{etoolbox}
usepackage[colorlinks]{hyperref}
newcommand*{backrefmarker}{$uparrow$}
newcommand*{backrefmultformat}{textsuperscript}
makeatletter
newcommand*{br@currlabels}{}
newcommand*{br@linklabels}{}
newcommand*{backrefref}[1]{%
listgadd{br@currlabels}{#1}%
ifltxcounter{br@curr@#1}
{}
{newcounter{br@curr@#1}
csgdef{thebr@curr@#1}{alph{br@curr@#1}}}%
{refstepcounter{br@curr@#1}%
label{br@#1@thevalue{br@curr@#1}}}%
ref{#1}}
newcommand*{backreflabel}[1]{%
label{#1}%
backreflabel@display{#1}}
newcommand*{backreflabel@display}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@link@#1}}{1}
{hyperref[br@#1@1]{backrefmarker}}
{ifnumgreater{value{br@link@#1}}{1}
{backrefmarker
backrefmultformat{backreflabel@display@loop{#1}}}
{textbf{??}}}}
{textbf{??}}}
newcounter{br@label@loop}
newcommand*{backreflabel@display@loop}[1]{%
setcounter{br@label@loop}{0}%
whileboolexpr{test {ifnumless{value{br@label@loop}}{value{br@link@#1}}}}
{stepcounter{br@label@loop}%
ref{br@#1@thevalue{br@label@loop}}}}
newcommand*{br@aux@readlabel}[2]{%
ifinlist{#1}{br@linklabels}
{}
{listgadd{br@linklabels}{#1}}%
ifltxcounter{br@link@#1}
{}
{newcounter{br@link@#1}}%
setcounter{br@link@#1}{#2}}
newcommand*{br@writelabel}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@curr@#1}}{value{br@link@#1}}
{}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}%
immediatewrite@mainaux{stringbr@aux@readlabel{#1}{thevalue{br@curr@#1}}}}
AtEndDocument{%
forlistloop{br@writelabel}{br@currlabels}}
makeatother
begin{document}
begin{itemize}
item blindtext
See reference backrefref{foo3}.
item blindtext
See reference backrefref{foo1}.
item blindtext
See reference backrefref{foo2}.
end{itemize}
clearpage
blindtext
begin{enumerate}
itembackreflabel{foo1} textbf{The foo1 reference}
itembackreflabel{foo2} blindtext
textbf{The foo2 reference}
itembackreflabel{foo3} textbf{The foo3 reference}.
end{enumerate}
clearpage
See reference backrefref{foo1}.
See reference backrefref{foo2}.
clearpage
See reference backrefref{foo2}.
end{document}
Wow! Exactly what I wanted it! Thank you very much! Bravo!
– dimitris
12 hours ago
add a comment |
Here is an etoolbox
-based implementation of a backref-able ref
.
Use backrefref{<label>}
to create a ref
erence to a <label>
that can will be linked back to. Use backreflabel{<label>}
to set a label and output the backref marks. Note that backreflabel
should be called directly where the <label>
anchor attaches. Otherwise you may end up with incorrect link targets.
The solution works by writing info to the .aux
file, so it may will need at least two LaTeX runs.
documentclass[french,11pt]{article}
usepackage{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{blindtext}
usepackage{etoolbox}
usepackage[colorlinks]{hyperref}
newcommand*{backrefmarker}{$uparrow$}
newcommand*{backrefmultformat}{textsuperscript}
makeatletter
newcommand*{br@currlabels}{}
newcommand*{br@linklabels}{}
newcommand*{backrefref}[1]{%
listgadd{br@currlabels}{#1}%
ifltxcounter{br@curr@#1}
{}
{newcounter{br@curr@#1}
csgdef{thebr@curr@#1}{alph{br@curr@#1}}}%
{refstepcounter{br@curr@#1}%
label{br@#1@thevalue{br@curr@#1}}}%
ref{#1}}
newcommand*{backreflabel}[1]{%
label{#1}%
backreflabel@display{#1}}
newcommand*{backreflabel@display}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@link@#1}}{1}
{hyperref[br@#1@1]{backrefmarker}}
{ifnumgreater{value{br@link@#1}}{1}
{backrefmarker
backrefmultformat{backreflabel@display@loop{#1}}}
{textbf{??}}}}
{textbf{??}}}
newcounter{br@label@loop}
newcommand*{backreflabel@display@loop}[1]{%
setcounter{br@label@loop}{0}%
whileboolexpr{test {ifnumless{value{br@label@loop}}{value{br@link@#1}}}}
{stepcounter{br@label@loop}%
ref{br@#1@thevalue{br@label@loop}}}}
newcommand*{br@aux@readlabel}[2]{%
ifinlist{#1}{br@linklabels}
{}
{listgadd{br@linklabels}{#1}}%
ifltxcounter{br@link@#1}
{}
{newcounter{br@link@#1}}%
setcounter{br@link@#1}{#2}}
newcommand*{br@writelabel}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@curr@#1}}{value{br@link@#1}}
{}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}%
immediatewrite@mainaux{stringbr@aux@readlabel{#1}{thevalue{br@curr@#1}}}}
AtEndDocument{%
forlistloop{br@writelabel}{br@currlabels}}
makeatother
begin{document}
begin{itemize}
item blindtext
See reference backrefref{foo3}.
item blindtext
See reference backrefref{foo1}.
item blindtext
See reference backrefref{foo2}.
end{itemize}
clearpage
blindtext
begin{enumerate}
itembackreflabel{foo1} textbf{The foo1 reference}
itembackreflabel{foo2} blindtext
textbf{The foo2 reference}
itembackreflabel{foo3} textbf{The foo3 reference}.
end{enumerate}
clearpage
See reference backrefref{foo1}.
See reference backrefref{foo2}.
clearpage
See reference backrefref{foo2}.
end{document}
Here is an etoolbox
-based implementation of a backref-able ref
.
Use backrefref{<label>}
to create a ref
erence to a <label>
that can will be linked back to. Use backreflabel{<label>}
to set a label and output the backref marks. Note that backreflabel
should be called directly where the <label>
anchor attaches. Otherwise you may end up with incorrect link targets.
The solution works by writing info to the .aux
file, so it may will need at least two LaTeX runs.
documentclass[french,11pt]{article}
usepackage{babel}
usepackage[utf8]{inputenc}
usepackage[T1]{fontenc}
usepackage{blindtext}
usepackage{etoolbox}
usepackage[colorlinks]{hyperref}
newcommand*{backrefmarker}{$uparrow$}
newcommand*{backrefmultformat}{textsuperscript}
makeatletter
newcommand*{br@currlabels}{}
newcommand*{br@linklabels}{}
newcommand*{backrefref}[1]{%
listgadd{br@currlabels}{#1}%
ifltxcounter{br@curr@#1}
{}
{newcounter{br@curr@#1}
csgdef{thebr@curr@#1}{alph{br@curr@#1}}}%
{refstepcounter{br@curr@#1}%
label{br@#1@thevalue{br@curr@#1}}}%
ref{#1}}
newcommand*{backreflabel}[1]{%
label{#1}%
backreflabel@display{#1}}
newcommand*{backreflabel@display}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@link@#1}}{1}
{hyperref[br@#1@1]{backrefmarker}}
{ifnumgreater{value{br@link@#1}}{1}
{backrefmarker
backrefmultformat{backreflabel@display@loop{#1}}}
{textbf{??}}}}
{textbf{??}}}
newcounter{br@label@loop}
newcommand*{backreflabel@display@loop}[1]{%
setcounter{br@label@loop}{0}%
whileboolexpr{test {ifnumless{value{br@label@loop}}{value{br@link@#1}}}}
{stepcounter{br@label@loop}%
ref{br@#1@thevalue{br@label@loop}}}}
newcommand*{br@aux@readlabel}[2]{%
ifinlist{#1}{br@linklabels}
{}
{listgadd{br@linklabels}{#1}}%
ifltxcounter{br@link@#1}
{}
{newcounter{br@link@#1}}%
setcounter{br@link@#1}{#2}}
newcommand*{br@writelabel}[1]{%
ifltxcounter{br@link@#1}
{ifnumequal{value{br@curr@#1}}{value{br@link@#1}}
{}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}}
{@latex@warning@no@line{%
Label(s) may have changed.
Rerun to get cross-references right}}%
immediatewrite@mainaux{stringbr@aux@readlabel{#1}{thevalue{br@curr@#1}}}}
AtEndDocument{%
forlistloop{br@writelabel}{br@currlabels}}
makeatother
begin{document}
begin{itemize}
item blindtext
See reference backrefref{foo3}.
item blindtext
See reference backrefref{foo1}.
item blindtext
See reference backrefref{foo2}.
end{itemize}
clearpage
blindtext
begin{enumerate}
itembackreflabel{foo1} textbf{The foo1 reference}
itembackreflabel{foo2} blindtext
textbf{The foo2 reference}
itembackreflabel{foo3} textbf{The foo3 reference}.
end{enumerate}
clearpage
See reference backrefref{foo1}.
See reference backrefref{foo2}.
clearpage
See reference backrefref{foo2}.
end{document}
answered 12 hours ago
moewemoewe
92.6k10115351
92.6k10115351
Wow! Exactly what I wanted it! Thank you very much! Bravo!
– dimitris
12 hours ago
add a comment |
Wow! Exactly what I wanted it! Thank you very much! Bravo!
– dimitris
12 hours ago
Wow! Exactly what I wanted it! Thank you very much! Bravo!
– dimitris
12 hours ago
Wow! Exactly what I wanted it! Thank you very much! Bravo!
– dimitris
12 hours ago
add a comment |
This is more an extended comment than a real answer.
I agree with previous comments for the easy way to do that with backref package or more precisely the backref
option passed to hyperref
at load time. But it could be interesting to extend it to label
and not only to cite
. In my answer to question Back link all headings with respective TOC entry
I have provided a solution that could be used as a starting point.
But this raises a problem of ambiguity : the reference to a label is unique, but the reverse direction is not, as you could reference a single label several times.
Furthermore, the future references are not known at creation of the label, and even if you decide to fix the ambiguity by choosing to back link to last (or first) reference, you will have to write it to .aux
file and read it back at the next compilation, which becomes much more involved.
If you really need that, and left me a delay of a few days, I could extend the above quoted solution to labels.
By the way the requested feature is implemented out of the box in several popular pdf viewers, as they can keep a trace of browsing history, thus lifting the ambiguity problem.
Thanks for this answer. I understand from your words and the comments that this is not trivial (as I thought:-)!). Is there an easier way to achieve such a forth-and-back behavior? I saw withbackref
option. Is there an example somewhere ? And the upwards arrow in wiki manner?
– dimitris
13 hours ago
What do you mean by "an easier way" ? Is the pdf viewer feature not sufficient ? For which subject are you looking for an example ?
– Jhor
13 hours ago
I apologize for not being clear. If my understanding is correct the easiest way to achieve the requested feature with a common pdf viewer?backref
option was a couple of times mentioned. Where can I found an example of its usage in the current context? Thanks again for your time!
– dimitris
13 hours ago
Sorry but backref can not help "in the current context" as it works only for bibliography. It produces beside each bibliogaphic item the list of section numbers (or pages if you usepagebackref
) where the reference has beencite
d.
– Jhor
13 hours ago
add a comment |
This is more an extended comment than a real answer.
I agree with previous comments for the easy way to do that with backref package or more precisely the backref
option passed to hyperref
at load time. But it could be interesting to extend it to label
and not only to cite
. In my answer to question Back link all headings with respective TOC entry
I have provided a solution that could be used as a starting point.
But this raises a problem of ambiguity : the reference to a label is unique, but the reverse direction is not, as you could reference a single label several times.
Furthermore, the future references are not known at creation of the label, and even if you decide to fix the ambiguity by choosing to back link to last (or first) reference, you will have to write it to .aux
file and read it back at the next compilation, which becomes much more involved.
If you really need that, and left me a delay of a few days, I could extend the above quoted solution to labels.
By the way the requested feature is implemented out of the box in several popular pdf viewers, as they can keep a trace of browsing history, thus lifting the ambiguity problem.
Thanks for this answer. I understand from your words and the comments that this is not trivial (as I thought:-)!). Is there an easier way to achieve such a forth-and-back behavior? I saw withbackref
option. Is there an example somewhere ? And the upwards arrow in wiki manner?
– dimitris
13 hours ago
What do you mean by "an easier way" ? Is the pdf viewer feature not sufficient ? For which subject are you looking for an example ?
– Jhor
13 hours ago
I apologize for not being clear. If my understanding is correct the easiest way to achieve the requested feature with a common pdf viewer?backref
option was a couple of times mentioned. Where can I found an example of its usage in the current context? Thanks again for your time!
– dimitris
13 hours ago
Sorry but backref can not help "in the current context" as it works only for bibliography. It produces beside each bibliogaphic item the list of section numbers (or pages if you usepagebackref
) where the reference has beencite
d.
– Jhor
13 hours ago
add a comment |
This is more an extended comment than a real answer.
I agree with previous comments for the easy way to do that with backref package or more precisely the backref
option passed to hyperref
at load time. But it could be interesting to extend it to label
and not only to cite
. In my answer to question Back link all headings with respective TOC entry
I have provided a solution that could be used as a starting point.
But this raises a problem of ambiguity : the reference to a label is unique, but the reverse direction is not, as you could reference a single label several times.
Furthermore, the future references are not known at creation of the label, and even if you decide to fix the ambiguity by choosing to back link to last (or first) reference, you will have to write it to .aux
file and read it back at the next compilation, which becomes much more involved.
If you really need that, and left me a delay of a few days, I could extend the above quoted solution to labels.
By the way the requested feature is implemented out of the box in several popular pdf viewers, as they can keep a trace of browsing history, thus lifting the ambiguity problem.
This is more an extended comment than a real answer.
I agree with previous comments for the easy way to do that with backref package or more precisely the backref
option passed to hyperref
at load time. But it could be interesting to extend it to label
and not only to cite
. In my answer to question Back link all headings with respective TOC entry
I have provided a solution that could be used as a starting point.
But this raises a problem of ambiguity : the reference to a label is unique, but the reverse direction is not, as you could reference a single label several times.
Furthermore, the future references are not known at creation of the label, and even if you decide to fix the ambiguity by choosing to back link to last (or first) reference, you will have to write it to .aux
file and read it back at the next compilation, which becomes much more involved.
If you really need that, and left me a delay of a few days, I could extend the above quoted solution to labels.
By the way the requested feature is implemented out of the box in several popular pdf viewers, as they can keep a trace of browsing history, thus lifting the ambiguity problem.
answered 14 hours ago
JhorJhor
2,4871114
2,4871114
Thanks for this answer. I understand from your words and the comments that this is not trivial (as I thought:-)!). Is there an easier way to achieve such a forth-and-back behavior? I saw withbackref
option. Is there an example somewhere ? And the upwards arrow in wiki manner?
– dimitris
13 hours ago
What do you mean by "an easier way" ? Is the pdf viewer feature not sufficient ? For which subject are you looking for an example ?
– Jhor
13 hours ago
I apologize for not being clear. If my understanding is correct the easiest way to achieve the requested feature with a common pdf viewer?backref
option was a couple of times mentioned. Where can I found an example of its usage in the current context? Thanks again for your time!
– dimitris
13 hours ago
Sorry but backref can not help "in the current context" as it works only for bibliography. It produces beside each bibliogaphic item the list of section numbers (or pages if you usepagebackref
) where the reference has beencite
d.
– Jhor
13 hours ago
add a comment |
Thanks for this answer. I understand from your words and the comments that this is not trivial (as I thought:-)!). Is there an easier way to achieve such a forth-and-back behavior? I saw withbackref
option. Is there an example somewhere ? And the upwards arrow in wiki manner?
– dimitris
13 hours ago
What do you mean by "an easier way" ? Is the pdf viewer feature not sufficient ? For which subject are you looking for an example ?
– Jhor
13 hours ago
I apologize for not being clear. If my understanding is correct the easiest way to achieve the requested feature with a common pdf viewer?backref
option was a couple of times mentioned. Where can I found an example of its usage in the current context? Thanks again for your time!
– dimitris
13 hours ago
Sorry but backref can not help "in the current context" as it works only for bibliography. It produces beside each bibliogaphic item the list of section numbers (or pages if you usepagebackref
) where the reference has beencite
d.
– Jhor
13 hours ago
Thanks for this answer. I understand from your words and the comments that this is not trivial (as I thought:-)!). Is there an easier way to achieve such a forth-and-back behavior? I saw with
backref
option. Is there an example somewhere ? And the upwards arrow in wiki manner?– dimitris
13 hours ago
Thanks for this answer. I understand from your words and the comments that this is not trivial (as I thought:-)!). Is there an easier way to achieve such a forth-and-back behavior? I saw with
backref
option. Is there an example somewhere ? And the upwards arrow in wiki manner?– dimitris
13 hours ago
What do you mean by "an easier way" ? Is the pdf viewer feature not sufficient ? For which subject are you looking for an example ?
– Jhor
13 hours ago
What do you mean by "an easier way" ? Is the pdf viewer feature not sufficient ? For which subject are you looking for an example ?
– Jhor
13 hours ago
I apologize for not being clear. If my understanding is correct the easiest way to achieve the requested feature with a common pdf viewer?
backref
option was a couple of times mentioned. Where can I found an example of its usage in the current context? Thanks again for your time!– dimitris
13 hours ago
I apologize for not being clear. If my understanding is correct the easiest way to achieve the requested feature with a common pdf viewer?
backref
option was a couple of times mentioned. Where can I found an example of its usage in the current context? Thanks again for your time!– dimitris
13 hours ago
Sorry but backref can not help "in the current context" as it works only for bibliography. It produces beside each bibliogaphic item the list of section numbers (or pages if you use
pagebackref
) where the reference has been cite
d.– Jhor
13 hours ago
Sorry but backref can not help "in the current context" as it works only for bibliography. It produces beside each bibliogaphic item the list of section numbers (or pages if you use
pagebackref
) where the reference has been cite
d.– Jhor
13 hours ago
add a comment |
Thanks for contributing an answer to TeX - LaTeX Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2ftex.stackexchange.com%2fquestions%2f477661%2fcross-referencing-forth-and-back%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
If you are looking for a bibliography solution and can use
biblatex
you could have a look at tex.stackexchange.com/q/396713/35864.– moewe
14 hours ago
@moewe Thanks, but I don't want a bibliography solution. It was just for provide insight to I want to achieve that I include the image from wikipedia. Sorry for the misunderstanding.
– dimitris
14 hours ago
This is a
bibliographies
- related question and not about the cross-referencing between documents or within section/equation numbers. Thebackref
option ofhyperref
should do what you request– Christian Hupfer
14 hours ago
@ChristianHupfer See my comment above. (Thanks for your feedback).
– dimitris
14 hours ago
@ChristianHupfer I rolled back your edit, because the OP confirmed that while the example screenshot was of a bibliography, the intended use case is not a backref for
cite
but for the normallabel
-ref
mechanism.– moewe
12 hours ago