情况

情况

LaTeX 能否原生地仅包含输入文件中的特定表达式(忽略其余部分)?我不确定如何最好地表达我的问题。下面是我想要做的一个例子。

情况

例如,假设我有许多包含各种代码的文件,但每个文件都有一个共同点,即摘要环境。

我决定创建一个包含所有其他文档摘要的文档。对于有意义的文档,我需要获取输入文件的名称并仅从输入中包含以下代码:

\begin{summary}
A bunch of text.
\end{summary}

以下是示例文件结构:

Documents/
  JimsAdventures.tex
  CrazyGorilla.tex
  BrightHorizon.tex
  MoonLanding.tex
  Summaries.tex <-- includes summaries of all other tex files and their file names

如果 Summaries.tex 可以自动检测 Documents 文件夹中的新文件,使其完全自动化,那就太好了(显然这是一个奖励,而不是问题的标准)。

我知道使用脚本语言可以通过调用带有与或--shell-escape组合的选项的shell 脚本来实现这一点,但这在本机中可行吗?\immediate\write18\include{|myscript.sh}LaTeX


更新日期:2015 年 6 月 30 日

根据 Werner 的建议的解决方案:

LaTeX 确实支持该功能catchfilebetweentags。但它不支持自动输入文件列表(例如,在同一个文件夹中)(除非文件名之间的唯一变化是数字:在这种情况下,您可以使用序列(参见包括目录内的所有文件) 。

为了避免使用--shell-escape和维护独立于操作系统的工作流程,可以通过创建一个单独的文件(例如 Documents.txt)来实现相同的目的,该文件包含文档(故事)的名称(或路径,取决于您是否要使用宏重建路径)。要使 Summaries.tex 自动化,您可以引用此文件(例如 Documents.txt),而不是让 LaTeX 使用--shell-escape+ 外部脚本生成它。当然,100% 自动化需要一个运行预编译脚本的系统,该脚本收集您想要包含的所有 tex 文件并预先将它们吐出到 Documents.txt 中。

https://tex.stackexchange.com/a/4952/13552

答案1

目前尚不清楚您的目标是什么,但这可能就是您所寻找的。

文件summaryfile.tex(包含所有摘要)

\begin{summary}{notthisone}
Blah blah Blah blah Blah blah Blah blah Blah blah
Blah blah Blah blah Blah blah Blah blah Blah blah
Blah blah Blah blah
\end{summary}

\begin{summary}{test-summary}
This is the summary we want to typeset. Let's make
it long enough to be split across two or maybe
three lines. Is this sufficient?
\end{summary}

文件test-summary.tex

\documentclass{article}
\usepackage{environ,pdftexcmds}

\makeatletter
\NewEnviron{summary}[1]{%
  \ifnum\pdf@strcmp{#1}{\jobname}=\z@
    \begin{center}\bfseries Summary\end{center}
    \begin{quote}\BODY\end{quote}
  \fi
}
\makeatother

\begin{document}

\input{summaryfile}

\end{document}

输出

在此处输入图片描述

相关内容