Created
December 7, 2011 00:22
-
-
Save m4dc4p/1440770 to your computer and use it in GitHub Desktop.
TeX sample that will create a vertical rule next to a given paragraph
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Justin Bailey 2011 | |
jgbailey@codeslower.com | |
To use: surround paragraphs to place a rule | |
with \startrule and \endrule. | |
E.g.: | |
\startrule | |
This paragraph will have a rule around it. | |
\endrule | |
Multiple paragraphs can be spanned as well. Rules will break across | |
pages but it will have the effect of making your document | |
\raggedbottom. | |
You can change the offset of the rule by setting \ruleoffset. Rules | |
are always offset from the left margin. | |
A simple \codeblock environment is included too. | |
To use it, surround the code with \codeblock{ | |
} | |
Code must appear in the group. The group must immediately follow \codeblock. | |
Code is set ragged right, obeying newlines, using typewriter font. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
\input vert | |
%% one blank line at beginning and end. | |
\codeblock{ | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
} | |
%% No blank lines. | |
\codeblock{ | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
} | |
%% No blank lines. | |
\codeblock{void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
} | |
\startrule | |
asdljflasd dasjfdlf lasdfdflaslfjlsadf sajf lsdfas Lorem ipsum dolor | |
sit amet, consectetur adipiscing elit. Quisque sollicitudin pretium | |
quam, id condimentum felis rutrum quis. Nullam venenatis libero ac | |
ante blandit euismod. Suspendisse sit amet nisl vel leo feugiat | |
rutrum. Fusce vestibulum ornare lorem in fermentum. Sed et facilisis | |
massa. Vivamus non leo quis magna egestas volutpat hendrerit a | |
libero. Morbi interdum lacus sit amet ligula suscipit et tempor enim | |
varius. Sed vel erat massa, a vehicula ligula. Proin felis eros, | |
feugiat non fermentum ac, volutpat vel metus. Nunc tortor enim, | |
aliquet id feugiat sed, auctor a elit. Phasellus in tortor diam, in | |
vestibulum enim. Phasellus imperdiet semper tellus, ac malesuada lacus | |
scelerisque eget. Quisque consectetur volutpat est, nec lobortis diam | |
ullamcorper vitae. In vulputate nulla eu odio congue posuere. | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
\endrule | |
{\ruleoffset=-1pt\codeblock{ | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
}} | |
%% This page break draws the rule on the second page instead | |
%% of on the first and second. | |
\startrule\obeylines\raggedright %% | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
\endrule | |
{\ruleoffset=-5pt\codeblock{ | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
void main(int argc, char *argv[]) \char123 | |
printf("Hello, world!{\char92}n"); | |
\char125 | |
}} | |
\startrule | |
Vestibulum lacus orci, hendrerit eget rutrum sed, pharetra nec | |
tellus. Sed risus turpis, pretium ac condimentum id, pharetra et | |
nisl. Sed auctor ipsum et tortor eleifend facilisis. Nulla vel erat | |
nulla, eu ullamcorper mi. Nullam dapibus neque arcu, nec consectetur | |
leo. Vestibulum et est ut sapien laoreet facilisis. Ut bibendum sapien | |
et arcu congue ac venenatis justo cursus. Nunc laoreet leo sit amet | |
odio sagittis malesuada. Fusce eu odio justo. Morbi tempor luctus | |
elit, in rhoncus justo gravida a. Quisque ornare tristique neque et | |
venenatis. Ut volutpat ultricies est id egestas. | |
\endrule | |
\startrule | |
Morbi luctus lacinia lectus, in pretium sem sollicitudin | |
nec. Pellentesque habitant morbi tristique senectus et netus et | |
malesuada fames ac turpis egestas. Proin ut sodales eros. Donec tortor | |
sapien, posuere et interdum ac, laoreet at nunc. In sit amet libero | |
eget justo lobortis rutrum a lobortis massa. Aliquam et eros | |
leo. Fusce in libero id purus consectetur mattis sodales sit amet | |
lectus. Pellentesque id quam eget diam suscipit viverra. Cum sociis | |
natoque penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Sed faucibus accumsan tellus, vel sodales magna fermentum | |
sed. Nam egestas mi et justo luctus non dictum odio aliquam. | |
Cras vel tortor lorem. Curabitur enim ligula, ullamcorper at eleifend | |
a, aliquet quis tortor. Pellentesque aliquam, nisl sed consectetur | |
pulvinar, purus augue aliquam tortor, vitae ornare sem magna vitae | |
augue. Suspendisse magna eros, sollicitudin ac consequat sed, pulvinar | |
sed turpis. Nulla neque orci, eleifend a placerat at, imperdiet a | |
nunc. Nulla malesuada eros id ante accumsan feugiat. Nunc tortor | |
neque, pretium in egestas quis, semper ac neque. Cras ut leo vitae | |
arcu aliquam mattis a et erat. Maecenas consequat, mauris quis | |
pulvinar eleifend, est urna varius eros, quis aliquam risus orci | |
accumsan urna. Pellentesque habitant morbi tristique senectus et netus | |
et malesuada fames ac turpis egestas. Mauris varius eleifend elit quis | |
adipiscing. In urna justo, lacinia quis venenatis eget, pulvinar quis | |
magna. Curabitur neque libero, vestibulum non eleifend a, venenatis | |
vitae lectus. Cum sociis natoque penatibus et magnis dis parturient | |
montes, nascetur ridiculus mus. | |
\endrule | |
{\narrower | |
\startrule | |
Morbi luctus lacinia lectus, in pretium sem sollicitudin | |
nec. Pellentesque habitant morbi tristique senectus et netus et | |
malesuada fames ac turpis egestas. Proin ut sodales eros. Donec tortor | |
sapien, posuere et interdum ac, laoreet at nunc. In sit amet libero | |
eget justo lobortis rutrum a lobortis massa. Aliquam et eros | |
leo. Fusce in libero id purus consectetur mattis sodales sit amet | |
lectus. Pellentesque id quam eget diam suscipit viverra. Cum sociis | |
natoque penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Sed faucibus accumsan tellus, vel sodales magna fermentum | |
sed. Nam egestas mi et justo luctus non dictum odio aliquam. | |
Morbi luctus lacinia lectus, in pretium sem sollicitudin | |
nec. Pellentesque habitant morbi tristique senectus et netus et | |
malesuada fames ac turpis egestas. Proin ut sodales eros. Donec tortor | |
sapien, posuere et interdum ac, laoreet at nunc. In sit amet libero | |
eget justo lobortis rutrum a lobortis massa. Aliquam et eros | |
leo. Fusce in libero id purus consectetur mattis sodales sit amet | |
lectus. Pellentesque id quam eget diam suscipit viverra. Cum sociis | |
natoque penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Sed faucibus accumsan tellus, vel sodales magna fermentum | |
sed. Nam egestas mi et justo luctus non dictum odio aliquam. | |
Morbi luctus lacinia lectus, in pretium sem sollicitudin | |
nec. Pellentesque habitant morbi tristique senectus et netus et | |
malesuada fames ac turpis egestas. Proin ut sodales eros. Donec tortor | |
sapien, posuere et interdum ac, laoreet at nunc. In sit amet libero | |
eget justo lobortis rutrum a lobortis massa. Aliquam et eros | |
leo. Fusce in libero id purus consectetur mattis sodales sit amet | |
lectus. Pellentesque id quam eget diam suscipit viverra. Cum sociis | |
natoque penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Sed faucibus accumsan tellus, vel sodales magna fermentum | |
sed. Nam egestas mi et justo luctus non dictum odio aliquam. | |
Morbi luctus lacinia lectus, in pretium sem sollicitudin | |
nec. Pellentesque habitant morbi tristique senectus et netus et | |
malesuada fames ac turpis egestas. Proin ut sodales eros. Donec tortor | |
sapien, posuere et interdum ac, laoreet at nunc. In sit amet libero | |
eget justo lobortis rutrum a lobortis massa. Aliquam et eros | |
leo. Fusce in libero id purus consectetur mattis sodales sit amet | |
lectus. Pellentesque id quam eget diam suscipit viverra. Cum sociis | |
natoque penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Sed faucibus accumsan tellus, vel sodales magna fermentum | |
sed. Nam egestas mi et justo luctus non dictum odio aliquam. | |
\endrule | |
} | |
{\startrule\obeylines\raggedright\parindent=0pt %% | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
\endrule} | |
\bye |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
\input vert | |
\showboxbreadth=1000 \showboxdepth=1 | |
asdljflasd dasjfdlf lasdfdflaslfjlsadf sajf lsdfas Lorem ipsum dolor | |
sit amet, consectetur adipiscing elit. Quisque sollicitudin pretium | |
quam, id condimentum felis rutrum quis. Nullam venenatis libero ac | |
ante blandit euismod. Suspendisse sit amet nisl vel leo feugiat | |
rutrum. Fusce vestibulum ornare lorem in fermentum. Sed et facilisis | |
massa. Vivamus non leo quis magna egestas volutpat hendrerit a | |
libero. Morbi interdum lacus sit amet ligula suscipit et tempor enim | |
varius. Sed vel erat massa, a vehicula ligula. Proin felis eros, | |
\noindent In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
zzzIn hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
%% The rule is drawn only on the second page here. | |
\startrule | |
xxx Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam nonnon mauris. In gravida arcu sit amet felis vestibulum placerat. | |
yyy Integer blandit lorem non magna tincidunt | |
\endrule | |
x | |
x | |
asdljflasd dasjfdlf lasdfdflaslfjlsadf sajf lsdfas Lorem ipsum dolor | |
sit amet, consectetur adipiscing elit. Quisque sollicitudin pretium | |
quam, id condimentum felis rutrum quis. Nullam venenatis libero ac | |
ante blandit euismod. Suspendisse sit amet nisl vel leo feugiat | |
rutrum. Fusce vestibulum ornare lorem in fermentum. Sed et facilisis | |
massa. Vivamus non leo quis magna egestas volutpat hendrerit a | |
libero. Morbi interdum lacus sit amet ligula suscipit et tempor enim | |
varius. Sed vel erat massa, a vehicula ligula. Proin felis eros, | |
feugiat non fermentum ac, volutpat vel metus. Nunc tortor enim, | |
aliquet id feugiat sed, auctor a elit. Phasellus in tortor diam, in | |
vestibulum enim. Phasellus imperdiet semper tellus, ac malesuada lacus | |
scelerisque eget. Quisque consectetur volutpat est, nec lobortis diam | |
ullamcorper vitae. In vulputate nulla eu odio congue posuere. | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
commodo orci vitae nulla consectetur interdum. Cum sociis natoque | |
penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Vivamus vitae urna at tortor fringilla suscipit id a augue. Morbi | |
tristique, mi in pharetra congue, nulla eros ullamcorper augue, in | |
egestas orci dui eget massa. Morbi id pharetra elit. Duis ornare | |
malesuada tempus. Curabitur vehicula vulputate lorem a accumsan. In | |
hac habitasse platea dictumst. Nunc lectus tortor, porttitor at ornare | |
vel, sodales vel dolor. | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Cras viverra, arcu nec euismod eleifend, leo leo posuere | |
lectus, non varius velit nisi vitae turpis. Proin faucibus erat id | |
velit scelerisque tristique. Integer sit amet nisl nulla. Phasellus | |
%% No rule at all is drawn here.x | |
\startrule %% | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam nonnon mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt | |
\endrule | |
\bye |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
\input vert | |
\showboxbreadth=1000 \showboxdepth=2 | |
{\tt Normal paragraph.} In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. | |
{\tt Normal paragraph.} Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. | |
%% No indent honored | |
\startrule\noindent {\bf Space between this paragraph and previous looks | |
right; no indentation.} In hac habitasse platea dictumst. Etiam rutrum | |
blandit velit sed rutrum. Curabitur rhoncus erat a turpis suscipit | |
vitae rutrum turpis sodales. \endrule | |
%% Inter-paragraph spacing correct | |
\startrule {\sl Space between this paragraph and previous looks right.} In | |
hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. | |
\endrule\tracingcommands=0\tracingmacros=0 | |
%% Inter-paragraph spacing correct | |
\startrule\noindent {\it Space between this paragraph and previous looks right; no indentation.} | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. | |
\endrule | |
%% Inter-paragraph | |
{\it Space between this paragraph and previous looks right.} In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. | |
\startrule {\bf This rule spans multiple paragraphs}. In hac habitasse | |
platea dictumst. Etiam rutrum blandit velit sed rutrum. Curabitur | |
rhoncus erat a turpis suscipit vitae rutrum turpis sodales. Space | |
between this paragraph and previous looks right. | |
In hac habitasse platea dictumst. Etiam rutrum blandit velit sed | |
rutrum. Curabitur rhoncus erat a turpis suscipit vitae rutrum turpis | |
sodales. Space between this paragraph and previous looks right. | |
\endrule | |
\bye | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
\input vert | |
\raggedbottom | |
Morbi luctus lacinia lectus, in pretium sem sollicitudin | |
\startrule %% | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
Integer blandit lorem non magna tincidunt tempus. Donec quis quam non | |
urna imperdiet porta. Aenean auctor eros quis neque dictum pulvinar | |
dignissim. Integer euismod, nulla ac tincidunt mollis, est lorem | |
volutpat. Donec dui sem, feugiat vulputate gravida ut, sollicitudin | |
non mauris. In gravida arcu sit amet felis vestibulum placerat. | |
\endrule | |
Morbi luctus lacinia lectus, in pretium sem sollicitudin | |
nec. Pellentesque habitant morbi tristique senectus et netus et | |
malesuada fames ac turpis egestas. Proin ut sodales eros. Donec tortor | |
sapien, posuere et interdum ac, laoreet at nunc. In sit amet libero | |
eget justo lobortis rutrum a lobortis massa. Aliquam et eros | |
leo. Fusce in libero id purus consectetur mattis sodales sit amet | |
lectus. Pellentesque id quam eget diam suscipit viverra. Cum sociis | |
natoque penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Sed faucibus accumsan tellus, vel sodales magna fermentum | |
sed. Nam egestas mi et justo luctus non dictum odio aliquam. | |
Morbi luctus lacinia lectus, in pretium sem sollicitudin | |
nec. Pellentesque habitant morbi tristique senectus et netus et | |
malesuada fames ac turpis egestas. Proin ut sodales eros. Donec tortor | |
sapien, posuere et interdum ac, laoreet at nunc. In sit amet libero | |
eget justo lobortis rutrum a lobortis massa. Aliquam et eros | |
leo. Fusce in libero id purus consectetur mattis sodales sit amet | |
lectus. Pellentesque id quam eget diam suscipit viverra. Cum sociis | |
natoque penatibus et magnis dis parturient montes, nascetur ridiculus | |
mus. Sed faucibus accumsan tellus, vel sodales magna fermentum | |
sed. Nam egestas mi et justo luctus non dictum odio aliquam. | |
\bye |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
%% Justin Bailey 2011 | |
%% jgbailey@codeslower.com | |
%% | |
%% To use: surround paragraphs to place a rule | |
%% with \startrule and \endrule. | |
%% | |
%% E.g.: | |
%% | |
%% \startrule | |
%% This paragraph will have a rule around it. | |
%% \endrule | |
%% | |
%% Multiple paragraphs can be spanned as well. Rules will break across | |
%% pages but it will have the effect of making your document | |
%% \raggedbottom. | |
%% | |
%% You can change the offset of the rule by setting \ruleoffset. Rules | |
%% are always offset from the left margin. | |
%% | |
%% A simple \codeblock environment is included too. | |
%% | |
%% To use it, surround the code with \codeblock{ | |
%% | |
%% } | |
%% | |
%% Code must appear in the group. The group must immediately follow \codeblock. | |
%% Code is set ragged right, obeying newlines, using typewriter font. | |
\newdimen\ruleoffset \ruleoffset=-2pt %% Horizontal offset for the | |
%% rule. This is the parameter that | |
%% should be set by the user. | |
\newbox\parbox %% Holds our collected paragraph | |
\newdimen\startpar \startpar=-1000pt %% Where the paragraph started | |
\newdimen\endpar \endpar=0pt %% Where the paragraph ended | |
\newdimen\roffset %% For calculating offset from left margin for rule. | |
\newtoks\savedout \savedout=\output %% Previous output routine | |
\newdimen\interparskip | |
%% A hbox with no width, height or depth. Used to ensure | |
%% empty lines have at least one item, which prevents | |
%% underfull warnings. | |
\newbox\zerobox \setbox\zerobox=\hbox to 0pt{\vrule height0pt width0pt} | |
\newbox\charbox \setbox\charbox=\hbox{.} | |
%% Capture all paragraphs in a \vbox so we can keep | |
%% track of their height. If this macro is not in vertical | |
%% mode, it will emit a \par to force vertical mode. | |
\def\startrule{\ifvmode\else\par\penalty0\fi%% | |
%% Capture value of \ruleoffset so it survives the group. This ensures | |
%% that when the output routine calls \makerule we get the right value | |
\xdef\setroffset{\roffset=\the\leftskip \advance\roffset by \the\ruleoffset}%% | |
\xdef\theprevdepth{\the\prevdepth}%% | |
\startpar=\pagetotal \endpar=-1000pt%% Sentinel value. | |
\setbox\parbox=\vbox\bgroup} | |
%% Insert a rule from the top of the paragraph to the end. If | |
%% the paragraph started on the previous page this will put a | |
%% rule only on the bottom portion. | |
\def\endrule{\egroup | |
%% Do not calculated inter-paragraph glue if | |
%% nothing exists on the page yet. | |
\if\pagegoal=\maxdimen\relax\else%% | |
%% Calculate inter-paragraph glue by setting captured text | |
%% ourselves. We know the heights of everythign but the glue. Use | |
%% \vtop in boht cases so height of box is only the first line, not | |
%% the entire box. | |
\setbox2=\vtop{X\par}%% | |
\setbox4=\vtop{\unvcopy\parbox}%% | |
%% Set \prevdepth so inter-paragraph glue is calculated based | |
%% on the paragraph that really preceded \startrule, not our | |
%% fake paragraph. | |
\setbox0=\vbox{\copy2\par\prevdepth=\theprevdepth\copy4}%% | |
\interparskip=\ht0 \advance\interparskip by -\ht4 \advance\interparskip by -\ht2%% | |
%% Add \penalty so \output routine triggers if necessary. | |
\vskip\interparskip\par\penalty0%% | |
\fi%% | |
\ifnum\startpar>-1000\relax%% A page break occurred when startpar = -1000. | |
%% \pagetotal represents where our paragraph will start. | |
\startpar=\pagetotal%% | |
\fi%% | |
%% Add \penalty below so \output will run if necessary. | |
\unvbox\parbox\par\penalty0%% | |
\xdef\theprevdepth{\the\prevdepth}%% | |
\endpar=\pagetotal%% Record where we are. | |
%% Make the rule start at the top of the first line, extending to | |
%% the bottom of the last line. | |
\if\endpar>\pagegoal%% | |
\dimen0=\pagegoal%% | |
\else%% | |
\dimen0=\endpar%% | |
\fi%% | |
\ifnum\startpar>-1000\relax%% when true, rule starts at top of page. | |
%% Otherwise, \startpar in middle of page, \endpar also in middle | |
\advance\startpar by -\pagedepth%% | |
\advance\dimen0 by -\startpar%% | |
\fi%% | |
\makerule\dimen0/%% | |
\endpar=0pt%% Prevents \lastrule from drawing a rule | |
\startpar=-1000pt%% | |
\prevdepth=\theprevdepth} | |
%% An output routine that handles breaking rules across | |
%% page boundaries. After adding a rule, runs the default (or prior) | |
%% output routine. | |
\def\lastrule{%% | |
\ifnum\endpar<0\relax% | |
%% Any glue in box255 will screw up \startpar - the paragraph might | |
%% have moved since we recorded its position. Therefore, we reset the | |
%% box to its natural height and put all the stretching at the | |
%% bottom. | |
\setbox0=\vbox{\unvcopy255} \dimen0=\ht0%% | |
\ifnum\startpar>-1000\relax%% | |
%% \startpar in middle of page, \endpar at bottom. | |
\advance\startpar by -\dp0%% Make sure rule covers the entire paragraph. | |
\advance\dimen0 by -\startpar%% | |
\wlog{output: dimen0: \the\dimen0}%% | |
\fi%% | |
\setbox255=\vbox{\unvbox255\makerule\dimen0/\vfil}%% | |
\global\startpar=-1000pt%% | |
\fi%% | |
%% Run previous output routine. | |
\the\savedout%% | |
} | |
%% Handles drawing the rule, using the height given in the dimension | |
%% register passed. Notice the slash used to delimit the | |
%% argument. Used internally by macros above. | |
\def\makerule#1/{%% | |
%% Keep prevdepth so interline spacing isn't affected by our vbox | |
%% (from | |
%% http://tex.stackexchange.com/questions/22355/make-an-invisible-vbox) | |
\nointerlineskip%% No glue between previous vbox and this | |
\nobreak\vbox to 0pt{\hrule height 0pt depth0pt width0pt\vskip -#1%% \hrule ensures reference point is at the top of the box. | |
%% This box contains the rule of the given height, offset from the | |
%% left margin by \ruleoffset. | |
\hbox to 0pt{\setroffset%% | |
%% \hss removes an underfull warning | |
\kern\roffset\vrule height#1 width1pt depth0pt\hss}}%% | |
%% Restoring prevdepth ensures next paragraph | |
%% is spaced correctly from previous one. | |
\prevdepth=\theprevdepth} | |
%% Ensures spaces at the beginning of the line are always | |
%% preserved. TABs will not be. Thanks to TeX for the Impatient | |
%% (eplain) for \alwayspace. | |
{\gdef\alwaysspace{\hglue\fontdimen2\the\font \relax}%% | |
\obeyspaces\gdef {\alwaysspace}} | |
%% Define new lines so that in \codeblock they don't start a new | |
%% paragraph - they just insert a line break. | |
{\catcode`\^^M=\active \gdef^^M{\copy\zerobox\hfil\break} \global\let\ret=^^M} | |
\newtoks\codetoks | |
%% \codeblock must be followed by a group or it has no effect. | |
%% When followed by a group, the text found will be set on | |
%% individual lines as they appear in the group (i.e. new lines | |
%% are obeyed). The entire group will be have a rule next to it. | |
%% The group is also set in typewriter font, with ragged-right | |
%% margins. | |
%% | |
%% Note that text in the group is NOT set verbatim. | |
\def\codeblock{\codetoks={}%% | |
%% Removes final lineskip if one was there. | |
\gdef\endo{\unpenalty\endrule\prevdepth=0pt\relax}%% | |
%% Removes initial newline, if one was there. Otherwise, reinsert the | |
%% token captured. | |
\gdef\ignorenewline{\ifx\next\ret%% | |
\else\next%% | |
\fi}%% | |
\gdef\do{\ifx\next\bgroup%% | |
\codetoks={\startrule\noindent\bgroup%% | |
\ttraggedright%% | |
\parindent=0pt%% | |
\tt%% | |
\aftergroup\endo%% | |
\ignorespaces%% | |
\catcode`\^^M=\active\obeyspaces%% | |
\afterassignment\ignorenewline\let\next= }%% | |
\fi\the\codetoks}%% | |
\ignorespaces\afterassignment\do\let\next= } | |
\output={\lastrule} %% Use our custom output routine. | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment