tabularx 的奇怪输出

tabularx 的奇怪输出

此代码是更大文件的一部分:

\documentclass[11pt,BCOR8mm,final,linktocpage,twoside,open=right,headsepline,a4paper]{scrbook}   
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[pdftex]{graphicx}
\usepackage[pdftex]{color}
\usepackage[hang,small]{subfigure}
\usepackage[small,bf]{caption}
\usepackage[T1]{fontenc}
\typearea{10}
\usepackage{sidecap}
\usepackage{picins,extpic}
\usepackage{booktabs,colortbl,footmisc}
\usepackage{color,xcolor}
\usepackage{wallpaper}
\usepackage{fancybox}
\usepackage{wallpaper,eso-pic,watermark} 
\usepackage[table]{xcolor}
\usepackage{array}
\usepackage{tabularx,hhline}



\begin{document}



\begin{center}

\begin{table}[htbp]
  \begin{tabularx}{.7\linewidth}{||p{2.363in}*{2}{|r}||}
    \hhline{|t:===:t|}
    \cellcolor{gray!15} \textbf{Lage der Messfl\"ache} & {\cellcolor{gray!15} \textbf{Rechtswert [m]}} & {\cellcolor{gray!15} \textbf{Hochwert [m]}} \\
    \hhline{|:=|=|=:|}
    \cellcolor{gray!15} Das ist ein Test: Was passiert, wenn der Text sehr lange ist?  & 345678.45 & 54346578.88  \\
    \hhline{|b:===:b|}
  \end{tabularx}
\end{table}
\end{center}


\end{document}

输出为:

在此处输入图片描述

两个问题:我怎样才能

  • 避免使用“X”和“X(0)p”?我认为两者都应归因于 tabular.sty(第 119 行和第 121 行)。

  • 对齐多行文本?

多谢。

答案1

使用您的 MWE,我无法重现您的图像(使用X上表和X(0)p前表,表格看起来不错。

我很好奇,为什么使用tabularx and than define onlyp{..} andr type columns? I sugest you to use onlytabular` 指定列的宽度:

\documentclass[11pt,BCOR8mm,final,linktocpage,twoside,open=right,headsepline,a4paper]{scrbook}
    %\usepackage[ngerman]{babel}
    \usepackage[latin1]{inputenc}
    \usepackage[pdftex]{graphicx}
    %\usepackage[pdftex]{color}% <-- surplus
    \usepackage[hang,small]{subfigure}
    \usepackage[small,bf]{caption}
    %\usepackage[T1]{fontenc}
    \typearea{10}
    %\usepackage{sidecap}
    %\usepackage{picins,extpic}
    \usepackage{booktabs,colortbl,footmisc}
    %\usepackage{color,xcolor} % <-- surplus
    %\usepackage{wallpaper} % <-- surplus
    \usepackage{fancybox}
    %\usepackage{wallpaper,eso-pic,watermark}
    \usepackage[table]{xcolor}
    \usepackage{array}
    \usepackage{tabularx,hhline}
    
        \begin{document}
    \begin{table}[htbp]
    \centering
        \begin{tabular}{||p{2.363in}*{2}{|r}||}
        \hhline{|t:===:t|}
        \cellcolor{gray!15} \textbf{Lage der Messfl\"ache} & {\cellcolor{gray!15} \textbf{Rechtswert [m]}} & {\cellcolor{gray!15} \textbf{Hochwert [m]}} \\
        \hhline{|:=|=|=:|}
        \cellcolor{gray!15} Das ist ein Test: Was passiert, wenn der Text sehr lange ist?  & 345678.45 & 54346578.88  \\
        \hhline{|b:===:b|}
        \end{tabular}
    \end{table}
        \end{document}

这使:

在此处输入图片描述

或者使用tabularx and replacep{...} widthX`:

\begin{table}[htbp]
\centering
    \begin{tabularx}{0.8\textwidth}{||X*{2}{|r}||}
    \hhline{|t:===:t|}
    \cellcolor{gray!15} \textbf{Lage der Messfl\"ache} & {\cellcolor{gray!15} \textbf{Rechtswert [m]}} & {\cellcolor{gray!15} \textbf{Hochwert [m]}} \\
    \hhline{|:=|=|=:|}
    \cellcolor{gray!15} Das ist ein Test: Was passiert, wenn der Text sehr lange ist?  & 345678.45 & 54346578.88  \\
    \hhline{|b:===:b|}
    \end{tabularx}
\end{table}

在这两个例子中,我使用了相同的前言。在其中,我标记了需要加载两次(一次就足够了)的包,并注释了那些我没有安装且对表格设计没有影响的包。在代码中,我替换了table 周围的 width命令begin{center} ... \end{center}(这是错误的用法)。\centering\begin{table}

在我看来,使用以下代码可以获得更好的结果:

\documentclass[11pt,BCOR8mm,final,linktocpage,twoside,open=right,headsepline,a4paper]{scrbook}
%\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[pdftex]{graphicx}
\usepackage[hang,small]{subfigure}
\usepackage[small,bf]{caption}
\usepackage[T1]{fontenc}
\typearea{10}
\usepackage{booktabs,colortbl,footmisc}
\usepackage{fancybox}
\usepackage[table]{xcolor}
\usepackage{array,tabularx,hhline}

\usepackage{siunitx}

    \begin{document}
\begin{table}[htbp]
\centering
    \begin{tabularx}{0.85\textwidth}{||>{\raggedright\arraybackslash}X 
                                *{2}{|S[table-format=8.3]}||}
    \hhline{|t:===:t|}
    \cellcolor{gray!15} \textbf{Lage der Messfl\"ache} & {\cellcolor{gray!15} \textbf{Rechtswert [m]}} & {\cellcolor{gray!15} \textbf{Hochwert [m]}} \\
    \hhline{|:=|=|=:|}
    \cellcolor{gray!15} Das ist ein Test: Was passiert, wenn der Text sehr lange ist?  & 345678.45 & 54346578.88  \\
    \hhline{|b:===:b|}
    \end{tabularx}
\end{table}
    \end{document}

这使:

在此处输入图片描述

如您所见,对于最后两列的数字,我使用了S(添加的)包提供的列类型siunitx

相关内容