Its really no different to normal digit multiplexing. You activate one segment at a time, and *all* the digit cathodes that have that segment lit. To do so, you have a buffer array with a byte for each segment, containing bits for each digit. The multiplexing should run in a timer ISR, for one segment at a time. Simply deactivate the previous segment, increment the segment index (with wraparound when it goes out of range), output the digit bits from the array at the current segment index, and activate the segment. The segment index should be static and local to the ISR, and the buffer array needs to be volatile and have file scope or be global.
The complexity comes when you need to write numbers to the buffer array, e.g. to clear a digit, you need to go through the whole array, masking that digit's bit to 0. To display a single digit of a number on a specific digit position, again you loop through the whole array masking that digit's bit, but each time masking it to either 1 or 0 depending on whether or not the number needs that segment illuminated. Repeat sequentially with other digits till the whole number is displayed. That's all in the main program, though if you've got any savvy, you'll write a function for it to encapsulate the mess and keep it all in one place.
Incidentally, its a poor design choice - resistors are far cheaper than ultrabright 7 segment LEDs vs standard ones, and by multiplexing the segments, at best you can get a 1/8 duty cycle, but for four more resistors you could have multiplexed the digits for a 1/4 duty cycle and double the brightness, + made the code much simpler