如何将参考文献的标签更改为信件?

如何将参考文献的标签更改为信件?

我想将参考文献的标签更改为字母字符。例如

[a] authors, article.

我怎样才能在乳胶中实现这一目标,而不用手动标记每个项目的每个参考文献,例如,\bibitem[a]

此外,柜台阿尔法不能超过 26,如果我的问题的答案也能解决这个问题,那么第 27 个就是氨基酸,28日是bb, 等等。

谢谢。

答案1

这些包将生成这种形式的计数器。您可以通过重新定义和alphalph将它们合并到参考书目机制中:\@bibitem\@biblabel

示例引用

样本围兜

\documentclass{article}

\usepackage{alphalph,cite}

\makeatletter
\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
  {\string\bibcite{#1}{\alphalph{\value{\@listctr}}}}\fi\ignorespaces}
\def\@biblabel#1{[\alphalph{#1}]}
\makeatother

\begin{document}
\nocite{*}\cite{phdthesis-minimal}

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

从评论中可以看出,您还想将其应用于独立thebibliography环境,其中存在第二个这样的环境。
这可以通过将序言中的命令移到环境内来实现。

\documentclass{article}

\usepackage{alphalph,cite}

\begin{document}
\cite{a2,x28}

\begin{thebibliography}{9}
\bibitem{a1} Source.
\bibitem{a2} Source.
\bibitem{a3} Source.
\end{thebibliography}

\begin{thebibliography}{99}
\makeatletter
\def\@bibitem#1{\item\if@filesw \immediate\write\@auxout
  {\string\bibcite{#1}{\alphalph{\value{\@listctr}}}}\fi\ignorespaces}
\def\@biblabel#1{[\alphalph{#1}]}
\makeatother
\bibitem{x1} Reference.
\bibitem{x2} Reference.
\bibitem{x3} Reference.
\bibitem{x4} Reference.
\bibitem{x5} Reference.
\bibitem{x6} Reference.
\bibitem{x7} Reference.
\bibitem{x8} Reference.
\bibitem{x9} Reference.
\bibitem{x10} Reference.
\bibitem{x11} Reference.
\bibitem{x12} Reference.
\bibitem{x13} Reference.
\bibitem{x14} Reference.
\bibitem{x15} Reference.
\bibitem{x16} Reference.
\bibitem{x17} Reference.
\bibitem{x18} Reference.
\bibitem{x19} Reference.
\bibitem{x20} Reference.
\bibitem{x21} Reference.
\bibitem{x22} Reference.
\bibitem{x23} Reference.
\bibitem{x24} Reference.
\bibitem{x25} Reference.
\bibitem{x26} Reference.
\bibitem{x27} Reference.
\bibitem{x28} Reference.
\bibitem{x29} Reference.
\bibitem{x30} Reference.
\end{thebibliography}

\end{document}

如果您想使用外部数据库执行此操作,那么您可以使用该multibib包并对一个参考书目进行类似的本地调整。

答案2

这不是一个新答案,只是内容太长而无法作为评论留下。

在评论中安德鲁·斯旺 (Andrew Swann) 的精彩回答,有关于如何继续进行而不破坏行为的讨论hyperref。由于我来这里时正好有这个需要,所以我决定将我所做的工作留给其他用户作为可能的补丁。

免责声明:它既快捷又粗糙,请谨慎使用。实际上,这里只是在完整参考书目中添加前缀,但任何人都可以将其用作满足其需求的起点。


看看\@bibitem在命令中是如何重新定义的hyperref

\def\@bibitem#1{%
    \@skiphyperreftrue\H@item\@skiphyperreffalse
    \Hy@raisedlink{%
      \hyper@anchorstart{cite.#1\@extra@b@citeb}\relax\hyper@anchorend
    }%
    \if@filesw
    \begingroup
      \let\protect\noexpand
      \immediate\write\@auxout{%
        \string\bibcite{#1}{\the\value{\@listctr}}%
      }%
    \endgroup
  \fi
  \ignorespaces
}%

在调用中插入前缀应该不是那么难\bibcite。当然,这必须与重新定义相结合,\@biblabel正如 Andrea Swann 所展示的那样。

然后我决定创建一个changeBibPrefix命令以便正确地重新定义所需的宏。

\makeatletter
\newcommand{\changeBibPrefix}[1]{%
  \def\@bibitem##1{%
    \@skiphyperreftrue\H@item\@skiphyperreffalse
    \Hy@raisedlink{%
      \hyper@anchorstart{cite.##1\@extra@b@citeb}\relax\hyper@anchorend
    }%
    \if@filesw
    \begingroup
      \let\protect\noexpand
      \immediate\write\@auxout{%
        \string\bibcite{##1}{#1\the\value{\@listctr}}%
      }%
    \endgroup
    \fi
    \ignorespaces
  }
  \def\@biblabel##1{[#1##1]}
}
\makeatother

这里唯一要注意的是用来#1识别传递给命令的前缀\changeBibPrefix##1识别\@bibitem\@biblabel宏参数。

此时,我们可以把所有内容放在一个例子中,我决定继续使用参考书目中的编号。

\documentclass{article}
\usepackage{enumitem,lipsum}
\usepackage[colorlinks = true, citecolor = blue]{hyperref}

\newcounter{bibIndex}

\makeatletter
\newcommand{\changeBibPrefix}[1]{%
  \def\@bibitem##1{%
    \@skiphyperreftrue\H@item\@skiphyperreffalse
    \Hy@raisedlink{%
      \hyper@anchorstart{cite.##1\@extra@b@citeb}\relax\hyper@anchorend
    }%
    \if@filesw
    \begingroup
      \let\protect\noexpand
      \immediate\write\@auxout{%
        \string\bibcite{##1}{#1\the\value{\@listctr}}%
      }%
    \endgroup
    \fi
    \ignorespaces
  }
  \def\@biblabel##1{[#1##1]}
}
\makeatother

\begin{document}

\section{Some section}
\lipsum[1-3] Cite \cite{ref1} and cite \cite{ref2}. \lipsum[2]

\changeBibPrefix{P}
\renewcommand{\refname}{First bibliography}
\begin{thebibliography}{9}
    \bibitem{ref1} First reference
    \bibitem{ref2} Second reference
    \setcounter{bibIndex}{\value{enumiv}}
\end{thebibliography}

\section{Some other section}
\lipsum[1] Cite \cite{ref1} and cite \cite{ref3}. \lipsum[2-5]

\changeBibPrefix{R}
\renewcommand{\refname}{Second bibliography}

\begin{thebibliography}{9}
    \setcounter{enumiv}{\value{bibIndex}}
    \bibitem{ref3} Third reference
\end{thebibliography}

\end{document}

相关内容