IEEEtran 和 natbib:禁止在引用中的 [ 后换行

IEEEtran 和 natbib:禁止在引用中的 [ 后换行

我正在使用一系列小技巧来使用IEEEtranwith natbib(我喜欢\citeauthor和喜欢)。在一份十一页的文档中,使用 和不使用 都会产生完全相同的 PDF 输出\ifhack,但有一个例外:“[” 后的换行符。

如果没有黑客,我得到

A [1],
[2]

通过 hack,我得到了

A [1], [
2

我该怎么做才能解决这个问题?这是我的 MWE:

\documentclass{IEEEtran}
\newif\ifhack
\hacktrue
\ifhack
    \let\theoldbibliography\thebibliography
    \usepackage[numbers,sort&compress]{natbib}
    \let\thebibliography\theoldbibliography

    \makeatletter

    % https://tex.stackexchange.com/questions/47317/
    \def\NAT@def@citea{\def\@citea{\NAT@separator}}% removed \NAT@space

    \usepackage{etoolbox}
    \patchcmd{\NAT@citexnum}{--}{]--[}{}{}

    \makeatother

    \bibpunct{[}{]}{], [}{n}{}{,}
\else
    \usepackage{cite}

    % https://tex.stackexchange.com/questions/229126/
    \AtBeginDocument{\let\normalsfcodes\frenchspacing}
\fi

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{a}
@article{b}
\end{filecontents}

\begin{document}
\parbox{1.2cm}{A \cite{a,b}}
\bibliographystyle{IEEEtran}
\bibliography{\jobname}
\end{document}

答案1

用这个替换对的调用\bibpunct就为我解决了这个问题:

\def\NAT@sep{], [}  
\def\NAT@separator{\NAT@sep}% removed \NAT@penalty

相关内容