LINUX.ORG.RU

Отсечь таблицу

 


0

2

Хочу разместить табличку на А5, но она не влезает потому что слишком длинная, но она достаточно узкая и её вполне можно разрезать на некоторой строке и разместить остающиеся строки в отдельной таблице справа.

Таблица вида:

\newcommand\vacTable[1]{\begin{table}[ht]
  \centering
  \caption{Таблица #1}
  \begin{tabular}{r%
      S[table-format=3.0]
      S[table-format=4.0]}
    \toprule
    {№} & {$U, мВ$} & {$I, нА$}\\ 
    \midrule
    \input{./tables-data/input-VAC-#1.tex} 
    \bottomrule
  \end{tabular} 
  \label{tab:vacTable-#1}
\end{table}}

Можно ли это сделать средствами LaTeX, без внешних операций с файлом input-VAC-*.tex?

★★★★★

Можно попробовать вручную разбить её на 2 таблицы. Ну или удвоить количество столбцов в этой. Так не пойдёт? А если к странице применить 2 колочную версику, что с таблицей будет?

sehellion ★★★★★
()

Можно воспользоваться longtable или попробовать vsplit (правда, этот способ я не проверял).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от ados

В общем ничего не работает, xtab походу multicol не поддерживает.

Случай особый поэтому всё же для него я программно разделил файл данных. Теперь всё выглядит примерно так:

\begin{table}[ht]
  \centering
  \caption{Таблица №3}
  \label{tab:vacTable-3}
  % \parbox{0.4\linewidth}{\vacTable{3}{00}}
  \begin{minipage}[t]{0.25\linewidth}
    \vacTable{3}{00}
  \end{minipage}
  \hspace{10mm}
  \begin{minipage}[t]{0.25\linewidth}
    \vacTable{3}{01}
  \end{minipage}
  \hspace{10mm}
  \begin{minipage}[!t]{0.25\linewidth}
    \vacTable{3}{02}
  \end{minipage}
\end{table}

Однако есть одна проблема, третья табличка меньше чем другие и у её minipage игнорируется параметр [!t] и она опускается ниже уровнем посередине, а хочется чтобы все выстраивались верхними границами на одной линии.

ados ★★★★★
() автор топика

Попробовал задействовать нижний уровень

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T2A]{fontenc}
\usepackage[russian,english]{babel}

\usepackage{multicol}
\usepackage{calc}
\usepackage{xstring}

\newread\tableFile
\newcommand{\tableCountCols}{3}
\newcommand{\tableCountColsPlusOne}{4}
\newcounter{tableCountLines}
\newcounter{tablePartCountLines}
\newcounter{tableTmp}
\newcounter{tableNumColumn}
 
\newcommand\vacTable[1]{%
%....
}

\begin{document}
abc

\makeatletter%

%%\vacTable{1}
\openin\tableFile=./tables-data/input-VAC-1.tex
\setcounter{tableCountLines}{0}
\loop
  \readline\tableFile to\tableLine
  \ifeof\tableFile
  \else
    \stepcounter{tableCountLines}
\repeat
\closein\tableFile
\setcounter{tablePartCountLines}{\value{tableCountLines}/\tableCountCols}
\setcounter{tableTmp}{\value{tablePartCountLines}*\tableCountCols}
\ifnum \value{tableTmp}<\value{tableCountLines}
  \stepcounter{tablePartCountLines}
\fi
%
\openin\tableFile=./tables-data/input-VAC-1.tex
\begin{table}[ht]
  \centering
  \caption{Таблица 1}
  \label{tab:vacTable-1}
  \setcounter{tableNumColumn}{1}
  \begin{multicols}{\tableCountCols}
    \loop
      \ifnum \value{tableNumColumn}<\tableCountColsPlusOne 
        \setcounter{tableTmp}{0}
\begingroup
        \begin{tabular}{r|c|c}
          {№} & {$U$, мВ} & {$I$, нА}\\ 
        \hline
          \ifnum \value{tableNumColumn}=\tableCountCols
            \setcounter{tablePartCountLines}{\value{tablePartCountLines}+\value{tableCountLines}-\tableCountCols*\value{tablePartCountLines}}
          \fi
          \@whilenum\value{tableTmp}<\value{tablePartCountLines} \do{
            \readline\tableFile to\tableLine%
\stepcounter{tableTmp}
\ifnum \value{tableTmp}=\value{tablePartCountLines}
  \StrGobbleRight{\tableLine}{3}[\tableLine]
\fi
\scantokens\expandafter{\tableLine}
}
        \end{tabular}
\endgroup
\begingroup
\ifnum \value{tableNumColumn}<\tableCountCols
  \pagebreak
  xyz
\fi
\endgroup
      \stepcounter{tableNumColumn}
    \repeat
  \end{multicols}
\end{table}
\closein\tableFile
\makeatother%
\arabic{tableCountLines}
\arabic{tablePartCountLines}
  
abc

\end{document}

Но как запихнуть всё это в команду не понимаю. Тут явно накосячил с использованием цикла loop и вложенных в него условий. Целый день разбирал эту лапшу, плюнул и выкладываю то что было с утра.

AlexVR ★★★★★
()
Ответ на: комментарий от anonymous

Не работает. Пробовал также в конце внутри каждого minipage. Безуспешно.

ados ★★★★★
() автор топика
Ответ на: комментарий от ados

Пришёл, увидел, добил эту дрянь

Решил добавлением аргумента [t] к макросу tabular:

\newcommand\vacTable[2]{
  \begin{tabular}[t]{r%
      S[table-format=3.0]
      S[table-format=4.0]}
    \toprule
    {№} & {$U, мВ$} & {$I, нА$}\\ 
    \midrule
    \input{./tables-data/input-VAC-#1-#2.tex} 
    \bottomrule
  \end{tabular}}

Кстати опробовал ещё такой метод группировки:

\begin{table}[ht]
  \raggedleft
  \caption{Таблица №4}
  \label{tab:vacTable-3}
  \begin{tabular}{p{0.25\linewidth}
      @{\hskip 8mm}
      p{0.25\linewidth}
      @{\hskip 8mm}
      p{0.25\linewidth}}
    \vacTable{3}{00} &
    \vacTable{3}{01} &
    \vacTable{3}{02}\\
  \end{tabular}
\end{table}

Он тоже работает и здесь код мне больше нравится.

ados ★★★★★
() автор топика
Ответ на: комментарий от AlexVR

А где можно достать документацию к командам \loop и \repeat. Они вообще из какого пакета?

ados ★★★★★
() автор топика
Ответ на: комментарий от ados

Это внутренние расширения TeX-а как языка программирования (1, 2 (стр. 261), с ними не всё так гладко. 3

AlexVR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.