![未定义的控制序列 \bbljan](https://linux22.com/image/260420/%E6%9C%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E6%8E%A7%E5%88%B6%E5%BA%8F%E5%88%97%20%5Cbbljan.png)
我正在为俄语文章写参考书目。使用\bibliographystyle{plain}
不是一个选项,因为它在列出作者时使用例如连词“and”。所以我坚持使用\bibliographystyle{ugost2008}
,但它一直抱怨\bbljan
未定义。我认为\bbljan
应该将英语扩展为“January”,将俄语扩展为“Январь”。但我babel
显然对此一无所知\bbljan
。我目前正在使用
\def\bbljan{Январь}
但这不是很糟糕吗?我该怎么办?
答案1
宏\bbljan
设置在 中merlin.mbs
,这是使用系统创建 BibTeX 样式的主文件custom-bib
。因此,您\bbljan
主要在.bst
以此方式创建的文件中找到。据推测,的作者ugost2008
使用了custom-bib
但随后删除了设置\bbljan
(的部分。ETC。) 出于某种原因。解决方法是自己定义这些,就像您所做的那样,但理想情况下.bst
应该修复文件以正确定义宏或根本不使用它们。
答案2
我的序言包含以下定义
\usepackage{hyperref}
\usepackage{polyglossia}
\bibliographystyle{ugost2008ns}
\usepackage[numbers,square]{natbib}
\newfontfamily\russianfont{Times New Roman}
\setmainfont{Times New Roman}
\bbljan
我对、、\bblfeb
...函数也遇到同样的问题。
首先,我做了一些重写ugost2008ns
,位于/usr/share/texlive/texmf-dist/bibtex/bst/gost/ugost2008ns.bst
我将所有\bbl*
函数替换为另一个可立即执行的函数ugost2008ns
MACRO {jan} {"jan"}
MACRO {feb} {"feb"}
MACRO {mar} {"mar"}
MACRO {apr} {"apr"}
MACRO {may} {"may"}
MACRO {jun} {"jun"}
MACRO {jul} {"jul"}
MACRO {aug} {"aug"}
MACRO {sep} {"sep"}
MACRO {oct} {"oct"}
MACRO {nov} {"nov"}
MACRO {dec} {"dec"}
format.date
这是实现这些的新功能\bbl*
FUNCTION {format.date}
{ year empty$
{ month empty$
{ "" }
{ "there's a month but no year in " cite$ * warning$
month
}
if$}
{ curlanguage "russian" =
{ month empty$
{ year }
{ month "jan" =
{ year "\cyrya\cyrn\cyrv." }
{ month "feb" =
{ year "\cyrf\cyre\cyrv\cyrr." }
{ month "mar" =
{ year "\cyrm\cyra\cyrr\cyrt" }
{ month "apr" =
{ year "\cyra\cyrp\cyrr." }
{ month "may" =
{ year "\cyrm\cyra\cyrishrt" }
{ month "jun" =
{ year "\cyri\cyryu\cyrn\cyrsftsn" }
{ month "jul" =
{ year "\cyri\cyryu\cyrl\cyrsftsn" }
{ month "aug" =
{ year \cyra\cyrv\cyrg\. }
{ month "sep" =
{ year "\cyrs\cyre\cyn\cyrt." }
{ month "oct" =
{ year "\cyro\cyrk\cyrt." }
{ month "nov" =
{ year "\cyrn\cyro\cyrya\cyrb." }
{ month "dec" =
{ year "\cyrd\cyre\cyrk." }
{ year "Nomember" }
if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}
{ month empty$
{ year }
{ month "jan" =
{ year "Jan." }
{ month "feb" =
{ year "Feb." }
{ month "mar" =
{ year "Mar." }
{ month "apr" =
{ year "Apr." }
{ month "may" =
{ year "May" }
{ month "jun" =
{ year "June" }
{ month "jul" =
{ year "July" }
{ month "aug" =
{ year "Aug." }
{ month "sep" =
{ year "Sept." }
{ month "oct" =
{ year "Oct" }
{ month "nov" =
{ year "Nov." }
{ month "dec" =
{ year "Dec." }
{ year "Nomember" }
if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}if$}
if$}
if$}
extra.label * % new in v.1.2
}
按照GOST 7.12-93
和完成的月份缩写GOST 7.11-2004 (ISO 832:1994)
。
此后,我收到新的错误 - “命令\cyra
, \cyrb
, ... 在编码 EU1 中不可用”。此问题由软件包引起hyperref
。为了解决此问题,我将下一个代码放在 之前\begin{document}
。
\newcommand{\cyr}[0]{}
\renewcommand{\cyra}[0]{а}
\renewcommand{\cyrb}[0]{б}
\renewcommand{\cyrv}[0]{в}
\renewcommand{\cyrg}[0]{г}
\renewcommand{\cyrd}[0]{д}
\renewcommand{\cyre}[0]{е}
\renewcommand{\cyryo}[0]{ё}
\renewcommand{\cyrzh}[0]{ж}
\renewcommand{\cyrz}[0]{з}
\renewcommand{\cyri}[0]{и}
\renewcommand{\cyrishrt}[0]{й}
\renewcommand{\cyrk}[0]{к}
\renewcommand{\cyrl}[0]{л}
\renewcommand{\cyrm}[0]{м}
\renewcommand{\cyrn}[0]{н}
\renewcommand{\cyro}[0]{о}
\renewcommand{\cyrp}[0]{п}
\renewcommand{\cyrr}[0]{р}
\renewcommand{\cyrs}[0]{с}
\renewcommand{\cyrt}[0]{т}
\renewcommand{\cyru}[0]{у}
\renewcommand{\cyrf}[0]{ф}
\renewcommand{\cyrh}[0]{х}
\renewcommand{\cyrc}[0]{ц}
\renewcommand{\cyrch}[0]{ч}
\renewcommand{\cyrsh}[0]{ш}
\renewcommand{\cyrshch}[0]{щ}
\renewcommand{\cyrsftsn}[0]{ь}
\renewcommand{\cyrery}[0]{ы}
\renewcommand{\cyrhrdsn}[0]{ъ}
\renewcommand{\cyrerev}[0]{э}
\renewcommand{\cyryu}[0]{ю}
\renewcommand{\cyrya}[0]{я}
\renewcommand{\CYRA}[0]{А}
\renewcommand{\CYRB}[0]{Б}
\renewcommand{\CYRV}[0]{В}
\renewcommand{\CYRG}[0]{Г}
\renewcommand{\CYRD}[0]{Д}
\renewcommand{\CYRE}[0]{Е}
\renewcommand{\CYRYO}[0]{Ё}
\renewcommand{\CYRZH}[0]{Ж}
\renewcommand{\CYRZ}[0]{З}
\renewcommand{\CYRI}[0]{И}
\renewcommand{\CYRY}[0]{Й}
\renewcommand{\CYRK}[0]{К}
\renewcommand{\CYRL}[0]{Л}
\renewcommand{\CYRM}[0]{М}
\renewcommand{\CYRN}[0]{Н}
\renewcommand{\CYRO}[0]{О}
\renewcommand{\CYRP}[0]{П}
\renewcommand{\CYRR}[0]{Р}
\renewcommand{\CYRS}[0]{С}
\renewcommand{\CYRT}[0]{Т}
\renewcommand{\CYRU}[0]{У}
\renewcommand{\CYRF}[0]{Ф}
\renewcommand{\CYRH}[0]{Х}
\renewcommand{\CYRC}[0]{Ц}
\renewcommand{\CYRCH}[0]{Ч}
\renewcommand{\CYRSH}[0]{Ш}
\renewcommand{\CYRSHCH}[0]{Щ}
\renewcommand{\CYRSFTSN}[0]{Ь}
\renewcommand{\CYRERY}[0]{Ы}
\renewcommand{\CYRHRDSN}[0]{Ъ}
\renewcommand{\CYREREV}[0]{Э}
\renewcommand{\CYRYU}[0]{Ю}
\renewcommand{\CYRYA}[0]{Я}
我使用:linux、kile、XeLaTeX 进行编译,并使用 Zotero 导入 BiBtex(也被我破解了,因为它不提供原生的俄语支持)。
也许这可以进行优化或变得更容易,但我使用这些东西还不到一个月。
希望这有帮助。