\input 文件中的宏参数字符

\input 文件中的宏参数字符

我想在我的文档中包含一些来自外部 .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

据我所知,您无法通过这种方式收集资料。您需要将每个段落存储在一个宏中,并为其命名,然后可以通过选项选择该名称。这就是lipsumetc. 的工作原理。

使用etoolbox\csdef宏来构建宏并\csuse执行它们可能是一个想法。

相关内容