![Код](https://rvso.com/image/266415/%D0%9A%D0%BE%D0%B4.png)
Рассмотрим следующий снимок экрана.
Функции, которые я хочу иметь:
- Я могу уменьшить размер страницы, и таблица может разбиваться на страницы.
- Для удобства чтения фон нечетных строк должен отличаться от фона четных строк.
- Значения должны рассчитываться автоматически, а не путем ручного ввода данных.
МВЭ
\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
функция названа cosec
в PGF. Столбец назван, 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
здесь тоже) с присоединенным синтаксисом via \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}