书目引用代码修改以实现自动化

书目引用代码修改以实现自动化

其中一个答案如下:如何使只引用的 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}

在此处输入图片描述

相关内容