Код

Код

Рассмотрим следующий снимок экрана.

введите описание изображения здесь

Функции, которые я хочу иметь:

  • Я могу уменьшить размер страницы, и таблица может разбиваться на страницы.
  • Для удобства чтения фон нечетных строк должен отличаться от фона четных строк.
  • Значения должны рассчитываться автоматически, а не путем ручного ввода данных.

МВЭ

\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

Пакеты

  • xcolortableс возможностью\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}

Выход

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Связанный контент