我的问题与@leandriis 提出的问题非常相似这里。我想在小节标题中引用我的一个参考文献。由于我使用的是hyperref
-command,\cite
这会带来麻烦,因为这样的 tex 语句无法转换为 pdf-bookmark,所以我使用\texorpdfstring
并将\cite
-command 放入第一个参数中。但是我可以将什么放入第二个参数中,以便基本上相同的输出出现在生成的书签中,当然只是不在hyperref
pdf-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}
}
如果您的bibitem
s 也有选项参数,那么您将需要\@lbibitem
按照与上述相同的方式进行修补。