如何将命令的长度转发到列说明符?

如何将命令的长度转发到列说明符?

我使用 longtable 时,希望用竖线分隔单元格,但不需要用于表头。我有 8 列(但此处仅显示 3 列作为示例),并希望在主 longtable 以及所有多列说明符上重复使用相同的长度。

在这个例子中,我在一个表中仅使用一个标题,但是如果有多个标题(第一页、最后一页、其他页面),我必须一遍又一遍地指定相同的列长度。

所以我有:

\documentclass[a4paper,10pt]{article}
\usepackage{longtable}
\usepackage{array}
\usepackage{ifthen}
\usepackage{xifthen}

\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}b{#1}}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}b{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}b{#1}}

\providecommand*\tablehead[2][]{\scriptsize\textbf{#2\ifthenelse{\isempty{#1}}{}{\textsuperscript#1}}}

\begin{document}

\begin{longtable}[l]{|@{}L{0.2\textwidth}@{}|@{}C{0.5\textwidth}@{}|@{}R{0.3\textwidth}@{}|}
\multicolumn{1}{@{}L{0.2\textwidth}@{}}{\tablehead[1]{First head}} &
\multicolumn{1}{@{}C{0.5\textwidth}}{\tablehead[2]{Second head}} &
\multicolumn{1}{@{}R{0.3\textwidth}}{\tablehead[3]{Last}} \\
\hline
\endfirsthead
\hline
\endlastfoot
1 & 2 & 3 \\
4 & 5 & 6 \\
\end{longtable}

\end{document}

我原本想在命令 \mcw 中只定义一次列宽,该命令定义了第 1、2 和 3 列的列宽。因此,如果我想尝试自己喜欢的长度,只需在一个地方进行更改即可。我的建议(无法编译)是:

\documentclass[a4paper,10pt]{article}
\usepackage{longtable}
\usepackage{array}
\usepackage{ifthen}
\usepackage{xifthen}

\newcolumntype{C}[1]{>{\centering\let\newline\\\arraybackslash\hspace{0pt}}b{#1}}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}b{#1}}
\newcolumntype{R}[1]{>{\raggedleft\let\newline\\\arraybackslash\hspace{0pt}}b{#1}}

\providecommand*\tablehead[2][]{\scriptsize\textbf{#2\ifthenelse{\isempty{#1}}{}{\textsuperscript#1}}}

\newcommand*{\mcw}[1]{% My column width
\ifthenelse{#1=1}{0.2\textwidth}{%
\ifthenelse{#1=2}{0.5\textwidth}{%
\ifthenelse{#1=3}{0.3\textwidth}{%
}}}}

\begin{document}

\begin{longtable}[l]{|@{}L{\mcw{1}}@{}|@{}C{\mcw{2}}@{}|@{}R{\mcw{3}}@{}|}
\multicolumn{1}{@{}L{\mcw{1}}@{}}{\tablehead[1]{First head}} &
\multicolumn{1}{@{}C{\mcw{2}}}{\tablehead[2]{Second head}} &
\multicolumn{1}{@{}R{\mcw{3}}}{\tablehead[3]{Last}} \\
\hline
\endfirsthead
\hline
\endlastfoot
1 & 2 & 3 \\
4 & 5 & 6 \\
\end{longtable}

\end{document}

我做错了什么?新命令(本例中为 mcw)不能“返回”长度并将其作为参数传递给另一个命令(本例中为 L、C 和 R)吗?

答案1

作为长度参数传递的值必须扩张到一定长度(以便它在 中起作用\setlengthifthenelse仅通过扩展是行不通的。您可以这样定义它:

\newcommand*{\mcw}[1]{% My column width
\ifcase#1%
% 0
\or
0.2\or
0.4\else
0.3\fi
\textwidth}

我稍微减少了 0.5,否则页面会因为垂直规则而过满。

相关内容