请考虑以下屏幕截图。
我想要的功能是:
- 我可以缩小页面尺寸并且允许表格跨页。
- 奇数行的背景必须与偶数行的背景不同,以便于阅读。
- 这些值必须自动计算,而不是手动输入数据。
平均能量损失
\documentclass[preview,border=12pt,varwidth]{standalone}
\usepackage[nomessages]{fp}
\usepackage[table]{xcolor}
\usepackage{longtable}
\usepackage{pgffor}
\begin{document}
\topskip=0pt
\begin{longtable}{*2{|>{$\displaystyle}c<{$}}|}\hline
\theta & \sin \theta\\
\foreach \x in {0,10,...,360}{\x & \FPeval\temp{round(\x:3)}\temp\\}
\end{longtable}
\end{document}
答案1
更简单的是,您可以使用计算器包,它允许您计算三角函数。此外超表格式包将允许您在每个表格上制作重复的标题/页脚。
这是一个更简单的例子:
代码
\documentclass{article}
\usepackage[nomessages]{fp}
\usepackage[table]{xcolor}
\usepackage{calculator}
\usepackage{forloop}
\usepackage{supertabular}
\usepackage{longtable}
\usepackage{fullpage}
\begin{document}
\newcounter{theangle}
\tablefirsthead{
\cline{2-4}
\rowcolor{white}
\multicolumn{1}{c|}{ } &
\cos \theta & \sin \theta & \tan \theta &
\multicolumn{1}{c}{ } \\
\hline
}
\tablehead{
\rowcolor{white}
\multicolumn{5}{c}{Table continued \ldots}\\
\cline{2-4}
\rowcolor{white}
\multicolumn{1}{c|}{ } &
\cos \theta & \sin \theta & \tan \theta &
\multicolumn{1}{c}{ } \\
\hline
}
\tablelasttail{
\rowcolor{white}
\multicolumn{1}{c|}{ } &
\cos \theta & \sin \theta & \tan \theta &
\multicolumn{1}{c}{ }\\
\cline{2-4}
}
\tabletail{
\hline
\rowcolor{white}
\multicolumn{1}{c|}{ } &
\cos \theta & \sin \theta & \tan \theta &
\multicolumn{1}{c}{ } \\
\cline{2-4}
\rowcolor{white}
\multicolumn{5}{c}{Continued on next page \ldots}\\
}
\rowcolors{2}{gray!50}{white}
\begin{center}
\begin{supertabular}{*5{|>{$}c<{$}}|}
\forloop{theangle}{0}{\value{theangle} < 360}{
\arabic{theangle}^\circ &
\DEGREESCOS{\value{theangle}}{\solx} \solx &
\DEGREESSIN{\value{theangle}}{\solx} \solx &
\DEGREESTAN{\value{theangle}}{\solx} \solx &
\arabic{theangle}^\circ\\
\addtocounter{theangle}{4}
}
\end{supertabular}
\end{center}
\end{document}
输出
答案2
套餐
xcolor
table
可以选择\rowcolor
pgfplotstable
(以及内部pgfmath
)用于构建整个表格。该pgfmath
包帮助我们创建三角函数值(它们都是内置的)longtable
允许在一个表中分页(需要多次传递)siunitx
在表格中排版数字(pgfmath
在数字打印方面已经做得很好了,但不太适合表格)booktabs
制定良好的规则。
\pgfplotstableset
辅助样式
以 开头的样式@
是我创建的新样式。既不需要@
(只是为了将pgfplotstable
的样式与我的样式区分开),名称也不是一成不变的。这些样式与.list
处理程序一起使用,以简化列的创建。
线路
@create function/.list={sin,cos,tan,cot,cosec,sec},
构建主列,请注意csc
函数在 PGF 中命名cosec
。列已命名,cosec
但我后来将 更改为column name
。csc
(可能还要注意,应该使用正确的列名,例如 和 ,$\phi$
而$\sin \phi$
不是空列名和非数学模式但数学函数名称。)
注意string type
,这将停用 PGF 打印数字功能(但不会停用列的 PGF 数学计算)。
longtable
设置
基本键begin table
和end table
用于设置从tabular
到的内部表环境longtable
。
该every head row
样式被(误)用于设置特殊行(这些是longtable
功能)。longtable
有关详细信息,请参阅手册。
\pgfplotstablenew
让我们创建 91 行(+标题(例如longtable
序言)):
\pgfplotstablenew[
columns={left,sin,cos,tan,cot,sec,cosec,right},
]{91}\myTable
\sisetup
在实际排版之前,需要进行某些siunitx
设置(也可以在列规范中完成S[…]
)。这些设置是必需的,这样siunitx
就不会尝试以科学计数法设置数字,因为 PGF 数学可能会以(几乎在任何地方)的形式给出输出1.746e-2
。
\pgfplotstabletypeset
最后!
column type
这里使用了设置 s 的辅助样式。
使用@secure header
宏\multicolumn
来隐藏内容,避免siunitx
解析。通常的做法是将内容放在括号中,例如,{sin}
在这里似乎不起作用。
left
和列right
仅使用通过语法附加的r
列(我们S
也可以在这里使用)。这也是标题需要空条目的原因。\si{\degree}
array
<{…}
\multicolumn{1}{c}{}
代码
\documentclass{article}
\usepackage[table]{xcolor}
\usepackage{pgfplotstable}
\usepackage{longtable}
\usepackage{siunitx}
\usepackage{booktabs}
\pgfplotstableset{
% helpers
@create function/.style={
create on use/#1/.style={
create col/expr=#1(\thisrow{left})}},
@secure header/.style={
columns/#1/.append style={
column name=\multicolumn{1}{c}{#1}}},
@set columns to siunitx type 1/.style={
columns/#1/.append style={
string type,
column type={S[table-format=1.4]}}},
@set columns to siunitx type 2/.style={
columns/#1/.append style={
string type,
string replace={inf}{\multicolumn{1}{c}{$\infty$}},
column type={S[table-format=2.4]}}},
@set columns to siunitx type 3/.style={
columns/#1/.append style={
string type,
string replace={inf}{\multicolumn{1}{c}{$\infty$}},
column type={S[table-format=2.3]}}},
@set columns to basic style/.style={
columns/#1/.append style={
column type={r<{\si{\degree}}}}},
@set empty header/.style={
columns/#1/.append style={
column name={\multicolumn{1}{c}{}}}},
%
% the left and right columns
create on use/left/.style={
create col/expr=\pgfplotstablerow},
create on use/right/.style={
create col/expr={90-\thisrow{left}}},
%
% Let's start: the functions
@create function/.list={sin,cos,tan,cot,cosec,sec},
% The longtable setup
begin table=\begin{longtable},
end table=\end{longtable},
every head row/.append style={
before row=\toprule,
after row=%
\midrule \endhead
\midrule
\multicolumn{1}{c}{} & {cos} & {sin} & {cot} & {tan} & {csc} & {sec} & \multicolumn{1}{r}{\dots}\\ \bottomrule
\endfoot
\midrule
\multicolumn{1}{c}{} & {cos} & {sin} & {cot} & {tan} & {csc} & {sec} & \multicolumn{1}{r}{} \\ \bottomrule
\endlastfoot},
every odd row/.style={before row={\rowcolor[gray]{.9}}},
}
\pgfplotstablenew[
columns={left,sin,cos,tan,cot,sec,cosec,right},
]{91}\myTable
\begin{document}
\sisetup{scientific-notation = fixed, fixed-exponent = 0, table-auto-round=true}
\pgfplotstabletypeset[
% the column types
@set columns to siunitx type 1/.list={sin,cos},
@set columns to siunitx type 2=tan,
@set columns to siunitx type 3/.list={cot,sec,cosec},
@set columns to basic style/.list={left,right},
% setup for the headers
@secure header/.list={sin,cos,tan,cot,sec},
@set empty header/.list={left,right},
columns/cosec/.append style={column name={\multicolumn{1}{c}{csc}}},
]\myTable
\end{document}