I have a big LaTeX file containing huge loads of equations. They are all referenced as follows:
Equation~\ref{XX}
Equation~\ref{XY}
...
I want to obtain this,
Equation~(\ref{XX})
Equation~(\ref{XY})
...
I have only a basic knowledge of sed, but I'm convinced it could do the trick using the '&' symbol.
I tried:
sed 's#\ref{*}#(&)#g' input_tex_file.tex
Which does not change anything.
If I do:
sed 's#\ref{XX}#(&)#g' input_tex_file.tex
I obviously obtain
Equation~(\ref{XX})
But I would like to avoid writing a script to detect all references and modify them sequentially, even if I guess it would not be overwhelming.
Please also note that I have loads of things like Table~\ref{XX} and Figure~\ref{XX} that I would like to left unmodified.
Any ideas ?
The & symbol in the replacement pattern stands for the whole match. You seem to wannt to avoid modifying values after any word but Equation~, so it should be included into the pattern and that means, you cannot use &, but regular \1 and \2 to refer to captured parts of the regex.
You may capture the Equation~ and the rest of the pattern into two separate groups and refer to them in the replacement:
sed 's#\(Equation~\)\(\\ref{[^{}]*}\)#\1(\2)#g'
or, with POSIX ERE,
sed -E 's#(Equation~)(\\ref\{[^{}]*})#\1(\2)#g'
Demo:
s='Equation~\ref{XX} Table~\ref{XX} and Figure~\ref{XX}'
echo "$s" | sed 's#\(Equation~\)\(\\ref{[^{}]*}\)#\1(\2)#g'
# => Equation~(\ref{XX}) Table~\ref{XX} and Figure~\ref{XX}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With