这类似于如何更改 amsrefs 中参考书目项目标签的外观?,但针对的是标准 BibTeX 样式。
我有一份文档,其正文中使用了旧式数字。我还有一个使用字母样式的参考书目。大多数参考文献都有不止一位作者,因此条目标签由大写字母和缩写年份组成。由于大写字母太多,旧式数字在这些标签中看起来有些错位。
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[osf]{libertine-type1}
\usepackage{url,natbib}
\begin{document}
\cite{LaTeXbase,armtex}
\bibliographystyle{alpha}
\bibliography{minitoc} % bibtex/bib/minitoc/minitoc.bib
\end{document}
我怎样才能改变这些书目项目标签内的内衬数字?
答案1
首先我们设置一个宏来将字体切换为比例衬线数字。这当然取决于使用的字体。
\usepackage[osf]{libertine-type1}
\newcommand{\switchtoPLF}{\fontfamily{LinuxLibertineO-LF}\selectfont}
% \usepackage[osf]{mathpazo}
% \newcommand{\switchtoPLF}{\fontfamily{ppl}\selectfont}
% \usepackage{cfr-lm}
% \newcommand{\switchtoPLF}{\plstyle}
使用时natbib
,将引用、参考项和内衬图切换为
\renewcommand{\bibnumfmt}[1]{[\switchtoPLF{}#1]} % switch reference item
\renewcommand{\citenumfont}[1]{{\switchtoPLF{}#1}} % switch citation item
如果没有natbib
,则以下工作:
\usepackage{etoolbox}
\makeatletter
\renewcommand{\@biblabel}[1]{[\switchtoPLF{}#1]} % switch reference item
\patchcmd{\@citex}%
{\csname b@\@citeb\endcsname}%
{\switchtoPLF\csname b@\@citeb\endcsname}{}{} % switch citation item
\makeatother
这两种方法都适用于hyperref
,并且也适用于编号参考书目样式,例如plain
,或plainnat
。
答案2
我遇到了同样的问题,但使用的是biblatex
和fontspec
。mafp 的解决方案,重新定义\@biblabel
,对我来说不起作用。以下方法有效:
\AtBeginBibliography{\renewcommand{\makelabel}[1]{\addfontfeatures{Numbers = Lining}#1}}
不需要改变标签的格式,只需在书写标签时选择正确的字体功能即可。
答案3
因为这是我在搜索如何使用 BibLaTeX 执行此操作时出现的第一个问题,所以在标签中使用内衬数字的最简单方法(无论是在引用时还是在参考书目中)是重新定义该labelalpha
字段,如下所示:
\DeclareFieldFormat{labelalpha}{\liningnums{#1}}
\liningnums{...}
是包提供的命令libertine
。不同的字体包提供不同的命令(如\textlf{...}
)xcharter
或根本没有命令。如果没有提供切换到衬线图形的命令,可以定义一个新的命令,类似于 mafp 的答案。