Suppose I have the following subroutine, to a more complex program, that uses spaces to the right of the tape:
$A$: "adds a $ at the beginning of the tape."
So we have: $$ \begin{array}{lc} \text{Before }: & 0101\sqcup\sqcup\sqcup\ldots\\ \text{After }A: & \$0101\sqcup\sqcup\ldots \end{array} $$
And it is running on a multi-tape turing machine. The equivalence theorem from Sipser book proposes we can describe any multi-tape TM with a single-tape applying the following "algorithm", append a $\#$ at every tape and then concat every tape in a single tape, and then put a dot to simulate the header of the previous machine, etc, etc.
With $a$ and $b$ being the content of other tapes, we have: $$ a\#\dot{0}101\#b $$ If we want to apply $A$ or another subroutine that uses more space, the "algorithm" described in Sipser is not enough, I can intuitively shift $\#b$ to the right, but how to describe it more formally for any other subroutine that uses more space in the tape? I can't figure out a more general "algorithm" to apply in this cases.