自动将摘要导出至单独的文本文件

自动将摘要导出至单独的文本文件

假设我们要写一篇文章。第三方要求我们以文本文件形式提交摘要。

我可以自动将 LaTeX 文档的摘要导出到文本文件吗?理想情况下,在导出之前先展开缩写或其他 LaTeX 宏。

示例代码:

\documentclass{article}
\usepackage{siunitx}
\usepackage[acronym, toc, nonumberlist]{glossaries}
\title{Title of Document}
\author{Name of Author}

\newcommand{\texttest}{TEST}
\newacronym{BLSTM}{BLSTM}{bidirectional long short term memory network}

\begin{document}
\maketitle

\begin{abstract}
This is an abstract \texttest~with interesting abbreviations like \gls{BLSTM} and other macros like $\SI{15}{\second}$.
\end{abstract}

\end{document}

预期输出:

This is an abstract TEST with interesting abbreviations like bidirectional long short term memory network (BLSTM) and other macros like 15 s.

答案1

您必须维护\abstractdefs包含特殊定义的宏,以便扩展到所需的输出。下面的示例显示了您需要插入的内容,\abstractdefs以实现上述示例。此外,还有一个\stipdollars宏可以从输出中删除美元。

\documentclass{article}
\usepackage{siunitx}
\usepackage{environ}
\usepackage[acronym, toc, nonumberlist]{glossaries}
\title{Title of Document}
\author{Name of Author}

\newwrite\absfile
\NewEnviron{Abstract}{
   \immediate\openout\absfile=\jobname.abs
   \begingroup
      \def\tmp{}\abstractdefs 
      \expandafter\stripdollars\BODY$\relax
      \immediate\write\absfile{\tmp}%
   \endgroup
   \abstract\BODY\endabstract
}
\long\def\stripdollars#1${\edef\tmp{\tmp#1}\stripdollarsA}
\def\stripdollarsA{\futurelet\next\stripdollarsB}
\def\stripdollarsB{\ifx\next\relax\else \expandafter\stripdollars\fi}

\def\abstractdefs{
   \def~{ }
   \def\gls##1{##1}
   \def\SI##1##2{##1 ##2}
   \def\second{s}
   \def\par{^^J}
   \def\TeX{TeX}
}

\newcommand{\texttest}{TEST}
\newacronym{BLSTM}{BLSTM}{bidirectional long short term memory network}

\begin{document}
\maketitle

\begin{Abstract}
This is an abstract \texttest~with interesting abbreviations like \gls{BLSTM} 
\end{Abstract}

\end{document}

答案2

我不知道有哪个包可以做到这一点,并且将摘要中的所有命令扩展为纯文本可能是不可能的,因为 latex 不是设计用来将命令转换为纯文本的。

这是一个解决方案,它将摘要写入文件,扩展“它能做什么”。它使用环境包来定义一个新的Abstract环境和新文件包将摘要写入文件并在某种意义上“扩展”摘要。使用环境,Abstract摘要会像在 PDF 文件中一样正常显示,并且摘要的部分扩展版本会被写入\jobname.abs(即,带有扩展名的 LaTeX 文件的名称)abs。对于原始文件中的摘要,这将生成以下abs文件:

这是一个抽象的 TEST\nobreakspace {},其中包含有趣的缩写,如 \gls {BLSTM} 和其他宏,如 $\SI {15}{\second }$。

因此,已经进行了一些扩展,但原语(如与和命令\nobreakspace一起出现在输出中)是有代价的。我不知道如何做得更好。\gls\SI

完整代码如下:

\documentclass{article}
\usepackage{siunitx}
\usepackage{environ}
\usepackage{newfile}
\usepackage[acronym, toc, nonumberlist]{glossaries}
\title{Title of Document}
\author{Name of Author}

\newoutputstream{abstract}% define a new output file stream
\NewEnviron{Abstract}{
  \openoutputfile{\jobname.abs}{abstract}% open the abs file
  \addtostream{abstract}{\BODY}% write the abstract=\BODY to the file
  \closeoutputstream{abstract}%  close the file
  \abstract\BODY\endabstract%    add the abstract to the PDF file
}

\newcommand{\texttest}{TEST}
\newacronym{BLSTM}{BLSTM}{bidirectional long short term memory network}

\begin{document}
\maketitle

\begin{Abstract}
This is an abstract \texttest~with interesting abbreviations like \gls{BLSTM} and other macros like $\SI{15}{\second}$.
\end{Abstract}

\end{document}

答案3

这可能可以通过以下方式实现潘多克,正如在几篇有关的 问题

你应该能够做类似的事情:

pandoc -s example.tex -o /dev/stdout | grep -P abstract -A 2

我还没有尝试过,但如果有机会的话,我会更新这个答案。

相关内容