使用阿拉伯数字和实际数字进行循环

使用阿拉伯数字和实际数字进行循环

有没有简单的方法可以在.tex 中循环此脚本:

\immediate\openout\mytest1=test1.tex
\immediate\openout\mytest2=test2.tex
\immediate\openout\mytest3=test3.tex
\immediate\openout\mytest4=test4.tex
\immediate\openout\mytest5=test5.tex

我认为 \foreach 循环效果最好,但我对 Latex 如何查看变量并将它们附加到文本名称非常不熟悉。

如果有人能给我一个起点,那将会非常有帮助。

@David:我正在尝试使用您创建的示例来循环以下内容:

\newwrite\mytest1
\newwrite\mytest2
\newwrite\mytest3
\newwrite\mytest4
\newwrite\mytest5
\makeatletter
\NewEnviron{test1}{%
\toks@=\expandafter{\BODY}%
\immediate\write\mytest1{\the\toks@}}
\makeatother

\makeatletter
\NewEnviron{test2}{%
\toks@=\expandafter{\BODY}%
\immediate\write\mytest2{\the\toks@}}
\makeatother

\makeatletter
\NewEnviron{test3}{%
\toks@=\expandafter{\BODY}%
\immediate\write\mytest3{\the\toks@}}
\makeatother

\makeatletter
\NewEnviron{test4}{%
\toks@=\expandafter{\BODY}%
\immediate\write\mytest4{\the\toks@}}
\makeatother

\makeatletter
\NewEnviron{test5}{%
\toks@=\expandafter{\BODY}%
\immediate\write\mytest5{\the\toks@}}
\makeatother

我将您的代码保留在文档正文中,但将 \newwrite 行移到序言中的循环中以模仿上面的前五行。然后,我使用与您定义新环境相同的语言:test1、test2 等。然后我在 \NewEnviron 命令中使用附加的名称。最终,我希望代码为循环中的每个计数定义一个新环境,然后将该文本写入我们正在创建的新 .tex 文件中。但是,我想知道 \NewEnviron 是否因为扩展问题而拒绝该名称。

\makeatletter
\count@\z@
\loop
\advance\count@\@ne
\ifnum\count@<6
\expandafter\newwrite\csname mytest\the\count@ \endcsname
\expandafter\newwrite\csname test\the\count@ \endcsname
\NewEnviron{\csname test\the\count@ \endcsname}{%
\toks@=\expandafter{\BODY}%
\immediate\write\csname mytest\the\count@\endcsname{\the\toks@}}
\repeat

答案1

以下生成 test1.tex .. test5.tex

\makeatletter
\count@\z@
\loop
\advance\count@\@ne
\ifnum\count@<6
\expandafter\newwrite\csname mytest\the\count@\endcsname
\immediate\openout\csname mytest\the\count@\endcsname=test\the\[email protected]
\repeat

\stop

如果您希望命令名称是\mytestA...使用

\expandafter\newwrite\csname mytest\@Alph\count@\endcsname
\immediate\openout\csname mytest\@Alph\count@\endcsname=test\the\[email protected]

如果你希望文件名也使用字母,请使用

\expandafter\newwrite\csname mytest\@Alph\count@\endcsname
\immediate\openout\csname mytest\@Alph\count@\endcsname=test\@Alph\[email protected]

请注意,您不能使用 访问控件名称 mytest1\mytest1您需要\csname mytest1\endcsname

答案2

以下代码创建并打开文件

  • myAlphtestA.tex
  • myAlphtestB.tex
  • myAlphtestC.tex
  • myAlphtestD.tex
  • myarabictest1.tex
  • myarabictest2.tex
  • myarabictest3.tex
  • myarabictest4.tex
  • myRomantestI.tex
  • myRomantestII.tex
  • myRomantestIII.tex
  • myRomantestIV.tex

和“写入” \myAlphtestA,...,,\myRomantestI...,,\myarabictest1...,其中阿拉伯语只能通过 访问\csname myarabictest1\endcsname

(应该扩展密钥和/或使用已经为此制作的包...)

代码

\documentclass{article}
\usepackage{pgffor,pgfkeys}
\newcommand*{\fileset}{\pgfqkeys{/file}}
\makeatletter
\fileset{
    name/.initial=mytest,
    ext/.initial=tex,
    immediate/.code={\csname if#1\endcsname\let\file@immediate@or@not\immediate\else\let\file@immediate@or@not\relax\fi},
    immediate/.default=true,
    func/.code={\expandafter\let\expandafter\file@func\csname @#1\endcsname},
    newwrite/.code={\expandafter\newwrite\csname\pgfkeysvalueof{/file/name}\file@func{#1}\endcsname},
    openout/.code={\file@immediate@or@not\openout\csname\pgfkeysvalueof{/file/name}\file@func{#1}\endcsname=\pgfkeysvalueof{/file/name}\file@func{#1}.\pgfkeysvalueof{/file/ext}\relax},
    %defaults:
    func=Alph,
    immediate
}
\makeatother
\begin{document}
Hello World
\fileset{
    name=myAlphtest,
    newwrite/.list={1,...,4},
    openout/.list={1,...,4}
}

\fileset{
    func=arabic,
    name=myarabictest,
    newwrite/.list={1,...,4},
    openout/.list={1,...,4}
}

\fileset{
    func=Roman,
    name=myRomantest,
    newwrite/.list={1,...,4},
    openout/.list={1,...,4}
}
\end{document}

相关内容