这个表格不应该跨越整个页面宽度吗?

这个表格不应该跨越整个页面宽度吗?

我有此表定义作为发票的一部分

\begin{tabularx}{\textwidth}[ht]{lXrr}%

多年来,它一直运行良好,直到我X第一次在列中输入一个非常短的单词。现在我的表格宽度非常小,并且在页面上水平居中。

我的预期是,X列应该填满所有空间,直到表格的宽度达到页面的宽度(边距除外)。

我曾阅读过有关指定类似的解决方法1.2\textwidth,但我不喜欢这样,因为该表是通过包含的模板\include,所以它会影响我所有的发票。

我也尝试了和\linewidth,但所有结果都是相同的布局。\hsize\columnwidth

有没有办法让唯一的X列扩展以便它利用所有可用空间?

实际和预期产出

完整包含的表定义(Rechnungstabelle.tex):

\newcommand{\Rechnungstabelle}[4]{%
vielen Dank für Ihren Auftrag.
\noindent
\begin{tabularx}{\textwidth}[ht]{lXrr}%
\toprule%
\bf{Anzahl} & \bf{Bezeichnung} & \bf{Einzelpreis} & \bf{Gesamtpreis} \\%
\midrule%
#1%
\bottomrule%
& \bf{Rechnungsbetrag}  & & \bf{\EUR{#2}} \\%
\ifthenelse{\equal{#3}{}}{}{& Enthaltene MwSt. 19\% & & \EUR{#3} \\}%
\ifthenelse{\equal{#4}{}}{}{& * Enthaltene MwSt. 7\% & & \EUR{#4} \\}%
\end{tabularx}%
}

将表格标题行更改为

\bf{Anzahl} & \bf{Bezeichnung} \hspace{\textwidth} & \bf{Einzelpreis} & \bf{Gesamtpreis} \\%

是一种解决方法,但我不认为这是一种好的 TeX 风格。

复现的最小示例:

\documentclass[ fontsize=12pt, 
                paper=a4,
                foldmarks=TBMPL,
                fromalign=center,
                ngerman
                ]{scrlttr2}
\usepackage{babel}
\usepackage[utf8]{inputenx}
\usepackage[right]{eurosym}
\usepackage{tabularx}
\usepackage{ltablex}
\usepackage{booktabs}
\usepackage{ifthen}

\input{Rechnungstabelle}
\begin{document}
\begin{letter}

\Rechnungstabelle{
    1,0 h & Do something & \EUR{99,00} & \EUR{99,00} \\ 
    }
    {99,00}
    {}{}
\end{letter}
\end{document}

答案1

ltablex是罪魁祸首,因为它会修改环境tabularx。如果你不使用它,请将其删除,或考虑ltxtable它使用不同的环境提供类似的功能。

您可能对以下定义感兴趣\Rechnungstabelle(请注意之前的段落分隔符\noindent):

% https://tex.stackexchange.com/a/58638/5764
\makeatletter
\def\ifemptyarg#1{%
  \if\relax\detokenize{#1}\relax % H. Oberdiek
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi}
\makeatother

\newcommand{\Rechnungstabelle}[4]{%
  vielen Dank für Ihren Auftrag.

  \noindent
  \begin{tabularx}{\linewidth}{lXrr}%
    \toprule%
    \textbf{Anzahl} & \textbf{Bezeichnung} & \textbf{Einzelpreis} & \textbf{Gesamtpreis} \\%
    \midrule%
    #1%
    \bottomrule%
    & \textbf{Rechnungsbetrag}  & & \textbf{\EUR{#2}} \\%
    \ifemptyarg{#3}{}{& Enthaltene MwSt. 19\% & & \EUR{#3} \\}%
    \ifemptyarg{#4}{}{& * Enthaltene MwSt. 7\% & & \EUR{#4}}%
  \end{tabularx}%
}

我已经不再使用\ifthenelse(见为什么ifthen过时了?)并使用\ifemptyarg用于带有和不带有可选参数的不同命令定义

答案2

\keepXColumns您可以使用它自己提供的命令来修复它ltablex(rtfm ;-))

已添加的另一个功能是,l如果表格内容允许这样做且不超过表格的指定宽度,则将 X 列视为列。换句话说,指定的宽度被视为允许的最大值,而不是表格的确切宽度。此功能是默认的,但可以使用 (或 )禁用(或启用\keepXColumns\convertXColumns

最好的,克里斯

相关内容