我有这个命令\loremlines{n}
,它可以生成多行n
的lipsum文本。但是,它与 配合使用效果不佳\lettrine
(如下所示)。我还希望能够在其他环境中使用该命令,因此想要一个更“通用”的命令\loremlines
,可以在很多情况下使用,而不仅仅是lettrine
。
梅威瑟:
\documentclass{article}
\usepackage{lettrine}
\usepackage{lipsum,multicol}
% This is from a .sty file:
\RequirePackage{parskip}
\newbox\one
\newbox\two
\long\def\loremlines#1{%
\setbox\one=\vbox {%
\lipsum%
}
\setbox\two=\vsplit\one to #1\baselineskip
\unvbox\two}
\begin{document}
\lettrine{1}{} \textbf{Step 1} \loremlines{3}
\section{\loremlines{1}}
\begin{center}
\begin{tabular}{|p{0.47\textwidth}|p{0.47\textwidth}|}
\hline
{\loremlines{2} } & {\loremlines{3} } \\
\hline
\end{tabular}
\end{center}
\loremlines{2}
\end{document}
结果:
结果没有parskip
(几乎期望输出):
我希望文本继续与“步骤 1”在同一行。
n
另外,我可以使用打印lipsum 单词的命令。
要明确的是: 我只想要从 lipsum 打印单词的命令,大约是n
行长。有没有办法计算 LaTeX 换行符并继续打印单词直到n
达到换行符?我希望它遵循当前的格式。如果它在段落中间被调用,它应该继续在该段落内运行,而不是开始新的段落。
答案1
我看不出这与该parskip
包裹有任何关联。
您必须将“letrine”设计的段落开头包含在分割框中。我建议设置宏的第二个参数\loremlines
来获取段落的开头:
\documentclass{article}
\usepackage{lettrine}
\usepackage{lipsum,multicol}
% This is from a .sty file:
\RequirePackage{parskip}
\def\afterfi#1#2\fi{\fi#1}
\def\loremlines{\futurelet\next\loremlinesA}
\def\loremlinesA{\ifx\next[\afterfi{\loremlinesB}\else\afterfi{\loremlinesB[]}\fi}
\long\def\loremlinesB[#1]#2{%
\setbox0=\vbox {%
\penalty0
\ifx^#1^\else #1\hfil\break \fi
\lipsum%
}
\setbox2=\vsplit0 to0pt
\setbox0=\vsplit0 to \numexpr#2\ifx^#1^\else+1\fi\baselineskip
\unvbox0
}
\begin{document}
\loremlines [\lettrine{1}{} \textbf{Step 1}] {4}
\bigskip
\loremlines {4}
\end{document}
答案2
您无法重新排列框起来的段落,因此请反转操作顺序:
\documentclass{article}
\usepackage{lettrine}
\usepackage{lipsum,multicol}
% This is from a .sty file:
\RequirePackage{parskip}
\newbox\one
\newbox\two
\newcommand\loremlines[3]{%
\setbox\one=\vbox {%
\lettrine{#1}{} \textbf{#2} \lipsum%
}
\setbox\two=\vsplit\one to #3\baselineskip
\unvbox\two}
\begin{document}
\loremlines{1}{Step 1}{3}
\end{document}