我正在编写一个应该用于多个项目的规范文件。理想情况下,我希望有一个通用的 latex 文件,我可以在其中启用特定于项目的添加,但这些添加对于每个项目都是不同的。目前我正在使用\if
语句,但这会导致非常难以阅读的 tex 代码。理想情况下,我想将这些东西外部化到单独的文件中。我该如何实现这一点?
例子:
%TEX program = xelatex
\documentclass[10pt,oneside,article]{memoir}
\title{Specs for Project}
\newif\ifprojectA
\projectAfalse
\newif\ifprojectB
\projectBfalse
\begin{document}
\chapter{The Chapter}
The font in this project used should be \ifprojectA Times New Roman
\else \ifprojectB Palatino \else
Helvetica \fi
\end{document}
因此,如果没有定义任何项目,我会得到一个默认值,但如果我将其中一个项目设置为 true,我会得到一个特定的项目结果。我希望能够引用一个外部页面,\if
在那里我可以插入相关文本,而不是全部输入这些并将特定文本放在里面\if
。这可能吗?
答案1
您可以使用带名称的文件projectAfile1.tex
,projectBfile1.tex
然后使用
\projectinput{file1}
定义
\newcommand*\projectinput[1]{\input{project\ifprojectA A\else B\fi#1}}
或者可能更轻松,有两个文件夹projectA
,两个文件夹内projectB
都有文件file1.tex
,然后在序言中
\makeatletter
\edef\input@path{{project\ifprojectA A\else B\fi/}}
\makeatother
然后在文档中使用
\input{file1} % or \include{file1}
这取决于\ifprojectA
。(我简化了\if … fi
但我认为很容易理解。)
答案2
根据本页链接的相关部分,我想我几乎找到了解决方案:\仅输入文件的一部分。我现在正在做的是使用catchfilebetweentags
允许我基于标签包含 LaTex 的包。它与简短的文本片段一起\newcommand
允许我选择要包含的文本片段。为了优化这一点,我只想摆脱对默认文件的依赖,这样文本仍然更具可读性。
因此解决方案如下:
%TEX program = xelatex
\documentclass[10pt,oneside,article]{memoir}
\usepackage{catchfilebetweentags}
\title{Specs for Project}
\newif\ifprojectA
\projectAfalse
\newif\ifprojectB
\projectBfalse
\newcommand{\loadText}[1]{% define command
\ifprojectA\ExecuteMetaData[ProjectA.tex]{#1}%
\else\ifprojectB\ExecuteMetaData[ProjectB.tex]{#1}%
\else\ExecuteMetaData[Default.tex]{#1}%
\fi
}
\begin{document}
\chapter{The Chapter}
The default font for this project should be \loadText{font}.
\结束{文档}
我现在有 3 个名为 的 tex 文件ProjectA.tex
,ProjectB.tex
并且Default.tex
将根据哪个项目处于活动状态来使用。
因此Default.tex
看起来像:
%<*font>%
Helvetica%
%</font>
ProjectA.tex 将是:
%<*font>
Palatino
%</font>
等等。