![MiKTeX 和 babel:缺少檔案且需要安裝無用的套件](https://rvso.com/image/335478/MiKTeX%20%E5%92%8C%20babel%EF%BC%9A%E7%BC%BA%E5%B0%91%E6%AA%94%E6%A1%88%E4%B8%94%E9%9C%80%E8%A6%81%E5%AE%89%E8%A3%9D%E7%84%A1%E7%94%A8%E7%9A%84%E5%A5%97%E4%BB%B6.png)
在很長一段時間沒有更新 MiKTeX 2.9 後,我幾天前更新了。我有
pdfTeX 3.14159265-2.6-1.40.16, LaTeX2e <2014/05/01>, babel <3.8m>,
現在我有
pdfTeX 3.14159265-2.6-1.40.17, LaTeX2e <2016/03/31>, babel <3.9r>.
中間發生了一些(壞的)事情:現在,每當我使用這個babel
包(與任何語言),MiKTeX 告訴我bblopts.cfg
缺少該文件,需要安裝該arabi
包 - 該包實際上包含該文件。
請注意,我什至在格式文件中沒有阿拉伯語連字符,並且在忽略該請求後,tex 文件的編譯沒有錯誤。事實上,相當奇怪的事實是,這bblopts.cfg
是一個可選文件:它只出現在這行程式碼中babel.sty
:
\InputIfFileExists{bblopts.cfg}
…
不管怎麼說......為了克服僵局,因為我不需要這個arabi
包,所以我只是創建了一個空檔bblopts.cfg
。這非常MiKTeX 的奇怪行為如下:
如果
bblopts.cfg
是在 tex 路徑中,例如C:\localtexmf\tex\generic\babel
,findtexmf
返回正確的路徑C:\localtexmf\tex\generic\babel
,MiKTeX 包括
bblopts.cfg
,如日誌檔案所示* Local config file bblopts.cfg used
*
(C:\localtexmf\tex\generic\babel\bblopts.cfg).
但它仍然說
bblopts.cfg
缺少這個包,我必須安裝這個arabi
包!
如果
bblopts.cfg
在目前資料夾中,findtexmf
返回正確的路徑.\bblopts.cfg
MiKTeX 包括
bblopts.cfg
,如日誌檔案所示* Local config file bblopts.cfg used
*
(bblopts.cfg).
和不出現警告或軟體包安裝要求!
有人有線索嗎?是我一個人的問題還是 MiKTeX 的 bug?如果您想嘗試,請確保尚未arabi
安裝該軟體包並將該babel
軟體包添加到您的 tex 檔案中。一個玩具範例可以是:
\documentclass{article}\usepackage[british]{babel}\begin{document}.\end{document}
以防萬一:我的作業系統是 Windows 7 SP1 Enterprise...
答案1
來自bblopts.cfg
arabi 的位於tex\latex
.您將您的版本放入tex\generic
.現在 Latex 不會先搜尋本地 texmf 樹,然後搜尋主樹,而是遵循某種鋸齒形路徑(請參閱https://tex.stackexchange.com/a/79983/2388)。
這意味著當\InputIfFileExists
處理 miktex 時,它首先找到bblopts.cfg
來自 arabi 的文件,然後嘗試下載它。
您可以將本機檔案(例如)放入 來避免這種情況localtexmf\tex\latex\babel
。
附註:恕我直言,bblopts.cfg
今天的 from arabi 是不必要的,應該刪除或移動到 doc 資料夾(它位於 texlive 中)。
答案2
顯然這是 MikTeX 的錯誤。作為解決方法,請嘗試
\usepackage[noconfigs,british]{babel}
該選項的noconfigs
作用正如其名稱所示。
答案3
我自己剛剛遇到了這個錯誤。在 babel 手冊中搜索bblopts.cfg
,我發現了以下解釋:
擴展 babel 的「已知」選項清單的另一種方法是建立
bblopts.cfg
一個可以在其中新增選項聲明的檔案。但是,這種機制已被棄用 - 如果您想要一種語言的替代名稱,只需建立一個.ldf
載入實際名稱的新檔案即可。
看起來 MikTeX 錯誤是假設這個可選檔案(來自已棄用的方法)必須絕對存在。該arabi
套件必須使用這個已棄用的方法來整合到 babel 生態系統中。
我很驚訝 MikTeX 沒有修復這個長期存在的錯誤。