答案1
我认为最简单的方法是使用包\foreach
提供的pgffor
。还有较低级别的\loop\ifnum\j<\k ... \repeat
循环也可以使用。但是,您需要将内循环包装在一个组中以屏蔽内循环\repeat
。
正如 Andrey 已经指出的那样,关于如何准确处理换行符,仍存在一个悬而未决的问题。我\\
在这里只是使用了,但您可能需要其他东西,这取决于确切的应用程序。但是,循环的原理用法是相同的。
\documentclass{article}
\usepackage{pgffor}
\newcommand\dummytext[3]{%
\foreach \n in {1,...,#3} {%
\foreach \k in {1,...,#2} {%
#1%
}%
\\
}%
}
\begin{document}
\dummytext{HelloWorld}{5}{10}% 10 lines of 5x 'HelloWorld'
\end{document}
答案2
还有一个使用 Plain TeX 风格的解决方案\loop
... \repeat
:
\documentclass{article}
\makeatletter
\newcommand{\dummy@line}[2]{%
\begingroup
\@tempcnta=#2
\loop\ifnum\@tempcnta>0
#1\space
\advance\@tempcnta by -1
\repeat
\endgroup}
\newcommand{\dummytext}[3]{%
\begingroup
\@tempcnta=#3
\par\noindent
\loop\ifnum\@tempcnta>0
\dummy@line{#1}{#2}\\
\advance\@tempcnta by -1
\repeat
\par
\endgroup}
\makeatother
\begin{document}
\dummytext{abc}{3}{3}
\end{document}
答案3
您已经提到了blindtext
。我的第一个想法是,为什么不使用它?您只需要重新定义\blindtext@text
即可获取字符串。其他值是的可选参数\Blindtext
。
不幸的是,缺失的空格也需要重新定义\blindtext
。如果您允许空格(请参阅问题的评论),则只需删除重新定义\blindtext
。
下面是一个例子。
\documentclass[11pt, a4paper,english]{article}
\usepackage{babel}
\usepackage{blindtext}
\begin{document}
\makeatletter
%Define text s
\renewcommand\blindtext@text{ab}
\renewcommand\blindtext@parstart{}%since blindtext version 2.0
%remove spaces
\renewcommand{\blindtext}[1][\value{blindtext}]{%
\blind@checklanguage
\blind@countxx=1 %
\loop
\blindtext@text% here was a \
\ifnum\blind@countxx<#1\advance\blind@countxx by 1 %
\repeat
}
\makeatother
%5 lines
%7repetions
\Blindtext[5][7]
\end{document}
答案4
使用 LaTeX3 时,它几乎是一行;\dummy_endline:
宏确保每行后一个段落结束;当然,如果字符串的副本超过一行,它们将被换行。如果您不关心Underfull \hbox
消息,请\linebreak
代替\dummy_endline:
。
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\dummy}{m m m}
{
\prg_replicate:nn { #3 }
{
\prg_replicate:nn { #2 } { #1 \hfill } \dummy_endline:
}
}
\cs_new:Npn \dummy_endline:
{ { \parfillskip=0pt\par } }
\ExplSyntaxOff
\begin{document}
\setlength{\parindent}{0pt}
\dummy{HelloWorld!}{5}{10}
\end{document}