I am pretty sure you can do the following, but if I am wrong, someone else jump in and correct me:
You need to run multiple loops, so say you want three rows and three articles on each row, like this:
Post 1
Post 2
Post 3
Post 4
Post 5
Post 6
Post 7
Post 8
Post 9
Start by running the first loop using query_posts:
<?php
if (is_home()) { <em>// only use this if it is strictly for your home page and not archives or anything</em>
query_posts("cat=4&showposts=3"); <em>// cat is the number of the category you want to show, exclude this and it will be all categories. Showposts is how many you want to show for this loop.</em>
}
?>
<?php $posts = get_posts('category=4&numberposts=4&offset=0'); <em>// Puts the query in a variable so it doesn't interfere wit the next loop. Offset=0 makes it start with the newest post in that category.</em>
foreach ($posts as $post) : start_wp(); ?>
<div class="mainarticles-sub">
<div class="clearfix" id="post-<?php the_ID(); ?>">
<div class="article">
<a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title(); ?>"><?php the_title(); ?></a></div>
<?php the_excerpt(''); ?> <em>// You can use this or the_content</em>
</div>
<?php endforeach; ?> <em>// End the loop</em>
Then move on to loop two:
<?php rewind_posts(); ?> <em>// Lets you rerun the query</em>
<?php query_posts('cat=4&showposts=3&offset=3'); ?> <em>// Three more from the category but now it is offset by 3, starting at post #4</em>
<?php if (have_posts()) : ?> <em>// if category is not empty</em>
<?php while (have_posts()) : the_post(); ?> <em>// while they exist, display them</em>
<div id="entry-<?php the_ID(); ?>">
<div class="mainarticles-sub">
<div class="clearfix"><?php the_title(); ?></div> <em>// show the title</em>
<?php the_content('<br /><br />Read the rest of this entry »'); ?> <em>// show the content and read more link</em>
<?php endwhile; ?> <em>// end the loop</em>
<?php else : ?> <em>// if there are no posts in that category show an error</em>
<h2 class="mainarticles-sub">Not Found</h2>
<p class="clearfix">Sorry, but you are looking for something that isn't here.</p>
</div>
<?php endif; ?>
Loop three should be like two except offset by 6 in query_posts:
<?php rewind_posts(); ?> <em>// Lets you rerun the query</em>
<?php query_posts('cat=4&showposts=3&offset=6'); ?> <em>// Three more from the category but now it is offset by 6, starting at post #7</em>
<?php if (have_posts()) : ?> <em>// if category is not empty</em>
<?php while (have_posts()) : the_post(); ?> // while they exist, display them
<div id="entry-<?php the_ID(); ?>">
<div class="mainarticles-sub">
<div class="clearfix"><?php the_title(); ?></div> <em>// show the title</em>
<?php the_content('<br /><br />Read the rest of this entry »'); ?> // show the content and read more link
<?php endwhile; ?> <em>// end the loop</em>
<?php else : ?> <em>// if there are no posts in that category show an error</em>
<h2 class="mainarticles-sub">Not Found</h2>
<p class="clearfix">Sorry, but you are looking for something that isn't here.</p>
</div>
<?php endif; ?>
Please ignore my formatting and double check that my CSS is corrct. Does this work?