Take the 2-minute tour ×
TeX - LaTeX Stack Exchange is a question and answer site for users of TeX, LaTeX, ConTeXt, and related typesetting systems. It's 100% free, no registration required.

How do I allow long URLs to have line breaks at any point. This is in the bibliography not the main text. I am trying to save space so don't want extra spaces to be added to make it only break at slashes, for example, as it does by default. I am using biblatex+biber.

share|improve this question
1  
do you want to allow a linebreak at any symbol/character? –  Herbert Jul 12 '11 at 11:23
1  
Have you already seen this question and the answers given there? –  domwass Jul 12 '11 at 11:24
    
Yes at any symbol/character. I really just want to wrap very crudely to save maximum space. I don't want it to hyphenate however as that would be confusing. –  Raphael Jul 12 '11 at 12:07

1 Answer 1

up vote 16 down vote accepted

Answers to the question linked in domwass's comment mention the package url. This package is already loaded by biblatex. It is configured with the command \biburlsetup defined in biblatex.def.

URLs are broken at the set of characters specified in \UrlBreaks, \UrlBigBreaks and \UrlSpecials. \UrlBigBreaks will prevent breaks from occurring between repeating characters (e.g. -- and :: in the code below). \UrlSpecials handles breaks at characters that may not be present in the document font.

Upgrading to the latest version of biblatex should solve your problem as \biburlsetup was expanded in version 1.4c to permit breakpoints at many different characters. For reference here is the definition for \biburlsetup from version 1.7:

\newcounter{biburlnumpenalty}
\newcounter{biburlucpenalty}
\newcounter{biburllcpenalty}

\newcommand*{\biburlsetup}{%
  \Urlmuskip=0mu plus 3mu\relax
  \mathchardef\UrlBigBreakPenalty=100\relax
  \mathchardef\UrlBreakPenalty=200\relax
  \def\UrlBigBreaks{\do\:\do\-}%
  \def\UrlBreaks{%
    \do\.\do\@\do\/\do\\\do\!\do\_\do\|\do\;\do\>\do\]\do\)\do\}%
    \do\,\do\?\do\'\do\+\do\=\do\#\do\$\do\&\do\*\do\^\do\"}%
  \ifnumgreater{\value{biburlnumpenalty}}{0}
    {\def\do##1{\appto\UrlSpecials{\do##1{\mathchar`##1 \penalty\value{biburlnumpenalty}}}}%
     \do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9\do\0}
    {}%
  \ifnumgreater{\value{biburlucpenalty}}{0}
    {\def\do##1{\appto\UrlSpecials{\do##1{\mathchar`##1 \penalty\value{biburlucpenalty}}}}%
     \do\A\do\B\do\C\do\D\do\E\do\F\do\G\do\H\do\I\do\J
     \do\K\do\L\do\M\do\N\do\O\do\P\do\Q\do\R\do\S\do\T
     \do\U\do\V\do\W\do\X\do\Y\do\Z}
    {}%
  \ifnumgreater{\value{biburllcpenalty}}{0}
    {\def\do##1{\appto\UrlSpecials{\do##1{\mathchar`##1 \penalty\value{biburllcpenalty}}}}%
     \do\a\do\b\do\c\do\d\do\e\do\f\do\g\do\h\do\i\do\j
     \do\k\do\l\do\m\do\n\do\o\do\p\do\q\do\r\do\s\do\t
     \do\u\do\v\do\w\do\x\do\y\do\z}
    {}%
  \let\do=\noexpand}

Unlike versions 1.4c to 1.6, this new definition no longer allows breakpoints at numbers, uppercase letters and lowercase letters by default. Breaks at these characters can be permitted by setting the penalty counters to a value between 0 and 10000, exclusive. For example:

\setcounter{biburlnumpenalty}{100}
\setcounter{biburlucpenalty}{100}
\setcounter{biburllcpenalty}{100}

The penalties can be reset locally using the command \defcounter from the etoolbox package (also loaded by biblatex). For example:

\defcounter{biburlnumpenalty}{3000}
\defcounter{biburlucpenalty}{6000}
\defcounter{biburllcpenalty}{9000}

To use this new setup with an older version of biblatex, just put the code defining \biburlsetup and its penalty counters in your preamble and replace \newcommand with \renewcommand.

share|improve this answer
    
Thanks! I somehow feel this ought to have been easier :) –  Raphael Jul 12 '11 at 13:45
    
Interesting! Could you explain why you handle digits in this way? –  Martin Scharrer Jul 12 '11 at 13:51
    
@Martin The \UrlSpecials appears as defined by biblatex/Philipp Lehman. I am not sure why myself. If you (or anyone else for that matter) can figure it out, please feel free to edit my answer. –  Audrey Jul 12 '11 at 14:00
    
That's fine, I was just curious. –  Martin Scharrer Jul 12 '11 at 14:03
    
@Audrey Thanks for the update. –  Raphael Nov 15 '11 at 16:32

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.