我想编写一个宏,它可以执行某些操作,并且该宏后面有固定数量的行。
例如,如何应用于\rightskip=2cm
段落的前四行
如何编写一个宏来了解一些命令\rightskip
,\bfseries
以及这些命令将影响的行数?
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\lipsum[1-2]
\end{document}
答案1
段落形状
段落的几何形状可以用 配置\parshape
,例如:
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\parshape 5 % five pairs of settings for the left and right indent of a line
0pt \dimexpr\linewidth-2cm\relax % first line
0pt \dimexpr\linewidth-2cm\relax
0pt \dimexpr\linewidth-2cm\relax
0pt \dimexpr\linewidth-2cm\relax % fourth line
0pt \linewidth % remaining lines
\lipsum[1]
\end{document}
另请参阅问题的答案如何用 LaTeX 定义 parshape 命令?以获得更舒适的解决方案。
字体更改
字体更改没有简单的解决方案。循环依赖存在问题:段落生成器需要知道字体才能知道文本组件的宽度,从而将段落分成几行。但是,在此阶段,将前四行加粗已不再可能;而且宽度会发生变化,行会太长。
手动解决方案
首先将段落设置为粗体,编译文档并检查结果以获取第四行和第五行之间的断点。对于 的连字模式latin
,它位于 之后Pellentesque
。当更改前四行文本的字体时,段落生成器可能会找到不同的断点。因此,以下示例关闭段落,强制最后一行填充整个行宽。然后添加一个新段落,没有额外的垂直空间和抑制段落缩进。
\documentclass{article}
\usepackage{lipsum}
\usepackage[latin]{babel}
\begin{document}
\begingroup
\bfseries
Lorem ipsum dolor sit amet, consectetuer
adipiscing elit. Ut purus elit, vestibulum ut, placerat ac,
adipiscing vitae, felis. Curabitur dictum gravida mauris. Nam arcu
libero, nonummy eget, consectetuer id, vulputate a, magna. Donec
vehicula augue eu neque. Pellentesque%
\setlength{\parfillskip}{0pt}%
\par
\setlength{\parskip}{0pt}%
\noindent
\endgroup
habitant morbi tristique
senectus et netus et malesuada fames ac turpis egestas. Mauris ut
leo. Cras viverra metus rhoncus sem. Nulla et lectus vestibulum urna
fringilla ultrices. Phasellus eu tellus sit amet tortor gravida
placerat. Integer sapien est, iaculis in, pretium quis, viverra ac,
nunc. Praesent eget sem vel leo ultrices bibendum. Aenean faucibus.
Morbi dolor nulla, malesuada eu, pulvinar at, mollis ac, nulla.
Curabitur auctor semper nulla. Donec varius orci eget risus. Duis
nibh mi, congue eu, accumsan eleifend, sagittis quis, diam. Duis
eget orci sit amet orci dignissim rutrum.
\end{document}