我已经使用 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
这样的传统字体,但最好使用像 这样的现代字体,以便从 的字体处理中受益。amsmath
lmodern
Libertine
fontspec
您可以在目录中找到可用字体的概览: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}
编译结果与之前相同。如果您的文档有多个这样的表格,则使用此方法会有一些好处