如何使 TeX 使旋转的文本适合表格单元格?

如何使 TeX 使旋转的文本适合表格单元格?

以下是我的 HTML 内容:

<style type="text/css">
table, th, td
{
border: 1px solid black;
border-collapse: collapse;
padding: 2px;
margin: 2px;
}    
th {        background-color: #dddddd;    }
.right { text-align: right; }
.center { text-align: center; }
.left { text-align: left; }
</style>


        <table>
            <tr>
                <th colspan="7">Mérővonalak</th>
            </tr>
            <tr>
                <th class="center" rowspan="2">Sorszám</th>
                <th class="center" colspan="2">Pozíció 1</th>
                <th class="center" colspan="2">Pozíció 2</th>
                <th class="right"  rowspan="2">Dőlés°</th>
                <th class="right"  rowspan="2">Metszéspontok<br>száma</th>
            </tr>
            <tr>
                <td class="center">1</td>
                <td class="center"><small>17.90 mm</small></td>
                <td class="center"><small>27.19 mm</small></td>
                <td class="center"><small>-192.10 mm</small></td>
                <td class="center"><small>69.53 mm</small></td>
                <td class="right">-90.0°</td>
                <td class="right">29</td>
            </tr>               
        </table>

我曾尝试在 XeLaTeX 中执行相同操作。我不得不旋转最后一列,因为表格没有足够的水平空间。

\begin{tabular}{|c|r|r|r|r|r|r|}
\hline
\multicolumn{7}{|c|}{Mérővonalak} \\
\hline
        \multirow{2}{*}{Sorszám}
    &   \multicolumn{2}{|c|}{Pozíció 1}
    &   \multicolumn{2}{|c|}{Pozíció 2}
    &   \multirow{2}{*}{Dőlés}
    &   \multirow{2}{*}{\rotatebox{90}{~\parbox{1.5cm}{Metszéspontok Száma}~}} \\
\cline{2-5}
    & Vízszintes
    & Függőleges
    & Vízszintes
    & Függőleges
    & \\
\hline
\end{tabular}

垂直文本超出了表格范围。它甚至覆盖了表格下的其他文本。表格环境不应该自动计算适合内容所需的行的垂直大小吗?我做错了什么?

期望:

期望

实际的:

实际的

通过使用赫伯特规则,它几乎是完美的:

赫伯特规则

我可以通过将高度参数更改为 3cm 来实现这一点\rule。但这不是一个解决方案,因为单元格数据来自数据库。它可以是一个短单词,也可以是一个很长的单词。我需要一个灵活的解决方案。

答案1

如果您不知道将要使用的对象的宽度/高度,则应将其存储在一个框中,以便 LaTeX 可以计算它。这与 Herbert 的答案略有不同,它将未知单元格的内容存储在 中\box0。如果您的文档大得多,您可以制作自己的框,但在这个 MWE 中就足够了:

在此处输入图片描述

\documentclass{article}
\usepackage{fontspec}% http://ctan.org/pkg/fontspec
\usepackage{graphicx,multirow}% http://ctan.org/pkg/{graphicx,multirow}

\begin{document}

\setbox0\hbox{\tabular{@{}l}Metszéspontok\\ Száma\endtabular}
\begin{tabular}{|c|r|r|r|r|r|r|}\hline
\multicolumn{7}{|c|}{Mérővonalak} \\\hline
        \multirow{2}{*}{Sorszám}
    &   \multicolumn{2}{|c|}{Pozíció 1}
    &   \multicolumn{2}{|c|}{Pozíció 2}
    &   \multirow{2}{*}{Dőlés}
    &   \rule{0pt}{\dimexpr\wd0-\normalbaselineskip}\\\cline{2-5} % save space for the rotatebox
    & Vízszintes
    & Függőleges
    & Vízszintes
    & Függőleges
    & 
    & \rotatebox{90}{\rlap{\usebox0}}\\\hline
\end{tabular}

\end{document}​

随着每行被移开\normalbaselineskip\dimexpr\wd0-\normalbaselineskip插入适当的规则高度以实现正确显示。

答案2

我不会在这里使用多行单元格。旋转高度为 0 的框并用于\rule垂直空间(如果使用 pdflatex,则删除 fontspec):

\documentclass{article}
\usepackage{fontspec}
\usepackage{graphicx,multirow}

\begin{document}

\begin{tabular}{|c|r|r|r|r|r|r|}\hline
\multicolumn{7}{|c|}{Mérővonalak} \\\hline
        \multirow{2}{*}{Sorszám}
    &   \multicolumn{2}{|c|}{Pozíció 1}
    &   \multicolumn{2}{|c|}{Pozíció 2}
    &   \multirow{2}{*}{Dőlés}
    &   \rule{0pt}{2cm}\\\cline{2-5} % save space for the rotatebox
    & Vízszintes
    & Függőleges
    & Vízszintes
    & Függőleges
    & 
    & \rotatebox{90}{\rlap{\tabular{@{}l}Metszéspontok\\ Száma\endtabular}}\\\hline
\end{tabular}

\end{document}

在此处输入图片描述

如果您希望允许使用 Metszéspontok 连字符,则使用:

\begin{tabular}{|c|r|r|r|r|r|r|}\hline
\multicolumn{7}{|c|}{Mérővonalak} \\\hline
        \multirow{2}{*}{Sorszám}
    &   \multicolumn{2}{|c|}{Pozíció 1}
    &   \multicolumn{2}{|c|}{Pozíció 2}
    &   \multirow{2}{*}{Dőlés}
    &   \rule{0pt}{1.75cm}\\\cline{2-5} % save space for the rotatebox
    & Vízszintes
    & Függőleges
    & Vízszintes
    & Függőleges
    & 
    & \rotatebox{90}{\rlap{\parbox{2cm}{\hspace{0pt}Metszéspontok  Száma}}}\\\hline
\end{tabular}

并且不知道文本的宽度/高度:

\begin{tabular}{|c|r|r|r|r|r|r|}\hline
\multicolumn{7}{|c|}{Mérővonalak} \\\hline
        \multirow{2}{*}{Sorszám}
    &   \multicolumn{2}{|c|}{Pozíció 1}
    &   \multicolumn{2}{|c|}{Pozíció 2}
    &   \multirow{2}{*}{Dőlés}
    &   \rotatebox{90}{\tabular{@{}l}Metszéspontok\\  Száma\endtabular}
     \\\cline{2-5} 
    & Vízszintes
    & Függőleges
    & Vízszintes
    & Függőleges
    & 
    &  \\\hline
\end{tabular}

顺便说一句:没有垂直线的表格更容易阅读......

相关内容