我正在尝试在我的参考书目中设置一个布尔值来选择是否缩写期刊标题。作为一个最小示例,请考虑此 bib 文件:
\newbool{abbrv}
\setbool{abbrv}{false}
\ifbool{abbrv}{@string{PRL="Phys. Rev. Lett."}}{@string{PRL="Physical Review Letters"}}
@article{person2022something,
author = {Person, Person},
journal = PRL,
number = {1},
pages = {100},
publisher = {APS},
title = {Something something},
volume = {123},
year = {2022}
}
我的理论是,我可以设置 abbrv 来选择是否缩写期刊。问题是,无论如何,无论 abbrv 是真还是假,第二个选项总是被选择,即 PRL="Physical Review Letters"。
我应该指出,我使用的是 overleaf 和 revtex。我的序言如下:
\documentclass[reprint,aps,prl,superscriptaddress,]{revtex4-2}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{bm}
\usepackage{etoolbox}
\usepackage[euler]{textgreek}
我是否错误地使用了 etools bool?还是其他原因导致它失败?
答案1
您可以将选择放在里面,并在文件的部分@string
中定义和设置布尔值。@preamble
.bib
\begin{filecontents*}[overwrite]{\jobname.bib}
@preamble{"\newbool{abbrv}\setbool{abbrv}{true}"}
@string{PRL="\ifbool{abbrv}{Phys. Rev. Let.}{Physical Review Letters}"}
@article{person2022something,
author = {Person, Person},
journal = PRL,
number = {1},
pages = {100},
publisher = {APS},
title = {Something something},
volume = {123},
year = {2022}
}
\end{filecontents*}
\documentclass[reprint,aps,prl,superscriptaddress,]{revtex4-2}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage{amssymb}
\usepackage{amsmath}
\usepackage{bm}
\usepackage{etoolbox}
\usepackage[euler]{textgreek}
\begin{document}
\cite{person2022something}
\bibliographystyle{plain}
\bibliography{\jobname}
\end{document}
结果:
请注意,如果在无法加载的另一个文档中使用 bib 文件,则会导致文件失败etoolbox
。可以使用内置的 LaTeX 条件语句来避免这种情况:
@preamble{"\newif\ifabbrv\abbrvtrue"}
@string{PRL="\ifabbrv Phys. Rev. Let.\else Physical Review Letters\fi"}
您可以使用 将布尔值设置为 true \abbrvtrue
(如上所述),或者使用 将布尔值设置为 false \abbrvfalse
。