我正在尝试为环境创建一个新环境longtable
。filecontents
但我陷入困境,不知道如何解决我的问题。
\documentclass[a4paper,parskip]{scrartcl}
\usepackage{polyglossia}
\usepackage{longtable, ltxtable, filecontents, colortbl}
\newenvironment{tbl}{%
\begin{filecontents}{\jobname-ltxtable.tex}%
\begin{longtable}{|p{2cm}|p{2cm}|p{2cm}|p{2cm}|}%
\hline\rowcolor[gray]{.8}%
Column 1 & Column 2 & Column 3 & Column 4\\\hline%
\endhead%
}{%
%\caption{#1} %
\end{longtable}%
\end{filecontents}%
\LTXtable{\textwidth}{\jobname-ltxtable.tex}%
}
\begin{document}
\begin{tbl}
1 & 2 & 3 & 4 \\\hline
1 & 2 & 3 & 4 \\\hline
1 & 2 & 3 & 4 \\\hline
\end{tbl}
\end{document}
我发现filecontents
在宏中使用会导致问题,但我需要类似filecontents
写出长表的东西。该表稍后将由X
列组成。我降低了所有复杂性以生成一个最小(非工作)示例。
我希望有人能帮助我。
谢谢+再见!
答案1
您可以使用 environ 包来收集正文,然后将其写入。请注意,正文将写在一行中。
\documentclass[]{article}
\usepackage{polyglossia}
\usepackage{ltxtable,longtable,colortbl,environ,etoolbox}
\newwrite\mytabularwrite
\NewEnviron{tbl}
{%
\immediate\openout\mytabularwrite=\jobname-ltxtable.tex
\immediate\write\mytabularwrite{%
\unexpanded{%
\begin{longtable}{|p{2cm}|p{2cm}|p{2cm}|p{2cm}|}%
\hline\rowcolor[gray]{.8}%
Column 1 & Column 2 & Column 3 & Column 4\\\hline%
\endhead}%
}
\immediate\write\mytabularwrite{\unexpanded\expandafter{\BODY}}%
\immediate\write\mytabularwrite{\unexpanded{\end{longtable}}}%
\immediate\closeout\mytabularwrite
}
\AfterEndEnvironment{tbl}{\LTXtable{\textwidth}{\jobname-ltxtable2.tex}}
\begin{document}
\begin{tbl}
1äöü߀ & \textbf{2} & 3 & 4 \\\hline
1 & 2 & 3 & 4 \\\hline
1 & 2 & 3 & 4 \\\hline
\end{tbl}
\end{document}