2016-12-13 9 views
9

Мне нужно создать широкую таблицу, как пример ниже, который будет охватывать всю страницу PDF после ее визуализации в латексе.Создание большой таблицы сначала с вложенными заголовками столбцов и получение рендеринга латекса для обертывания текста заголовка

Проблема, с которой я столкнулась, заключается в том, что текст заголовка столбца не обертывается в соответствии с шириной столбца.

+----------+--------------------------------+------------------------+----------+----------+----------+----------+----------+ 
| Header 1 | Long Header 2 that should wrap | Common column Header 3 | Header 4 | Header 5 | Header 6 | Header 7 | Header 8 | 
|   |        +-----------+------------+   |   |   |   |   | 
|   |        | Header 3a | Header 3b |   |   |   |   |   | 
+==========+================================+===========+============+==========+==========+==========+==========+==========+ 
| Value 1 | Value 2 does actually wrap  | Value 3a | Value 3b | Value 4 | Value 5 | Value 6 | Value 7 | Value 8 | 
+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+ 

показывает вверх, как это:

Header 2 encroaches into 3rd column

Я пытался регулировать ширину столбцов, используя .. tabularcolumns:: |p{0.1 \textwidth|... директиву, но это, похоже, не исправить посягает текста заголовка проблемы.

Если я удалить «Общий заголовок столбца 3» (второй пример ниже) я получаю нужный оберточной текст заголовка поведения, поэтому я предполагаю, что я делаю что-то неправильно с той частью:

+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+ 
| Header 1 | Long Header 2 that should wrap | Header 3a | Header 3b | Header 4 | Header 5 | Header 6 | Header 7 | Header 8 | 
|   |        |   |   |   |   |   |   |   | 
|   |        |   |   |   |   |   |   |   | 
+==========+================================+===========+============+==========+==========+==========+==========+==========+ 
| Value 1 | Value 2 does actually wrap  | Value 3a | Value 3b | Value 4 | Value 5 | Value 6 | Value 7 | Value 8 | 
+----------+--------------------------------+-----------+------------+----------+----------+----------+----------+----------+ 

Похоже, это:

Desired text wrapping behavior for Header 2

Любая помощь будет принята с благодарностью!

+0

Хотя не совсем совершенна (см 3/3a/3b), минимальный пример оборачивает заголовки для меня приятно. Я предполагаю, что вы что-то сделали с настройкой LaTeX, которая разбивает таблицу. [1]: https://i.stack.imgur.com/vEJdX.png – fpbhb

+0

Это похоже на ошибку в сфинксе. Я отправил [вопрос на их страницу GitHub] (https://github.com/sphinx-doc/sphinx/issues/3288), надеюсь, кто-то знает об обходной ситуации в то же время. – CoryKramer

ответ

3

Эта проблема связана с используется пакет LaTeX multirow. Sphinx производит этот вид наценки:

...&\multirow{2}{*}{\relax \sphinxstylethead{\relax 
    Long Header 2 that should wrap 
    \unskip}\relax \unskip}\relax &... 

но документация multirow говорит, что * указывает использовать the text parameter’s natural width, и я не знаю, но, возможно, это не очень хорошо играть с tabulary рендеринга таблицы. Альтернативой является указание на явную ширину, которую Sphinx не может угадать в целом: однако, возможно, это может произойти в случае наличия ..tabularcolumns, так как тогда будет информация.

multirow старый пакет, но было последнее обновление в сентябре 2016 года в v2.0, который вводит новую возможность = для этого параметра

, чтобы указать, что указанная ширина столбца, в котором \multirow запись устанавливается должна быть используемый.

Я попытался вручную вставляя =, а не * и фиксируется первый примером. Поскольку писатель Sphinx LaTeX, по-видимому, всегда использует \multirow с {*}, я могу предложить этот взлом. Положить в conf.py

latex_elements = { 
    'preamble': r'\let\oldmultirow\multirow\def\multirow#1#2{\oldmultirow{#1}{=}}', 
} 

и убедитесь, что вы используете полностью обновленную установку TeX, как вам нужно многорядные 2.0. Это означает, что вам необходимо обновить TeXLive 2016 или MikTeX в Windows.

Сфинкс может рассмотреть возможность использования =, но это будет работать только для пользователей с такими современными установками TeX. Может быть, есть лучшие способы, но это работало для меня на вашем примере 1 (тогда не нужно директивы ..tabularcolumns::), на бумаге a4 и с Sphinx 1.5.2. (Таблица длиннее текста ширины)

enter image description here

+0

Большое спасибо, что сработало! – AlexP21

+0

спасибо за отзыв ... так как я получил немного больше опыта с этим последним спецификатором '=' для multirow. Как объясняется в своих документах, спецификатор столбца должен прямо или косвенно указывать ширину столбца. Когда вы используете директиву '' .. tabularcolumns'' с '' p {Xcm} '' (или '' L'', если таблица достаточно короткая, чтобы Sphinx использовал среду '' tabulary''), это нормально , Но когда Sphinx использует среду '' tabular'' или '' longtable'' с спецификаторами '' l'', '=' не работает. В качестве более простой альтернативы разметке '' tabularcolumns', Sphinx 1.6 позволит Docutils ... – jfbu

+0

... '': widths: '' [option] (http://www.sphinx-doc.org/ en/master/changes.html # features-added), и это также хороший контекст для мультируста с спецификатором '' = ''. В вашем примере вы можете использовать нечто вроде '': widths: 10,25,10,10,10,10,10,10,10'', избегая разметки LaTeX (и HTML-сборка будет иметь такие же пропорции). – jfbu

5

Это не идеальное решение, но вы должны быть в состоянии вручную заставить текст на следующую строку с символом новой строки | (трубы и 2 зоны), как так:

+--------------------------- 
| | Header | | Header | 
| | 1   | | 2  | 
+==============+===========+ 
| value 1  | value 2 | 
+--------------+-----------+ 
+0

К сожалению, это работает для второго примера, но не для первого. – AlexP21

 Смежные вопросы

  • Нет связанных вопросов^_^