使用“预编译”辅助文件来避免 arxiv 的限制

使用“预编译”辅助文件来避免 arxiv 的限制

看来 arXiv 编译我的文档的次数不够多(在某些时候它会停止,说它已达到最大尝试次数)。因此,我的文档的某些部分看起来不太好(而如果我使用 latexmk 进行编译,它会按预期工作)。

我尝试添加一个main.aux文件,但 arXiv 自动删除了我的文件。我还尝试创建一个main_backup.aux包含副本的文件main.aux(这个文件不会被删除),但我在前面添加了\begin{document}

\IfFileExists{main_backup.aux}{
  \message{We saw a default backup.aux file, let's use it instead of the main aux file.}
  \nofiles % Disable default aux file
  \makeatletter
  \input{main_backup.aux}
  \makeatother
}{}

但这有两个问题:

  1. 在本地,它可以毫无错误地进行编译,并且我的文档看起来更好......除了现在内容表是空的!
  2. 在 arxiv 上,加载 aux 文件后立即出现错误:
We saw a default backup.aux file, let's use it instead of the main aux file.
No auxiliary output files.

(./main_backup.aux

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...

l.23 \abx@aux@cite{0}{K
il88_FoundingCrytpographyOblivious}
?
! Emergency stop.
...

l.23 \abx@aux@cite{0}{K
il88_FoundingCrytpographyOblivious}
No pages of output.
Transcript written on main.log.

[verbose]: latex 'main.tex' failed.
[verbose]: TEXMFCNF is unset.

请注意,这个错误似乎出现在我的 aux 文件的这一行:

\@writefile{toc}{\authcount {1}}
\abx@aux@cite{0}{Kil88_FoundingCrytpographyOblivious}

其中再次提到了目录……所以我的两个问题可能都有关联。

编辑 我也尝试过:

\IfFileExists{main_backup.aux}{
  \message{We saw a default backup.aux file, let's use it instead of the main aux file.}
  \makeatletter
  \usepackage{etoolbox}
  %% Try to patch the command given in
  %% https://tex.stackexchange.com/questions/285798/how-and-when-is-the-aux-file-read-and-processed
  % \regexpatchcmd{\enddocument}{\@@input\jobname.aux}{\@@input{main_backup.aux}}
  \patchcmd{\enddocument}{\@@input\jobname.aux}{\@@input{main_backup.aux}}{}{}
  %\input{main_backup.aux}
  \makeatother
}{}

但补丁似乎没有起作用。

编辑

我也尝试过:

%%%% Really dirty trick because arxiv does not compile enough the document, so we need our own aux file:
\IfFileExists{main_backup.aux}{
  \IfFileExists{main.aux}{}{
    \message{We saw a default backup.aux file, let's use it instead of the main aux file.}
    \makeatletter
    \input{main_backup.aux}
    \makeatother
  }
}{}


\begin{document}
...

这确实在本地有效,但在 arxiv 服务器上无效,它再次失败并出现这个烦人的相同错误……

答案1

你可以使用

\documentclass{article}
\usepackage{biblatex}
\makeatletter
\@writefile{toc}{\authcount {1}}
\abx@aux@cite{0}{Kil88_FoundingCrytpographyOblivious}


\begin{document}
x
\end{document}

在 texlive 2022 和 2023 中运行时没有错误,但在 2020 年出现

! LaTeX Error: Missing \begin{document}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.5 \abx@aux@cite{0}{K
                      il88_FoundingCrytpographyOblivious}
?

请注意,这不是您显示的格式,因为il88缩进超过了,K但我怀疑这是您遇到的错误。(我想不出任何方法来获取您显示的错误。)

旧版本\abx@aux@cite只有一个参数,因此看起来您可以简单地编辑保存的文件以删除第一个数字参数,它应该足够接近第一次运行,第二次运行将选择一个真正的 2020 辅助。

\documentclass{article}
\usepackage{biblatex}
\makeatletter
\@writefile{toc}{\authcount {1}}
\abx@aux@cite{Kil88_FoundingCrytpographyOblivious}


\begin{document}
x
\end{document}

2020 年运行无错误;2023 年则报错

Runaway argument?
! Paragraph ended before \abx@aux@cite was complete.
<to be read again> 
                   \par 
l.6 
    
? 

答案2

好的,之后进一步挖掘,问题在于 arXiv 使用了一种名为 autotex 的工具,该工具在使用 DVI 输出时无法处理某些类型的动态图片(即使在我的测试中,DVI 在本地运行良好,问题似乎出在 autotex 上),因此 tikz 的图片可能会出错。通过输入:

\pdfoutput=1

在第一行,您强制 arXiv 编译为 pdf。放入a4paper类也可能阻止 arXiv 尝试处理几何图形。

如果由于某些原因,您甚至无法使用上述文本使其工作,那么更简单的方法可能是直接提交 PDF,并使用以下内容隐藏 pdf 由 LaTeX 生成的事实(否则 arXiv 将不允许您提交 pdf):

\usepackage{hyperref}
% Hide to arXiv that this pdf is produced by LaTeX:
\pdfsuppressptexinfo=-1 
\hypersetup{
  pdfproducer={},
  pdfcreator={},
}

相关内容