43

I'm trying to include a link to some code on OneDrive; the link includes an underscore, which is causing a lot of trouble.

I tried adding the entry like this:

@misc{code,
    title = {Code},
    url = {https://1drv.ms/link_link}
}

I use \usepackage{url} and \bibliographystyle{IEEEtran}. Everything compiles fine and the bibliography shows the correct entry. However, if you click the link, it opens a page at https://1drv.ms/link - so ignoring the underscore and everything after it, which leads to a wrong page. Even copy and paste from the PDF doesn't work since the underscore is copied as space, which again is a broken link.

How can I add the link such that it can be clicked and copied properly? I tried \_, \usepackage{underscore}, {{link}}, different bibtex entries but nothing worked. Also all the related questions/answers don't answer mine.

5 Answers5

36

In case of IEEE templates, when using the file bib, replacing the underscore with {\_} should solve the problem. In the case of the question:

@misc{code,
    title = {Code},
    url = {https://1drv.ms/link{\_}link}
}
  • 7
    Sometimes {\_} is converted by some latex preprocessing so it will not converted properly. In these cases, try just to replace _ by \_ in the bibtex. – Agile Bean Nov 01 '20 at 07:22
33

Just to formally answer and close this question: As Ulrike Fischer answered in the comments, the solution was to use \usepackage{hyperref} (or \usepackage[hidelinks]{hyperref} to avoid the ugly boxes) and \usepackage[T1]{fontenc}. This allows properly clicking and copy-&-pasting URLs with underscores.

However, it turned out, using package hyperref wasn't allowed when trying to submit the paper to IEEE. So I ended up simply changing the URL to something without underscore using goo.gl (or bitly since goo.gl is down).

MWE

\documentclass{article}

\usepackage[T1]{fontenc} \usepackage{hyperref}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib} @misc{code, title = {Code}, url = {https://1drv.ms/link_link} } \end{filecontents}

\begin{document}

\cite{code}

\bibliographystyle{IEEEtran} \bibliography{\jobname}

\end{document}

Result

enter image description here

dexteritas
  • 9,161
5

I do not know why, but the other solutions did not work for me, this did however:

  1. Delete auxiliary files (.bbl)

  2. In the bib file, replace the url by:

    url = {{https://doi.org.123345\_6789}}

Note, the double curly braces and non arround \_.

Nyps
  • 183
  • Deleting the .bbl file is always a good idea when you have a problem with the bibliography. But I'm sceptical about the second point. The double braces should normally not be any better than single braces. It will depend on your bibliography style, but usually styles that support a dedicated url field can also interface with the url or hyperref package so that they can deal with unescaped _s when you load \usepackage{hyperref} or \usepackage{url}. If at all possible I'd always prefer url = {https://doi.org.123345_6789} over escaping with backslashes. – moewe Feb 22 '21 at 17:05
  • Sane story, only this works for me. – Angus Aug 03 '22 at 09:01
3

I stumbled upon this solution from bibtex.com, which is not covered in other answers:

% if the DOI contains an "_" it must be escaped by "\{_}"
doi = "10.1057/9780230375048\{_}3"

It is for the doi field but maybe it is applicable to others as well.

xuiqzy
  • 41
  • In an another answer that is already written ... – Mensch Jun 18 '21 at 11:07
  • 2
    @Mensch I only saw {\_} in another answer and as a tex non-expert, I didn't know this would be transferable in this way and I would also appreciate the explicit mentioning of this slightly different solution, so I posted it. – xuiqzy Jun 18 '21 at 14:00
0

I'd recommend using sourcemaps in your Latex-File. That way you don't need to adapt the bib file or anything, For example, to escape an underscore (symbol 5F in unicode), one can use the following:

\DeclareSourcemap{
    \maps[datatype=bibtex, overwrite]{
        \map{
            \step[fieldsource=url, match=\regexp{\x{5F}}, replace=\regexp{\\\x{5F}}]
        }
    }
}
konse
  • 101