使用 tblr 在新环境中创建一个表

使用 tblr 在新环境中创建一个表

我已经使用 tblr 环境设置了一个(3 列)表格,并希望将其放入新环境中。然后能够使用类似 \name{人员姓名 & 人员电子邮件地址 & 人员位置} 的内容向表格中添加其他行

我正在使用 XeLaTeX

\documentclass{article}

\usepackage{amsmath} 
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{tabularray}
\usepackage{float}
\usepackage{lmodern}
\usepackage{xparse}

\RequirePackage{fontspec}
\defaultfontfeatures{Mapping=text-text}
\setsansfont{Verdana}
\renewcommand*{\familydefault}{\sfdefault}

\DeclareDocumentCommand\name{ > { \SplitList{&}} m }
   {%
    \ProcessList{#1}{\MakeEntry}\relax\\%
   }

\newenvironment{distlist}{%
    \begin{table}[H]
        \begin{tblr}{width=1\textwidth,
            hline{1,Z} = {0.5pt},
            hline{2} = {3pt},
            hline{3-Y} = {0.5pt,dotted},
            vline{2,3} = {dotted},
            row{1} = {1.1cm},  
            cells = {l,m, fg = black},
            column{1,3}={4cm},
            column{3}={3.1cm},
            column{2}={7.8cm,fg = blue}}
        
        Name& \color{black}Email Address    & Location\\
        }       
        {%
        \end{tblr}
        \end{table}
        }

\begin{document}

\begin{distlist}
\name{Bloggs, Joe & [email protected] & Europe} \\
\name{Bloggs, Jan & [email protected] & Europe}\\
\end{distlist}

\end{document}

我遇到了多个未定义的控制序列错误,不太确定该如何处理。很高兴听到其他建议。

答案1

我不知道这\name是怎么回事,当你可以更简单地输入

\begin{distlist}
Bloggs, Joe & [email protected] & Europe \\
Bloggs, Jan & [email protected] & Europe \\
\end{distlist}

\name无论如何,如果您愿意,可以使用expand功能。但请记住,tblr在开始排版之前会吸收其内容,并且根据 定义的环境也tblr应该这样做。

我删除了table,因为它只起了作用center;我还更改了列规格,因为你的有点矛盾。

\documentclass{article}

\usepackage{amsmath} 
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{tabularray}

\newcommand{\name}[1]{#1\\}

\NewDocumentEnvironment{distlist}{+b}{%
  \begin{center}
  \begin{tblr}[expand=\name]{
    width=1\textwidth,
    colspec={X[1,l] X[2,l] X[1,l]},
    hline{1,Z} = {0.5pt},
    hline{2} = {3pt},
    hline{3-Y} = {0.5pt,dotted},
    vline{2,3} = {dotted},
    row{1} = {1.1cm},
    column{2}={fg = blue},
  }
  Name & \color{black}Email Address & Location\\
  #1
  \end{tblr}
  \end{center}
}{}

\begin{document}

\begin{distlist}
\name{Bloggs, Joe & [email protected] & Europe}
\name{Bloggs, Jan & [email protected] & Europe}
\end{distlist}

\end{document}

在此处输入图片描述

lmodern如果您使用 XeLaTeX,则不要加载。

答案2

看着你的 MWE 我有点惊讶:当你以与在表中输入值相同的方式输入要排序的值时,为什么要定义新的命令和宏?

因此我简化了您的代码,以便tabularray环境直接填充在文档本身中:

\documentclass[11pt]{article}

\usepackage[sans-style=upright]{unicode-math} %-- loads fontspec for use in XeTeX and LuaLaTeX
\defaultfontfeatures{Scale = MatchLowercase}

\setmainfont{LinLibertine}[
    Scale=1.00,
    Extension = .otf,
    UprightFont = *_R,
    ItalicFont = *_RI,
    BoldFont = *_RB,
    BoldItalicFont = *_RBI]

%\setmathfont{XITSMath-Regular.otf}

\usepackage[a4paper,top=2cm,left=2cm]{geometry}
%\usepackage{amsmath} 
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{tabularray}
%\usepackage{float}
%\usepackage{lmodern}
\usepackage{xparse}


\begin{document}

\begin{tblr}{width=1\textwidth,
    hline{1,Z} = {0.5pt},
    hline{2} = {3pt},
    hline{3-Y} = {0.5pt,dotted},
    vline{2,3} = {dotted},
    row{1} = {1.1cm},  
    cells = {l,m, fg = black},
    column{1,3}={4cm},
    column{3}={3.1cm},
    column{2}={7.8cm,fg = blue}
    }%
    Name        & \color{black}Email Address    & Location\\
%=== entries of name / email / location
    Bloggs, Joe & [email protected]            & Europe \\
    Bloggs, Joe & [email protected]            & Europe \\
\end{tblr}
    
    
\end{document}

由于您是在 XeTeX(或 LuaLaTeX)中编译的,因此我更改了字体的加载方式。在 XeTeX 中,通常使用 或fontspec—— 当也需要数学运算时 —— unicode-math(将加载)。可以使用像enfontspec这样的传统字体,但最好使用像 这样的现代字体,以便从 的字体处理中受益。amsmathlmodernLibertinefontspec

您可以在目录中找到可用字体的概览:https://tug.org/FontCatalogue/

如果这不是您想要的答案,请编辑您的问题以澄清该排序宏的用途。

答案3

  • 我想知道既然直接使用就可以获得相同的结果,为什么还要定义新的环境tblr
  • 您的表格比文档类\textwidth的默认大小要宽得多article
  • 如果您的文档(也)“在线”使用,您可以考虑使用url包来编写电子邮件地址。
\documentclass{article}
\usepackage{xcolor}
\usepackage{tabularray}

\usepackage{url}
\renewcommand\UrlFont{\color{blue}\rmfamily}

\begin{document}
\noindent\begin{tblr}{hline{1,Z} = {0.5pt},
                      hline{2}   = {3pt},
                      hline{3-Y} = {0.5pt,dotted},
                      vline{2,3} = {dotted},
                          row{1} = {11mm},
                      colspec = {X[l] Q[l, wd=55mm] X[l]}
                    }%
Name        &   Email Address    &  Location\\
%=== entries of name / email / location
Bloggs, Joe & \url{[email protected]} & Europe \\
Bloggs, Joe & \url{[email protected]} & Europe \\
    \end{tblr}
\end{document}

在此处输入图片描述

(红线表示页面布局)

附录: 如果您希望为您的表格提供新的环境,请查看以下解决方案是否适合您:

\documentclass{article}
\usepackage{tabularray}
\NewTblrEnviron{distlist}
\SetTblrInner[distlist]{hline{1,Z} = {0.5pt},
                        hline{2}   = {3pt},
                        hline{3-Y} = {0.5pt,dotted},
                        vline{2,3} = {dotted},
                            row{1} = {11mm},
                           colspec = {X[l] Q[l, wd=55mm] X[l]}
                        }

\usepackage{url}
\renewcommand\UrlFont{\color{blue}\rmfamily}

\begin{document}
\noindent\begin{distlist}{}
Name        &   Email Address    &  Location\\
%
Bloggs, Joe & \url{[email protected]} & Europe \\
Bloggs, Joe & \url{[email protected]} & Europe \\
         \end{distlist}
\end{document}

编译结果与之前相同。如果您的文档有多个这样的表格,则使用此方法会有一些好处

相关内容