diff --git a/modules/paper-calendar.xml b/modules/paper-calendar.xml
index c3a819e..a797e29 100644
--- a/modules/paper-calendar.xml
+++ b/modules/paper-calendar.xml
@@ -1126,16 +1126,53 @@
 			<xsl:param name="teaching-period" tunnel="yes" />
         </common>
 		<common formats="/latex/xelatex/">
-            <xsl:text>\begin{center}</xsl:text>
-            <xsl:call-template name="newline-internal" />
+		    <xsl:if test="@position-vertical = ('center', 'bottom')">
+                <xsl:text>\mbox{}\vfill</xsl:text>
+                <xsl:call-template name="newline-internal" />
+            </xsl:if>
+            
+            <xsl:if test="@position-horizontal">
+                <xsl:text>\begin{</xsl:text>
+                <xsl:value-of select="
+                    if (@position-horizontal = ('left', 'right')) then 'flush{@position-horizontal}'
+                    else if (@position-horizontal eq 'center') then @position-horizontal
+                    else 'flushleft'" />
+                <xsl:text>}</xsl:text>
+                <xsl:call-template name="newline-internal" />
+            </xsl:if>
+            
+            <!--
+                An explicit @height always takes precedence over @fit-height.
+            -->
+            <xsl:variable name="table-height" select ="
+                if (@height) then @height
+                else if (@fit-height) then '\textheight'
+                     else '!'" />
+                
+            <!--
+                An explicit @width always takes precedence over @fit-width.
+            -->
+            <xsl:variable name="table-width" select ="
+                if (@width) then @width
+                else if (@fit-width) then '\textwidth'
+                     else '!'" />
+            
+            <!-- No point resizing if no height or width is specified. -->
+            <xsl:if test="($table-width ne '!') or ($table-height ne '!')">
+                <xsl:text>\resizebox*{</xsl:text>
+                <xsl:value-of select="$table-width" />
+                <xsl:text>}{</xsl:text>
+                <xsl:value-of select="$table-height" />
+                <xsl:text>}{%</xsl:text>
+                <xsl:call-template name="newline-internal" />
+            </xsl:if>
                             
-            <!-- TODO: Probably not if standalone! -->
-            <xsl:text>\begin{sideways}</xsl:text>
-            <xsl:call-template name="newline-internal" />
-                            
-            <xsl:text>\resizebox{24cm}{!}{%</xsl:text>
-            <xsl:call-template name="newline-internal" />
-                            
+            <!-- The default is to print sideways. -->
+            <xsl:if test="not(@sideways) or (@sideways = ('yes', 'y'))">
+                <xsl:text>\begin{sideways}</xsl:text>
+                <xsl:call-template name="newline-internal" />
+            </xsl:if>
+            
             <xsl:text>\begin{tabular}{|c|c</xsl:text>
             <xsl:if test="$section-column > $date-column">
                 <xsl:text>|c</xsl:text>
@@ -1213,14 +1250,47 @@
 			<xsl:text>\end{tabular}%</xsl:text>
 			<xsl:call-template name="newline-internal" />
 			
-			<xsl:text>}</xsl:text>
-			<xsl:call-template name="newline-internal" />
+            <!--
+                An explicit @height always takes precedence over @fit-height.
+            -->
+            <xsl:variable name="table-height" select ="
+                if (@height) then @height
+                else if (@fit-height) then '\textheight'
+                     else '!'" />
+                
+            <!--
+                An explicit @width always takes precedence over @fit-width.
+            -->
+            <xsl:variable name="table-width" select ="
+                if (@width) then @width
+                else if (@fit-width) then '\textwidth'
+                     else '!'" />
+                
+            <!-- The default is to print sideways. -->
+            <xsl:if test="not(@sideways) or (@sideways = ('yes', 'y'))">
+                <xsl:text>\end{sideways}</xsl:text>
+                <xsl:call-template name="newline-internal" />
+			</xsl:if>
 			
-			<xsl:text>\end{sideways}</xsl:text>
-			<xsl:call-template name="newline-internal" />
+            <xsl:if test="($table-width ne '!') or ($table-height ne '!')">
+                <xsl:text>}</xsl:text>
+                <xsl:call-template name="newline-internal" />
+			</xsl:if>
 			
-			<xsl:text>\end{center}</xsl:text>
-			<xsl:call-template name="newline-internal" />
+            <xsl:if test="@position-horizontal">
+                <xsl:text>\end{</xsl:text>
+                <xsl:value-of select="
+                    if (@position-horizontal = ('left', 'right')) then 'flush{@position-horizontal}'
+                    else if (@position-horizontal eq 'center') then @position-horizontal
+                    else 'flushleft'" />
+                <xsl:text>}</xsl:text>
+                <xsl:call-template name="newline-internal" />
+            </xsl:if>
+            
+            <xsl:if test="@position-vertical = ('top', 'center')">
+                <xsl:text>\vfill\mbox{}</xsl:text>
+                <xsl:call-template name="newline-internal" />
+            </xsl:if>
 	    </common>
 	</template>