如何减少参考书目中的空白或拉伸?

如何减少参考书目中的空白或拉伸?

如何减少参考书目中单词之间的空白?它似乎试图将内容拉长以适合列。例如:

例子

以下是测试文档:

% test.tex
\title{Article Title}
\author{Some Author}
\documentclass[12pt, a4paper, twocolumn]{article}
\usepackage[super,comma,sort&compress]{natbib}
\begin{filecontents}{test.bib}
@misc{LinkReference1,
  author = {Xxxxxxxxxx, Xxxxx},
  title = {Xxxxx-xxxxx Xxxxxxxxxxxxxx: Xxxxxx Xxxx},
}
\end{filecontents}
\begin{document}
\maketitle
\section{Section1Title}
Hello World.
\nocite{*}
\bibliographystyle{plain}
\bibliography{test}
\end{document}

% Create PDF on Linux:
% FILE=test; pkill -9 -f ${FILE} &>/dev/null; rm -f ${FILE}*aux ${FILE}*bbl ${FILE}*bib ${FILE}*blg ${FILE}*log ${FILE}*out ${FILE}*pdf &>/dev/null; pdflatex -halt-on-error ${FILE}; bibtex ${FILE} && pdflatex ${FILE} && pdflatex ${FILE} && (xdg-open ${FILE}.pdf &)

答案1

许多.bst样式使用命令\newblock来分隔(较大的)信息块。在示例中,文件将在作者姓名后面以红色标记的位置直接.bbl包含一个。\newblock

\bibitem{LinkReference1}
Xxxxx Xxxxxxxxxx.
\newblock Xxxxx-xxxxx xxxxxxxxxxxxxx: Xxxxxx xxxx.

\newblock请注意,前面也有一个正常空格(或在本例中为换行符) 。

标准类定义

\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}

这意味着插入了一个额外的(相当)可拉伸的空间\newblock

natbib,您使用的也有

\renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}

但是该定义在里面thebibliography,这意味着如果您想修改,\newblock您必须重新定义thebibliography或在环境内工作(例如通过手动修改文件或与在环境内执行命令的文件一起.bbl使用[有一些这样做,但大多数样式在之前执行])。@preamble.bst@preamble@preamble\begin{thebibliography}

在您的例子中

\makeatletter
\renewenvironment{thebibliography}[1]{%
 \bibsection
 \parindent\z@
 \bibpreamble
 \bibfont
 \list{\@biblabel{\the\c@NAT@ctr}}{\@bibsetup{#1}\global\c@NAT@ctr\z@}%
 \ifNAT@openbib
   \renewcommand\newblock{\par}%
 \else
   \renewcommand\newblock{}%
 \fi
 \sloppy\clubpenalty4000\widowpenalty4000
 \sfcode`\.\@m
 \let\NAT@bibitem@first@sw\@firstoftwo
    \let\citeN\cite \let\shortcite\cite
    \let\citeasnoun\cite
}{%
 \bibitem@fin
 \bibpostamble
 \def\@noitemerr{%
  \PackageWarning{natbib}{Empty `thebibliography' environment}%
 }%
 \endlist
 \bibcleanup
}%
\makeatother

会删除 插入的额外空格\newblock。但间距并没有变好

示例书目:第一行的所有单词之间都有很大的空格。

可以说,情况变得更糟,因为构成一个单位的名字和姓氏之间,与名字和头衔之间的空格是一样的。


即使在最好的情况下,参考书目中的换行也很难(名称和技术术语可能很难正确连字符,URL 使事情变得复杂,......),但在双列模式下,情况会变得更加困难,因为可用空间比平时小得多。因此,预计需要稍微拉伸和压缩空间才能完全对齐。

在这种情况下,值得考虑将参考书目设置为右对齐,即关闭对齐。例如,参见如何防止引用的自动对齐?。LaTeX 将停止拉伸空间,但文本不会在行尾对齐。由于参考书目是列表形式,并且可能有大量行不符合右边距,因此视觉效果不会像正常的流动文本段落那样大。

\documentclass[12pt, a4paper, twocolumn]{article}
\usepackage[super,comma,sort&compress]{natbib}
%\usepackage{filecontents}
\begin{filecontents}{test.bib}
@misc{LinkReference1,
  author = {Xxxxxxxxxx, Xxxxx},
  title = {Xxxxx-xxxxx Xxxxxxxxxxxxxx: Xxxxxx Xxxx},
}
\end{filecontents}

\renewcommand*{\bibfont}{\raggedright}

\begin{document}
Hello World.
\nocite{*}

\bibliographystyle{plain}
\bibliography{test}
\end{document}

总体效果更令人满意

第一行没有过多的空白。<code>\newblock</code> 仍然在句号后添加了一点点额外的空格。

如果你喜欢在不规则的右侧文本中使用连字符,你可能需要研究一下ragged2e\RaggedRight

答案2

作为moewe 指出,当使用时natbib,必须在环境\newblock内重新定义thebibliography。一个相对简单的解决方案就是这样做:

\let \thebibliographyorig \thebibliography
\renewcommand{\thebibliography}[1]{%
    \thebibliographyorig{#1}%
    \renewcommand{\newblock}{}%
}

相关内容