LINUX.ORG.RU

Latex. Longtable. Как заставить работать /nopagebreak ?

 


0

1

Тут выжимка из моего документа:

\documentclass[russian,utf8,pointsection,columnsxix,nocolumnxxxi,nocolumnxxxii]{eskdtext}
\usepackage{cmap}
\usepackage{verbatim}
\usepackage{longtable}
\usepackage{multirow}
\usepackage{array}
\usepackage[utf8]{inputenc}
\usepackage{eskdchngsheet}
\usepackage{graphicx}
\usepackage[T2A]{fontenc}
\graphicspath{{images/}}
\DeclareGraphicsExtensions{.pdf,.png,.jpg}
\def\No{\textnumero}

\usepackage{tikz}
\usetikzlibrary{positioning,arrows}
\tikzstyle{format} = [circle,thick,minimum size=1cm,draw=blue!50!black!50,top color=white,bottom color=blue!50!black!20,font=\footnotesize]



%%% Каждый раздел (\section) с новой страницы
\let\stdsection\section
\renewcommand\section{\newpage\stdsection}

\begin{document}

\section{Карта протокола MODBUS}
\subsection{Описание интерфейса}
Контроллер САУ Котельной работает в режиме слейв.

Интерфейс обмена: RS-485

Скорость: 115200

Количество бит: 8

Паритет: None

Количество стоповых бит: 1

Протокол обмена: Modbus RTU

Адрес модбас: 20

\newpage
\subsection{DI - Дискретные входы}
Все данные хранятся в Holding registers.

Используемые функции: 3, 6, 16.

\scriptsize
\begin{longtable}[c]{| c |>{\centering\arraybackslash}m{140pt}| c |>{\centering\arraybackslash}m{35pt}|>{\centering\arraybackslash}m{140pt}|}
\hline
\textbf{№} & \textbf{Описание типа} & \textbf{Поле} & \textbf{Тип значения} & \textbf{Описание поля}\\ \endhead\hline
\multirow{4}*{1} & \multirow{4}{140pt}{Авария котла К1.1} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{2} & \multirow{4}{140pt}{Авария котла К1.2} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{3} & \multirow{4}{140pt}{Авария котла К1.3} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{4} & \multirow{4}{140pt}{Верхний аварийный уровень в баке запаса воды} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{5} & \multirow{4}{140pt}{Нижний аварийный уровень в баке запаса воды} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{6} & \multirow{4}{140pt}{Рабочий уровень в баке запаса воды} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{7} & \multirow{4}{140pt}{Верхний аварийный уровень в баке запаса дизельного топлива} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{8} & \multirow{4}{140pt}{Нижний аварийный уровень в баке запаса дизельного топлива} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{9} & \multirow{4}{140pt}{Загазованность 1 порог} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{10} & \multirow{4}{140pt}{Загазованность 2 порог} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{11} & \multirow{4}{140pt}{Низкое давление перед сетевыми насосами отопления} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{12} & \multirow{4}{140pt}{Низкое давление перед сетевыми насосами теплоспутника} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{13} & \multirow{4}{140pt}{Положение отсчечного клапана} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{14} & \multirow{4}{140pt}{Кнопка аварийного останова котельной} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{15} & \multirow{4}{140pt}{Контроль питания шкафа АК} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{16} & \multirow{4}{140pt}{Контроль исправности ИБП} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{17} & \multirow{4}{140pt}{Пожар} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{18} & \multirow{4}{140pt}{Рабочий уровень в баке запаса дизельного топлива} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{19} & \multirow{4}{140pt}{Низкое давление после топливных насосов} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{20} & \multirow{4}{140pt}{Контроль работы топливного насоса №1} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{21} & \multirow{4}{140pt}{Контроль работы топливного насоса №2} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{22} & \multirow{4}{140pt}{Контроль работы сетевого насоса К3.1} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{23} & \multirow{4}{140pt}{Контроль работы сетевого насоса К3.2} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{24} & \multirow{4}{140pt}{Контроль работы сетевого насоса К4.1} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{25} & \multirow{4}{140pt}{Контроль работы сетевого насоса К4.2} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{26} & \multirow{4}{140pt}{Контроль работы подпиточного насоса К5.1} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{27} & \multirow{4}{140pt}{Контроль работы подпиточного насоса К5.2} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{28} & \multirow{4}{140pt}{В работе ввод №1} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\multirow{4}*{29} & \multirow{4}{140pt}{В работе ввод №2} & value & BOOL & Значение \\ \nopagebreak
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ \nopagebreak
\cline{3-5} & & imit & BOOL & Режим имитации \\ \nopagebreak
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline

\end{longtable}

\end{document}

Почему \multirow разрывается между страницами? Разве \nopagebreak не должен препятствовать этому?



Последнее исправление: andman (всего исправлений: 2)

Глянь сюда: https://texfaq.org/FAQ-nopagebrk.html

В качестве быстрого решения предлагаю в нужном месте поставить для гарантированного разрыва

\hline \pagebreak[4]\hline
100% автоматизации при вёрстке всё равно достичь не получается.

Дело в том, что \nopagebreak — это не 100% требование, а только указание, что тут рвать не следует и если по каким-то причинам штраф при разрыве всё равно оказывается не достаточно мотивирующим она игнорируется.

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 2)
Ответ на: комментарий от Evgueni

В качестве быстрого решения предлагаю в нужном месте поставить для гарантированного разрыва

Да в том то и проблема, что неизвестно это нужное место. Для разных документов и разного набора данных таблицы - место разрыва неизвестно.

Может быть можно как то расчитать место разрыва? Или может быть применить таблицы какого-нибудь другого типа?

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

Глянь сюда: https://texfaq.org/FAQ-nopagebrk.html

Пока не смог найти решения для своей задачи, исходя из данной ссылки.

Решил пожертвовать заголовком на каждой странице. Разбил таблицу на много маленьких:

\scriptsize
\begin{tabular}[c]{|>{\centering\arraybackslash}m{10pt}|>{\centering\arraybackslash}m{140pt}| c |>{\centering\arraybackslash}m{35pt}|>{\centering\arraybackslash}m{140pt}|}
\hline
\textbf{№} & \textbf{Описание типа} & \textbf{Поле} & \textbf{Тип значения} & \textbf{Описание поля}\\ \hline
\multirow{4}*{1} & \multirow{4}{140pt}{Авария котла К1.1} & value & BOOL & Значение \\ 
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ 
\cline{3-5} & & imit & BOOL & Режим имитации \\ 
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline
\end{tabular}

\begin{tabular}[c]{|>{\centering\arraybackslash}m{10pt}|>{\centering\arraybackslash}m{140pt}| c |>{\centering\arraybackslash}m{35pt}|>{\centering\arraybackslash}m{140pt}|}
\hline
\multirow{4}*{2} & \multirow{4}{140pt}{Авария котла К1.2} & value & BOOL & Значение \\ 
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ 
\cline{3-5} & & imit & BOOL & Режим имитации \\ 
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline
\end{tabular}

\begin{tabular}[c]{|>{\centering\arraybackslash}m{10pt}|>{\centering\arraybackslash}m{140pt}| c |>{\centering\arraybackslash}m{35pt}|>{\centering\arraybackslash}m{140pt}|}
\hline
\multirow{4}*{3} & \multirow{4}{140pt}{Авария котла К1.3} & value & BOOL & Значение \\ 
\cline{3-5} & & inv & BOOL & Инверсия сигнала \\ 
\cline{3-5} & & imit & BOOL & Режим имитации \\ 
\cline{3-5} & & imit\_value & BOOL & Значение в режиме имитации \\ \hline
\end{tabular}

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

Я бы отказался от таблицы, если это возможно. В печатном виде так оформленная информация крайне плохо воспринимается.

Поищи по ключевым словам latex nopagebreak table

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от Evgueni

Он же список регистров модбаса верстает. Их 65536 шт. может быть. Как же тогда это хорошо восприниматься будет?

2ТС. Если тебе не для печати, а в электронном виде, то лучше смастери xml и через xslt генери чтохочешь. Для отчётности можно и кривой LaTeX=>pdf.

А для внедренцев пожалуйста xml. Очень задалбывает тыщи регистров копировать из доков.

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

Их 65536 шт. может быть.

Обычные параграфы (можно продумать стандартную форму, команду к ней и читать параметры из текстового файла) + алфавитный указатель (а вот это возможно поможет с поиском).

Evgueni ★★★★★
()
Последнее исправление: Evgueni (всего исправлений: 1)
Ответ на: комментарий от Evgueni

Всяким внедренцам предоставляю данные в том что хотят - xml, xls ... А тут мне нужен конкретный официальный документ в стандарте ЕСКД. Отображать данные мне в нём нужно именно в табличном виде, я показал лишь маленькую выжимку, а там ещё у меня есть более масштабные таблицы и предоставлять их в виде всяких продуманных параграфов - пожалейте читателей.

Как я уже выше писал, пожертвовав заголовком, я решил проблему. Если конечно найдётся решение с нормальным longtable - буду рад.

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

Как бы вот оно: https://tex.stackexchange.com/questions/52100/ longtable-multirow-problem-wit...

Краткая выжимка. Замени в своей таблице \\ \nopagebreak на \\* и используй эту конструкцию в преамбуле.

\makeatletter
\def\@cline#1-#2\@nil{%
  \omit
  \@multicnt#1%
  \advance\@multispan\m@ne
  \ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi
  \@multicnt#2%
  \advance\@multicnt-#1%
  \advance\@multispan\@ne
  \leaders\hrule\@height\arrayrulewidth\hfill
  \cr
  \noalign{\nobreak\vskip-\arrayrulewidth}}
\makeatother

На твоем MWE заработало.

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