提取浮点数并读取外部辅助文件以获取字幕中的超链接信息

提取浮点数并读取外部辅助文件以获取字幕中的超链接信息

我的目的是使用该endfloat包将所有图形(及其标题)提取到一个单独的pdf文件中。我想使用结合 bash 命令行和 emacs-lisp 的脚本来完成此操作。

我想这样做是因为,在我的文字编辑工作中,我需要将已接受版本的图表(及其标题)与格式化版本的图表进行比较。我知道这不是完美的解决方案(但我认为它在大多数情况下应该有效),所以欢迎提出不同/更好的想法。

这是我的 MWE(mydoc.tex文件):

\documentclass[11pt]{article}
\pagestyle{empty}
\usepackage{graphicx}
\usepackage{blindtext}
\usepackage[colorlinks=true,
,citecolor=blue
,linkcolor=blue]{hyperref}

\begin{document}
\section{Section 1}
\label{section1}
\blindtext

\begin{figure}[t]
    \centering
    \includegraphics[width=.49\columnwidth]{example-image-a}
    \caption{Dummy caption \cite{1} (see figure~\ref{fig3} in
      section~\ref{section3}).\label{fig1}}
\end{figure}

\section{Section 2}
\label{section2}
\blindtext

\begin{figure}[t]
    \centering
    \includegraphics[width=.49\columnwidth]{example-image-b}
    \caption{Dummy caption \cite{2} (see figure~\ref{fig1} in
      section~\ref{section1}).\label{fig2}}
\end{figure}

\section{Section 3}
\label{section3}
\blindtext
\blindtext

\begin{figure}[t]
    \centering
    \includegraphics[width=.49\columnwidth]{example-image-c}
    \caption{Dummy caption \cite{3} (see figure~\ref{fig2}
      section~\ref{section2}).\label{fig3}}
\end{figure}

\begin{thebibliography}{9}

\bibitem{1}
Dummy bibibtem

\bibitem{2}
Dummy bibibtem

\bibitem{3}
Dummy bibibtem

\end{thebibliography}
\end{document}

在此处输入图片描述

  1. 首先,我要生成并备份文件.aux。我将使用以下命令进行编译:

    latexmk -pdf mydoc.tex; cp mydoc.aux mydoc-bk.aux
    
  2. 然后我将使用以下命令进行编译:

    pdflatex "\nofiles"\
    "\AtBeginDocument{\usepackage[figuresonly,nolists]{endfloat}}"\
    "\nonstopmode"\
    "\input{mydoc.tex}"
    

生成mydoc.fff包含以下内容的文件:

\begin{figure}[t]
  \centering
  \includegraphics[width=.49\columnwidth]{example-image-a}
  \caption{Dummy caption \cite{1} (see figure~\ref{fig3} in
    section~\ref{section3}).\label{fig1}}
\end{figure}
\efloatseparator

\begin{figure}[t]
  \centering
  \includegraphics[width=.49\columnwidth]{example-image-b}
  \caption{Dummy caption \cite{2} (see figure~\ref{fig1} in
    section~\ref{section1}).\label{fig2}}
\end{figure}
\efloatseparator

\begin{figure}[t]
  \centering
  \includegraphics[width=.49\columnwidth]{example-image-c}
  \caption{Dummy caption \cite{3} (see figure~\ref{fig2}
    section~\ref{section2}).\label{fig3}}
\end{figure}
\efloatseparator

现在我创建一个新文件:(mynewdoc.tex这是一个临时解决方案):

\documentclass[11pt]{article}
\pagestyle{empty}
\usepackage{graphicx}
\usepackage{blindtext}
\usepackage[colorlinks=true,
,citecolor=blue
,linkcolor=blue]{hyperref}

\def\efloatseparator{\clearpage}

\begin{document}

\input{mydoc.fff}

\end{document}

我将编译如下:

pdflatex mynewdoc.tex

我的问题是:我可以强制 (pdf)latex 使用备份.aux文件进行编译以便在最终的 pdf 中获取正确的参考(显然没有有效的链接)吗?

我认为应该.aux以某种方式禁用文件的写入,因为其中一些labels已经在外部.aux文件中定义。

我的解决方案。我通过重命名.aux我想要读的内容mynewdoc.aux并加入\nofiles序言来解决这个问题。

替代解决方案。我还找到了使用此包的替代解决方案xcomment。生成正确的.aux文件后,我将使用以下命令进行编译:

pdflatex -jobname=mydoc \
"\RequirePackage{xcomment} \xcomment{figure}"\
"\nofiles"\
"\AtBeginDocument{\let\oldendfigure\endfigure"\
"\def\endfigure{\oldendfigure\clearpage}}"\
"\input{mydoc.tex}"

我会收到一个警告,因为\nofiles命令没有生效(有人可以帮我吗?)但生成的pdf文件不会有问题。

答案1

好的,我编写了两个执行相同操作的 Bash 脚本。

  1. 使用该endfloat包(我将其命名为 ExtractFiguresEndfloat.sh):

    #!/bin/bash
    TexFile=$1
    
    latexmk -pdf $TexFile
    
    pdflatex "\nofiles"\
    "\AtBeginDocument{\usepackage[figuresonly,nolists]{endfloat}}"\
    "\nonstopmode"\
    "\input{$TexFile}"
    
    pdflatex "\def\efloatseparator{\clearpage}"\
    "\nofiles"\
    "\let\olddocument\document"\
    "\renewcommand{\document}{\olddocument\input{\jobname.fff}\enddocument}"\
    "\nonstopmode\input{$TexFile}"
    

    用法:

    ExtractFiguresEndfloat.sh file.tex
    
  2. 使用该xcomment包(我将其命名为 ExtractFiguresXcomment.sh):

    #!/bin/bash
    TexFile=$1
    PREPRINT_ID=`basename $TexFile .tex`
    
    latexmk -pdf $TexFile
    
    pdflatex -jobname=$PREPRINT_ID \
    "\RequirePackage{xcomment} \xcomment{figure}"\
    "\nofiles"\
    "\AtBeginDocument{\let\oldendfigure\endfigure"\
    "\def\endfigure{\oldendfigure\clearpage}}"\
    "\nonstopmode"\
    "\input{$TexFile}"
    

    用法:

    ExtractFiguresXcomment.sh file.tex
    

我在几个文件上进行了测试并且它们可以工作(第一个文件有一个限制,因为endfloat需要将\end{figure}字符串放在行首……)。

我得到:

在此处输入图片描述

相关内容