在 Texmaker 中,我启用了“使用‘build’子目录来输出文件”选项。
问题是我无法同时启用该选项和使用 bibTeX 格式。如果我启用该选项并尝试同时使用 bibTeX,则 pdf 输出文件中没有“参考文献”部分,并且在正文中,只显示关键名称参考,而不是参考文献的数量。例如:
这是主文件的代码a.tex
:
\documentclass{article}
\usepackage[backend=bibtex]{biblatex}
\addbibresource{r}
\begin{document}
This is the reference: \cite{kingma2014adam}.
\printbibliography
\end{document}
这是的内容r.bib
:
@article{kingma2014adam,
title={Adam: A method for stochastic optimization},
author={Kingma, Diederik P and Ba, Jimmy},
journal={arXiv preprint arXiv:1412.6980},
year={2014}
}
由于我启用了子目录选项build
,所以文件的位置(在编译a.tex
为PDFLaTeX
、编译a.tex
为bibTeX
,然后再编译a.tex
为PDFLaTeX
2 次之后)为:
./a.tex
./build/r.tex
./build/build/r.log
并且还有其他几个文件./build
。
输出的 pdf 文件只有一行,如下所示:
这是参考:[kingma2014adam]。
当使用子目录时,如何正确添加参考部分build
?
谢谢。
答案1
我不知道是否存在纯 (pdf)(La)TeX 解决方案。但我遇到了类似的问题(与bibtex
),并使用下面的脚本(Windows 批处理)调用bibtex
(如果需要,您可以轻松地将其调整为biber
)并将其提供给 TeXmaker 以代替本机bibtex %
(或biber %
)命令来修复它:
@echo off
set dopause=0
set BUILDIR=e:\build
echo BIBTEX-Build %0
copy *.bib %BUILDIR% 1> nul 2>&1
copy *.bst %BUILDIR% 1> nul 2>&1
cd /d %BUILDIR%
Setlocal EnableDelayedExpansion
call :bibit %~n1
goto end
:bibit
echo ------ Processing %1 -------
@bibtex %~n1
if %errorlevel% NEQ 0 ( set dopause=1 )
exit /b
:end
cd ..
IF !dopause! NEQ 0 pause ELSE PING -n 3 127.0.0.1>nul
这假设.bib
文件位于主(工作)目录中,并考虑到文件.bst
也可能位于此目录中。处理在build
文件所在的目录中执行.aux
,并且 LaTeX 将在下次运行时找到该.bbl
文件。延迟到子脚本的代码:bibit
可实现方便的错误处理(仅在成功处理的情况下自动关闭)。
我真正使用的是下面更复杂的版本,它可以处理多个.aux
文件,其中一些文件应该被处理(例如,footbib
或multibib
),而另一些则不应该。
@echo off
set dopause=0
set BUILDIR=e:\build
echo BIBTEX-Build %0
copy *.bib %BUILDIR% 1> nul 2>&1
copy *.bst %BUILDIR% 1> nul 2>&1
cd /d %BUILDIR%
Setlocal EnableDelayedExpansion
for %%f in (*.aux) do (
set ext=%%~xf
IF NOT !ext!==.auxlock (
sed -r -n -e "/\\bibdata\{[^\}]+\}/ s/\\bibdata\{([^\}]+)\}/\1/p" %%~nf.aux > %%~nf.bd
)
)
for %%g in ( *.bd) do (
IF NOT %%~zg==0 (
call :bibit %%~ng.aux
) ELSE (
echo Skipping %%~ng.aux
del %%g
)
)
goto end
:bibit
echo ------ Processing %1 -------
@bibtex %~n1
if %errorlevel% NEQ 0 (
rem PING -n 2 127.0.0.1>nul
set dopause=1
)
del %~n1.bd
exit /b
:end
cd ..
IF !dopause! NEQ 0 pause ENSE PING -n 3 127.0.0.1>nul