在小节标题和 pdf 书签 (hyperref) 中的引用 (\cite) 使用 bibtex 而不是 biblatex

在小节标题和 pdf 书签 (hyperref) 中的引用 (\cite) 使用 bibtex 而不是 biblatex

我的问题与@leandriis 提出的问题非常相似这里。我想在小节标题中引用我的一个参考文献。由于我使用的是hyperref-command,\cite这会带来麻烦,因为这样的 tex 语句无法转换为 pdf-bookmark,所以我使用\texorpdfstring并将\cite-command 放入第一个参数中。但是我可以将什么放入第二个参数中,以便基本上相同的输出出现在生成的书签中,当然只是不在hyperrefpdf-bookmark 中。我和 @leandriis 的想法类似,以某种方式从引文中提取参考文献的编号,并将类似的内容写入[\getnumberfromcitation{nameofbibtexentry}, Theorem A]第二个命令。然而,这似乎是不可能的。

然后我发现了这个问题多于。并且提出了一个可能有效的解决方案biblatex。问题只是我正在使用bibtex,因为我想使用bibliographystyle amsplain显然仅在bibtex(参见此问题)。

问题是:我能做什么?我如何适应@Ulrike Fischer 在这个问题中的解决方案多于bibtex而不是 的情况biblatex?我不是一名 tex 专家,无法独自回答这个问题。非常感谢您的帮助!

我的 tex 文件的示例。

\documentclass[12pt]{amsart}

\usepackage{amssymb,amscd,amsthm, verbatim,amsmath,color,fancyhdr,mathrsfs}
\usepackage{graphicx}
\usepackage{turnstile} 
\usepackage{todonotes}
\usepackage[bookmarks=true]{hyperref}
\usepackage{csquotes}
\usepackage[mathscr]{euscript}

\def\tequiv{\ensuremath\sdststile{}{}}

\usepackage[letterpaper,left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm,dvips]{geometry}
\begin{document}
\section{Section}
\subsection{Subsection \texorpdfstring{{\normalfont(\cite[Subsection~x.y]{author})}}{What to write here?}}

\bibliographystyle{amsplain}
\bibliography{lib}
%lib.bib has an entry with key author
\end{document}

答案1

这里有几个问题。第一个问题已在 Ulrike Fischer 的链接帖子中解决,但使用biblatex修补\bibitem命令来生成\label可以引用的。这也可以使用标准来完成,bibtex如下所示:

\usepackage{etoolbox}
\makeatletter
\patchcmd{\@bibitem}{\ignorespaces}{\label{bib-#1}\ignorespaces}{}{}
\makeatother

(如果没有可选参数,则\bibitem调用,就像您示例中的情况一样,并且最终执行的宏是,我们将标签放在其前面。)\@bibitem\@bibitem\ignorespaces

然后,您可以使用\ref{bib-author}来代替 章节标题\cite{author}。您可能希望将其打包成命令\mycite以添加方括号。

\newcommand{\mycite}[1]{[\ref{bib-#1}]}

第二个问题是您不能在 的 pdf 部分中使用可选参数\texorpdfstring。因此,需要定义引用命令的版本,该版本采用必需参数而不是可选参数。

\newcommand{\myqcite}[2]{[\ref{bib-#2}, #1]}

这两个定义都假设您只引用一个项目。现在,为了在标题中使用,您也可以\texorpdfstring在某些辅助命令中隐藏 ,这样您就可以只写\mytcite{author}\mytqcite{Section X.Y}{author}

\newcommand{\mytcite}[1]{\texorpdfstring{\cite{#1}}{\mycite{#1}}}
\newcommand{\mytqcite}[2]{\texorpdfstring{\cite[#1]{#2}}{\myqcite{#1}{#2}}}

该图像是显示 tex 输出和书签的屏幕截图。

示例输出

\documentclass[12pt]{amsart}

\usepackage{etoolbox}
\usepackage[bookmarks=true]{hyperref}

\makeatletter
\patchcmd{\@bibitem}{\ignorespaces}{\label{bib-#1}\ignorespaces}{}{}
\makeatother

\newcommand{\mycite}[1]{[\ref{bib-#1}]}
\newcommand{\myqcite}[2]{[\ref{bib-#2}, #1]}
\newcommand{\mytcite}[1]{\texorpdfstring{\cite{#1}}{\mycite{#1}}}
\newcommand{\mytqcite}[2]{\texorpdfstring{\cite[#1]{#2}}{\myqcite{#1}{#2}}}

\begin{document}

\section{Section (\mytcite{author})}

\section{Section (\mytqcite{Section~2.1}{author})}

\bibliographystyle{amsplain}
\bibliography{lib}

\end{document}

lib.bib

@Article{author,
  author =   {Author, A. N.},
  title =    {Title},
  journal =  {J. Jour.},
  year =     2000,
  volume =   756,
  pages =    {1--77}
}

如果您的bibitems 也有选项参数,那么您将需要\@lbibitem按照与上述相同的方式进行修补。

相关内容