全部 我想写一个结构如下的报告:
\begin{document}
\input[option=a]{class}
\input[option=b]{class}
\input[option=c]{class}
\input[option=d]{class}
\end{document}
class.tex的内容如下:
here are some shared content
switch(option)
case a
some text a
case b
some text b
case c
some text c
case d
some text d
endswitch
Here maybe more shared content.
在Latex中有没有办法做到这一点?
谢谢。
答案 0 :(得分:0)
据我了解,您想要的是更新文本的每个不同部分的功能,同时在一个地方定义功能。
执行此操作的简单方法是在每个部分的开头更新变量命令。
开始时: \ newcommand {\ VARIABLENAME} {VARIABLE_1}
在以下部分: \ renewcommand {\ VARIABLENAME} {variable_2的}
还有更多高级方法可以做到这一点,包括定义变量,但总而言之,它更具可读性,更易于实现。
注意:如果你打算创建一些比一个类更动态的东西,我建议用另一种语言(如python)实现一些东西来在LaTex中编写文件,因为它通常会给修改提供更多的空间。 / em>的
答案 1 :(得分:0)
您可以使用以下(粗略)方法识别要从文件中提取内容的文本组件:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{class.tex}
switch(option)
case a
some text a
case b
some text b
case c
some text c
case d
some text d
endswitch
\end{filecontents*}
\usepackage{catchfile}
% \inputclass{<file>}{<from>}{<to>}
\newcommand{\inputclass}[2]{%
\CatchFileDef{\class}{class.tex}{}%
\long\def\classsegment##1#1 ##2 #2##3\relax{##2}%
\show\classsegment
\expandafter\classsegment\class\relax
}
\begin{document}
\inputclass{case c}{case d}
\inputclass{case a}{case b}
\inputclass{case d}{endswitch}
\inputclass{case b}{case c}
\end{document}
相关:
\input
only part of a file 最后一个是使用catchfilebetweentags
package的更具适应性的方法。这需要在您的代码中插入适当的标记,这可能没有用处。您还可以使用listings
包含外部文件中的特定代码行。
答案 2 :(得分:0)
这样做的简化方法可以是使用if else fi
逻辑
在.tex
文件的顶部设置了一个带
\newif\ifswitch
默认值为false
。要将值设置为true
,请使用
\switchtrue
然后在文档的文本中使用
\ifswitch
<<text to include if switch is true>>
\else
<<text to include if switch is false>>
\fi % ends the if statement
因此,对于您的特定问题,您可以拥有一组开关
\newifConditionA
\newifConditionB
\newifConditionC
\newifConditionD
这不如使用switch
语句那么优雅,但允许例如同时需要来自A和C的文本的条件。
此处讨论此处的参考资料 two versions of a document with 'if else' logic statements