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.

In answering another question allowing line break at ',' in inline math mode, Stefan Kottwitz suggested two excellent ways to allow line breaks in inline math mode after ,. One way was to use the \allowbreak command after the comma, and the other way was to globally redefine , so that line breaks are allowed.

I used the second approach, and was really fond of it, until I noted that the command \cite{} no longer works as expected: If I cited more than one reference, it showed [?] instead of the correct citation. Here's an example:

\documentclass{article}

%----------Redefining `,` ------------------%
\makeatletter
\def\old@comma{,}
\catcode`\,=13
\def,{%
  \ifmmode%
    \old@comma\discretionary{}{}{}%
  \else%
    \old@comma%
  \fi%
}
\makeatother
%-------------------------------------------%

\begin{document}

\cite{A,B}

\begin{thebibliography}{A}
\bibitem{A} ABC
\bibitem{B} DEF
\end{thebibliography}

\end{document}

What is wrong with redefining ,? How to correct it?

share|improve this question
add comment

1 Answer

up vote 11 down vote accepted

When \cite tries to split the argument, it doesn't find the expected delimiter, which is a category 12 comma and is different from a category 13 comma.

The correct way, other than using breqn is to make the comma "math active", just as it is done in the package icomma.

\AtBeginDocument{%
  \mathchardef\mathcomma\mathcode`\,
  \mathcode`\,="8000 
}
{\catcode`,=\active
  \gdef,{\mathcomma\discretionary{}{}{}}
}

But I should warn about making this definition, as TeX might break also formulas such as $(a,b)$. I would suggest

\mathchardef\breakingcomma\mathcode`\,
{\catcode`,=\active
  \gdef,{\breakingcomma\discretionary{}{}{}}
}
\newcommand{\mathlist}[1]{$\mathcode`\,=\string"8000 #1$}

and using \mathlist{a,b,c,d} for a list that can be split across lines. (The \string is useful in connection with babel, for some languages make the double quote active.)

share|improve this answer
    
Is it possible to change the catcode of , only in the mathmode, so that \cite does not encounter such problem? –  Sadeq Dousti May 26 '11 at 10:19
    
@Sadeq: the first piece of code I proposed does just this. –  egreg May 26 '11 at 10:22
    
Oh, I see. Thanks! –  Sadeq Dousti May 26 '11 at 10:41
    
+1, cool that \mathlist! –  Riccardo Jun 11 '12 at 13:38
1  
@LoverofStructure It shouldn't matter where you put the definitions. The second method shouldn't have any problem with other packages; in case some package or macro wants to make the comma an active character there would, of course, be a conflict. –  egreg Feb 3 '13 at 8:55
show 2 more comments

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.