其中一个答案如下:如何使只引用的 bibitem 出现?
用户@UlrikeFischer 提供了一个简短的解决方案,可以在不使用 bibtex 时实现自动化,我在此处复制了她的代码,它适用于引用单个项目。但是,当引用多个项目时,它对我不起作用。我在此处向她的代码片段添加了“\cite{a,b}”,但这对我不起作用,即,在我放置 b 的地方有一个问号,而参考 b 未列出
Ulrike 或其他人能否帮助我修改代码片段,以便 \cite{a,b} 等也能正常工作?我对 latex 代码了解不够多,无法尝试自己修改它
非常感谢你的帮助,赫尔克里·波洛
附言:我知道我将来应该使用 Bibtex 或其他自动化软件包,所以告诉我这不会有帮助。
\documentclass{article}
\usepackage{xpatch}
\makeatletter
\xpretocmd\@citex{\csgdef{used@cite@#2}{x}}{}{\failed}
\newcommand\checkbibentry[2]{\ifcsdef{used@cite@#1}{\bibitem{#1}{#2}}{}}
\makeatletter
\begin{document}
\cite{a} \cite{c} \cite{a,b}
\begin{thebibliography}{99}
\checkbibentry{a}{some text to a}
\checkbibentry{b}{some text to b}
\checkbibentry{c}{some text to c}
\end{thebibliography}
\end{document}
答案1
您可以通过按键列表进行映射:
\documentclass{article}
\usepackage{xpatch}
\ExplSyntaxOn\makeatletter
\cs_new_protected:Npn\__poirot_mark_cite_as_used:n #1
{
\clist_map_inline:nn {#1}
{
\tl_gclear_new:c{g__poirot_cite_used_##1_tl}
}
}
\newcommand\checkbibentry[2]
{
\tl_if_exist:cT {g__poirot_cite_used_#1_tl}
{ \bibitem{#1}{#2} }
}
\ExplSyntaxOff
\xpretocmd\@citex{\csname __poirot_mark_cite_as_used:n\endcsname{#2}}{}{\failed}
\makeatother
\begin{document}
\cite{a} \cite{c} \cite{a,b}
\begin{thebibliography}{99}
\checkbibentry{a}{some text to a}
\checkbibentry{b}{some text to b}
\checkbibentry{c}{some text to c}
\end{thebibliography}
\end{document}