我想使用该pgfplotstable
包创建一个表。我已成功使用以下方法获得了 95% 的所需格式:
\usepackage{pgfplotstable}
\usepackage{booktabs}
% global settings
\pgfplotstableset{
after row={\hline},
every head row/.style={
before row={
\rowcolor{lightgray}
\noalign{\hrule height \tableborder}
},
after row={
\hline
},
},
every last row/.style={
after row=\noalign{\hrule height \tableborder}
},
col sep = &,
row sep=\\,
% column type/.add={}{\vrule width \tableborder},
every col no 1/.style={ column type/.add={|}{} },
every col no 2/.style={ column type/.add={|}{} },
every col no 3/.style={ column type/.add={|}{} },
every col no 4/.style={ column type/.add={|}{} },
every col no 5/.style={ column type/.add={|}{} },
every first column/.style={
column type/.add={!{\vrule width \tableborder}}{}
},
every last column/.style={
column type/.add={}{!{\vrule width \tableborder}}
},
string type,
}
尽管有很多every col no
我不喜欢的地方,但它仍然几乎完美地工作。我唯一缺少的是将标题的文本加粗。如果我尝试在实际表格中强制将其加粗,它不会编译,而且我无法将行的内容更改为粗体。因此,对于此代码,我提出了 2 个问题:
我怎样才能使标题的文字变为粗体?
every col no
是否有人知道以更好但更通用的方式执行命令的方法?
编辑:这是现在的完整代码(缺少一个 def)。初始配置下方是生成表的代码。
\usepackage{pgfplotstable}
\usepackage{booktabs}
\def\tableborder{1.5pt}
% global settings
\pgfplotstableset{
after row={\hline},
every head row/.style={
before row={
\rowcolor{lightgray}
\noalign{\hrule height \tableborder}
},
after row={
\hline
},
},
every last row/.style={
after row=\noalign{\hrule height \tableborder}
},
col sep = &,
row sep=\\,
% column type/.add={}{\vrule width \tableborder},
every col no 1/.style={ column type/.add={|}{} },
every col no 2/.style={ column type/.add={|}{} },
every col no 3/.style={ column type/.add={|}{} },
every col no 4/.style={ column type/.add={|}{} },
every col no 5/.style={ column type/.add={|}{} },
every first column/.style={
column type/.add={!{\vrule width \tableborder}}{}
},
every last column/.style={
column type/.add={}{!{\vrule width \tableborder}}
},
string type,
}
这样就生成了表格。请注意,这只是实际文档的一部分,表格是假的。
\pgfplotstabletypeset{
person & singEnglish & singGaeilge & pluralEnglish & pluralGaeilge\\
1st & at me & agam & at us & againn\\
2st & at you & agat & at you & agaibh\\
3st & at him & aige & at them & acu\\
& at her & aici & &\\
}
结果如下。我希望标题中的文本为粗体,并且列线贯穿所有列
編輯 2:
好的,现在这里有一个可编译代码(独立)的示例,但现在它拒绝绘制标题行。请帮忙。
\documentclass[12pt,a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\def\tableborder{1.5pt}
% global settings
\pgfplotstableset{
after row={\hline},
every head row/.style={
before row={
\noalign{\hrule height 1.5pt}
},
after row={
\hline
},
},
every last row/.style={
after row=\noalign{\hrule height 1.5pt}
},
col sep = &,
row sep=\\,
% column type/.add={}{\vrule width \tableborder},
every col no 1/.style={ column type/.add={|}{} },
every col no 2/.style={ column type/.add={|}{} },
every col no 3/.style={ column type/.add={|}{} },
every col no 4/.style={ column type/.add={|}{} },
every col no 5/.style={ column type/.add={|}{} },
every first column/.style={
column type/.add={!{\vrule width 1.5pt}}{}
},
every last column/.style={
column type/.add={}{!{\vrule width 1.5pt}}
},
string type,
}
\begin{document}
\pgfplotstabletypeset{
1 & 2 & 4 \\
3 & 4 & 9 \\
}
\end{document}
答案1
Pgfplotstable 对修改标题单元格内容的支持非常有限。事实上,分配其内容的唯一实用方法是修改列名。修改列名有两种方法:第一种是直接分配(这里不合适),第二种是assign column name
允许调整现有的列名。由于标题行只包含列名,因此您可以使用以下方法将其加粗:
\documentclass{standalone}
\usepackage{pgfplotstable}
\usepackage{booktabs}
\usepackage{array}
\usepackage{colortbl}
\begin{document}
\pgfplotstabletypeset[
assign column name/.style={/pgfplots/table/column name={\textbf{#1}}},
]
{
first second third
1 2 3
4 5 6
}
\end{document}
在此上下文中,#1
是“正常”列名。 键预期修改column name
。
答案2
我知道这个帖子已经很旧了,但我刚刚才发现这一点,而且太激动了,舍不得分享……
关于你的第一个问题粗体标题我可以提供以下内容。在排版表格之前,使用以下方法在列类型中指定粗体字体:
column type={>{\fontseries{bx}\selectfont}c} %see sec 2.6 for defining column types
这应该会将表格中的所有条目设置为粗体。要仅将标题保留为粗体,您可以使用以下方法对每个单元格的内容进行后处理
postproc cell content/.append style={ % see sec 3.2
/pgfplots/table/@cell content/.add={\fontseries{\seriesdefault}\selectfont}{}}
这是可行的,因为第二段代码不适用于标题单元格,所以我们可以先将所有内容设置为粗体,然后将其他(非标题)单元格重置为正常字体。有关更多信息,请参阅 pgfplotstable 手册中注释中的部分。
这是 MWE
\documentclass{article}
\usepackage{pgfplotstable}
\begin{document}
\pgfplotstableset{% set global options
format=inline,
string type,
col sep={&}, row sep={\\},
column type={>{\fontseries{bx}\selectfont\centering\arraybackslash}c},
every head row/.style={after row=\hline},
postproc cell content/.append style={
/pgfplots/table/@cell content/.add={\fontseries{\seriesdefault}\selectfont}{}}
}
\pgfplotstabletypeset{% The input table
H1&H2&H3 \\
data1&data2&data3 \\
moredata1&moredata2&moredata3 \\
}
\end{document}
编辑:
这是嵌入在格式化表中的代码。我注释掉了 ,every col no <index>/.style
并用 替换了该块column type={<options>}
。这允许您为每一列指定列类型。由于您希望对第一列和最后一列使用不同的规范,因此您必须手动指定它们。
\documentclass{article}
\usepackage{pgfplotstable}
\usepackage{booktabs,colortbl}
\begin{document}
\def\tableborder{1.5pt}
% global settings
\pgfplotstableset{
after row={\hline},
every head row/.style={
before row={
\rowcolor{lightgray}
\noalign{\hrule height \tableborder}
},
after row={
\hline
},
},
every last row/.style={
after row=\noalign{\hrule height \tableborder}
},
col sep = &,
row sep=\\,
% column type/.add={}{\vrule width \tableborder},
%every col no 1/.style={ column type/.add={|}{} },
%every col no 2/.style={ column type/.add={|}{} },
%every col no 3/.style={ column type/.add={|}{} },
%every col no 4/.style={ column type/.add={|}{} },
%every col no 5/.style={ column type/.add={|}{} },
column type={|>{\fontseries{bx}\selectfont}c},
every first column/.style={
column type={!{\vrule width \tableborder}>{\fontseries{bx}\selectfont}c} % removed /.add so you can replace the format rather than append to it.
},
every last column/.style={
column type/.add={}{!{\vrule width \tableborder}}
},
string type,
postproc cell content/.append style={
/pgfplots/table/@cell content/.add={\fontseries{\seriesdefault}\selectfont}{}
}
}
\pgfplotstabletypeset{
person & singEnglish & singGaeilge & pluralEnglish & pluralGaeilge\\
1st & at me & agam & at us & againn\\
2st & at you & agat & at you & agaibh\\
3st & at him & aige & at them & acu\\
& at her & aici & &\\
}
\end{document}
答案3
好吧,这不是一个好的解决方案,我真的不喜欢它,因为它非常具体,其目的是为了让用户更容易使用,但无论如何,它在这里:
\pgfplotstabletypeset
[columns/col1/.style{column name=\textbf{col1}},
columns/col2/.style{column name=\textbf{col2}},
columns/col3/.style{column name=\textbf{col3}},
columns/col4/.style{column name=\textbf{col4}},
columns/col5/.style{column name=\textbf{col5}}
]{
col1 & col2 & col3 & col4 & col5 \\
1st & at me & agam & at us & againn \\
2st & at you & agat & at you & agaibh \\
3st & at him & aige & at them & acu \\
& at her & aici & & \\
}