我正在使用 MIT 论文模板排版论文。之前这里曾有人问过一个问题: https://tex.stackexchange.com/posts/97109/revisions
\typein [\files]{all}
\def\all{}
\ifx\files\all \typeout{Including all files.} \else \typeout{Including only \files.} \includeonly{\files} \fi
我对 LaTeX 的理解还处于初级阶段。我想在上面的代码中“输入”所有要处理的文件,这些文件我都用{all}
括号括起来,正如上一个关于这个问题的答案中规定的那样。但是,我收到了以下错误消息:
Emergency stop. \typein[\files]{all}
答案1
您必须测试是否\files
和\all
会扩展为相同的内容。
all
在输入提示符下输入,\files
将仅包含此标记all
。现在,要比较相同的内容,\all
必须扩展为具有相同的值,即\def\all{all}
。
如果测试失败,则应该仅包括列表中的内容,例如chap1
。
问题在于\typein
,它必须使用两次才能使链接和 ToC 信息正确,像往常一样,即需要两次输入。
\documentclass{book}
\begin{filecontents}{chap1}
\chapter{One}
\end{filecontents}
\begin{filecontents}{chap2}
\chapter{Two}
\end{filecontents}
\begin{filecontents}{chap3}
\chapter{Three}
\end{filecontents}
\typein [\files]{all}
\def\all{all}
\ifx\files\all \typeout{Including all files.} \else \typeout{Including only \files.} \includeonly{\files} \fi
\begin{document}
\tableofcontents
\include{chap1}
\include{chap2}
\include{chap3}
\end{document}
答案2
就我目前的能力而言,我现在是这样理解的:
\typein [\files]
运行脚本时要求 TeX 用户输入文件名或输入 all 文件名。它会提示用户:“Enter file names to process, (chapter1, chap2…), or `all’ to process all files:” This assigns the file names given or the word “all” to a macro called `\files`
\def\all{all}
创建一个名为
\all
代表“全部”的宏\ifx\files\all \typeout{Including all files.} \else \typeout{Including only \files.} \includeonly{\files} \fi
一个特殊的 if 条件语句,可以使用比较宏定义,
\ifx
如果用户的响应是(a)“全部”,则将其分配给\files
并且条件语句中的相等性成立并且测试为真,因此默认情况下包含所有文件,但如果(b)仅指定了某些文件,则“全部”的相等性(由宏定义表示\all
)不成立,测试不为真,因此条件中的第二个参数既输入又重新显示用户在提示中指定的文件的名称,分配给\files
,并且以下输出仅限于条件中第二个参数的第二部分中指定的那些文件:\includeonly{\files}