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 中。
答案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}