我想在我的文档中包含一些来自外部 .tex 文件的段落,这与我\lipsum
所做的非常相似。据我所知,到目前为止,它相当于\input
直接输入文本和命令。
然而,当运行下面的 MWE 时
\begin{filecontents}{myTextFile.tex}
\ifthenelse{#2=1}{first paragraph}{}
\ifthenelse{#2=2}{second paragraph}{}
\end{filecontents}
\documentclass{report}
\usepackage{ifthen}
\newcommand\myParagraphs[2]{\input{#1}}
\begin{document}
\myParagraphs{myTextFile.tex}{2}
\end{document}
我收到错误消息
您不能在水平模式下使用“宏参数字符#”。
因此,‘#2’ 在我的文本文件.tex。我怎样才能让 #2 在那里被人知道,或者有没有更简单的方法来定义\myParagraphs{<file>}{<paragraph no>}
答案1
你不能那样做。 的定义\myParagraphs
不使用#2
;所以
\myParagraphs{myTextFile.tex}{2}
变成
\input{myTextFile}
因此 TeX 会读取你的文件,其中#2
是非法的。这里有一种方法:定义一个临时宏来扩展 的值#2
:
\begin{filecontents}{myTextFile.tex}
\ifthenelse{\second=1}{first paragraph}{}
\ifthenelse{\second=2}{second paragraph}{}
\end{filecontents}
\documentclass{report}
\usepackage{ifthen}
\newcommand\myParagraphs[2]{\def\second{#2}\input{#1}}
\begin{document}
\myParagraphs{myTextFile.tex}{2}
\end{document}
答案2
据我所知,您无法通过这种方式收集资料。您需要将每个段落存储在一个宏中,并为其命名,然后可以通过选项选择该名称。这就是lipsum
etc. 的工作原理。
使用etoolbox
其\csdef
宏来构建宏并\csuse
执行它们可能是一个想法。