我有此表定义作为发票的一部分
\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
。
最好的,克里斯