在 TeXmaker 中正确使用 bibTeX 和 'build' 子目录

在 TeXmaker 中正确使用 bibTeX 和 'build' 子目录

在 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.texPDFLaTeX、编译a.texbibTeX,然后再编译a.texPDFLaTeX2 次之后)为:

  • ./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文件,其中一些文件应该被处理(例如,footbibmultibib),而另一些则不应该。

@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

相关内容