TransWikia.com

ref should use enumerate label name

TeX - LaTeX Asked on March 3, 2021

I have done this:

begin{enumerate}
renewcommand{labelenumi}{textbf{S.theenumi}}
item a
item label{l} b
item c. goto ref{l}
end{enumerate}

The ref just uses the enumerate number. But I want it to be the full enumerate label.

I also could just type S.ref{l} but that has the two disadvantages that

  1. if I update the enumerate label, I also have to update this reference,
  2. together with hyperref, this doesn’t look so nice.

How would be a clean/nice way to solve this?

4 Answers

You can use the enumitem package:

documentclass{article}
usepackage{enumitem}

begin{document}

begin{enumerate}[label=textbf{S.arabic*}]
item a
item label{l} b
item c. goto ref{l}
end{enumerate}

end{document}

enter image description here

or

begin{enumerate}[label=textbf{S.arabic*},ref=S.arabic*]
item a
item label{l} b
item c. goto ref{l}
end{enumerate}

if you don't want the reference to be boldfaced.

Correct answer by Gonzalo Medina on March 3, 2021

For your attempt properly work, you need redefine the counter representation (theenumi) as well as the label associated with it (labelenumi). This separates the formatting from the counter when you're using ref:

enter image description here

documentclass{article}
begin{document}
begin{enumerate}
renewcommand{labelenumi}{textbf{theenumi}}
renewcommand{theenumi}{S.arabic{enumi}}
item a
makeatletter
show@currentlabel
makeatother
item label{l} b
item c. goto ref{l}
end{enumerate}
end{document}

This also works nicely with hyperref. However, in general, it is much easier to use enumitem since it can be used in a global or localized setting using a key-value approach; very convenient.

Answered by Werner on March 3, 2021

With packages paralist works as well

documentclass{article}
begin{document}
usepackage{paralist}
begin{enumerate}[bfseries{S}.1]
item a
makeatletter
show@currentlabel
makeatother
item label{l} b
item c. goto ref{l}
end{enumerate}
end{document}

Answered by Bramau on March 3, 2021

For all counters in LaTeX (not needing packages) there is a macro p@counter used as a prefix in label/ref for that counter. So the matching set of definitions would be

makeatletter
renewcommand{labelenumi}{textbf{theenumi}}
renewcommand{theenumi}{S.arabic{enumi}}
renewcommand{p@enumi}{S.}
makeatother

The more natural way of doing it would be to leave theenumi as just the counter value, and put all adornment in the others

makeatletter
renewcommand{labelenumi}{textbf{S.theenumi}}
renewcommand{theenumi}{arabic{enumi}}
renewcommand{p@enumi}{S.}
makeatother

Answered by Donald Arseneau on March 3, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP