Латекс: проблема с несколькими рядами - PullRequest
4 голосов
/ 16 ноября 2010


Я создаю таблицу с многовариантностью, но у меня проблема.Насколько я понимаю, это форма многорядной строки:

\multirow{count}{alignment}{content}

, где count - это количество строк, которые нужно объединить, выравнивание - это l, c, r или *, а content - это содержимое.ряда.Я попробовал следующее:

\multirow{3}{*}{Framing}

, но у меня проблема.Вместо того, чтобы видеть слово «Обрамление» в ячейке, я вижу «3 * Обрамление», которое указывает на то, что элемент \ multirow не работает.Любая идея?

Кроме того, как можно выровнять текст в ячейке по вертикали?

ОБНОВЛЕНИЕ: Я думал, что \ usepackage {multirow} решит это, но я все еще вижу проблемы:Во-первых, я не могу сделать вертикальные выравнивания.Во-вторых, я получаю странную вещь с ячейкой «Обрамление».Вместо выравнивания «кадрирования» по левому краю я получаю одну виртуальную строку, содержащую букву «l», а затем после двух виртуальных строк я получаю слово «кадрирование» !!Это что-то вроде этого:

______________
|     l       |
|             |
|     Framing |
|             |
|             |
|             |
|             |
______________

Это мой стол для тех, кто спрашивал об этом:

\begin{table*}\tiny
    \centering
    \begin{tabular}{|c|c|c|c|c|p{2in}|}
        \hline

        Rule & Factor & Best Value & \Delta_t & \Delta_{do} & Comments \\

        \hline

        % Diagonal Dominance Rule
        \multirow{3}{*}{Diagonal Dominance} & Line Angle & 45 & 15 & 30 & The angle between the prominent line of the object and
                                                                          the diagonal lines \\                                     % TODO: What object? Make sure it is clear.
                                            & Line Distance & 0 & 0.25 & 1 & The distance, in screen coordinates, from the
                                                                             prominent line of the object to the diagonal lines. \\ % TODO: Need to define screen coordinates
                                            & Corner Distances & 0 & 0.1 & 0.7 & The distance, in screen coordinates, from the
                                                                                 end of the prominent line of the object to the corners of the screen. \\

        \hline

        % Framing Rule
        \multirow{4}{l}{Framing} & Left Distance & 0 & ${Frame Width}*5\%$ & ${Frame Width}*25\%$ & The distance between the
        left side of the frame covering the object and the left or the right side of the intended frame, whichever closer. \\
                                & Right Distance & 0 & ${Frame Width}*5\%$ & ${Frame Width}*25\%$ & The distance between the
        right side of the frame covering the object and the left or the right side of the intended frame, whichever closer. \\
                                & Top Distance & 0 & ${Frame Height}*5\%$ & ${Frame Height}*25\%$ & The distance between the
        top side of the frame covering the object and the upper or the lower side of the intended frame, whichever closer. \\
                                & Bottom Distance & 0 & ${Frame Height}*5\%$ & ${Frame Height}*25\%$ & The distance between the
        bottom side of the frame covering the object and the upper or the lower side of the intended frame, whichever closer. \\

        \hline
    \end{tabular}
    \caption{The factors of each rule and their parameters.}
    \label{table:factors}
\end{table*}

С уважением,
Rafid

Ответы [ 3 ]

5 голосов
/ 16 ноября 2010

1) Вы положили \usepackage{multirow} в начале документа?

2) Вероятно, есть хорошие примеры для подражания. Я никогда не использовал этот пакет, но за короткое время (в секундах) смог найти этот PAGE через Google. Помогает ли вам следовать этому примеру?


Обновление: после просмотра вашей фактической таблицы я не хочу это говорить, но думаю, что ваш пробел вызван переполнением в столбце "комментарии" на несколько строк. Я обрезал ваши комментарии и получил это (столбец 1 теперь по центру по желанию):

\begin{table*}\tiny
  \centering
  \begin{tabular}{|c|c|c|c|c|p{3cm}|}
    \hline
    Rule & Factor & Best Value & \Delta_t & \Delta_{do} & Comments \\
    \hline

    % Diagonal Dominance Rule
    \multirow{3}{*}{Diagonal Dominance} & Line Angle & 45 & 15 & 30 & The angle between... \\
                                        & Line Distance & 0 & 0.25 & 1 & The distance, in... \\
                                        & Corner Distances & 0 & 0.1 & 0.7 & The distance, in... \\
    \hline

    % Framing Rule
    \multirow{4}{*}{Framing} & Left Distance & 0 & ${Frame Width}*5\%$ & ${Frame Width}*25\%$ & The distance... \\
                             & Right Distance & 0 & ${Frame Width}*5\%$ & ${Frame Width}*25\%$ & The distance... \\
                             & Top Distance & 0 & ${Frame Height}*5\%$ & ${Frame Height}*25\%$ & The distance... \\
                             & Bottom Distance & 0 & ${Frame Height}*5\%$ & ${Frame Height}*25\%$ & The distance... \\
    \hline
  \end{tabular}

  \caption{The factors of each rule and their parameters.}
  \label{table:factors}

\end{table*}

Что касается аргумента {l}, я думаю, что ссылка, которую я первоначально разместил, возможно, неверна. LaTeX выдает мне некоторые ошибки, когда я пытаюсь заменить * на l для аргумента \multirow. Я получаю это на тестовом столе:

! Missing number, treated as zero.
<to be read again> 
                   l
l.12 \multirow{4}{l}{Batch}
                            & MM & Min-Min \\
! Illegal unit of measure (pt inserted).
<to be read again> 
                   l
l.12 \multirow{4}{l}{Batch}
                            & MM & Min-Min \\

После нахождения ЭТОГО я думаю, что второй аргумент в \multirow не для выравнивания, а для ширины. Ссылка на вики LyX говорит, что формат такой:

\multirow{number of rows}{cell width}{cell entry}

Мы предполагали, что {ячейка ширины} была действительной {выравнивание}, и я думаю, что ссылка из более раннего делает это запутанным. Смотрите заметку на вики LyX о пробелах; Вы можете использовать следующее, где это необходимо, чтобы сделать вашу ставку:

\renewcommand{\multirowsetup}{\centering}

И замените \centering на \raggedleft или \raggedright, где это необходимо. Я все еще думаю, что у вас возникнут проблемы с несколькими строками. Я, по крайней мере, показал, что отказ от них заставляет интервалы работать так, как хотелось бы ... как я боюсь, как заставить их центрироваться на вашем примере по умолчанию, я не боюсь. Но, может быть, теперь вы знаете, в чем проблема?

Полагаю, если вы действительно, действительно, очень хотели, чтобы вы разбили предложение, выяснили, сколько строк в нем занято, и соответствующим образом скорректируйте аргумент \multirow для увеличения количества строк. Хотя вам также, вероятно, понадобится вложенная многорядная структура:

|                   | item 1, 2 rows | comment 1 line 1              |
|  multirow, 4 rows |                | comment 1 line 2 (spill over) |
|                   | item 2, 2 rows | comment 2 line 1              |
|                   |                | comment 2 line 2 (spill over) |

Это имеет смысл? Столбец 1 будет охватывать все строки для своего раздела, последующие строки будут охватывать количество строк, необходимое для разделенных комментариев, а каждая строка, необходимая для комментариев (некоторые занимают 3 или 4), будет находиться на своих отдельных строках и просто появится быть непрерывным. Не уверен, что интервал между предложениями будет выглядеть странно.

Наф бродяга. Есть пища для размышлений.


Одно последнее обновление: Последний надежный способ добиться этого - таблицы TikZ. По сути, ваши узлы похожи на «клетки». Затем просто сложите их и сделайте так, чтобы они выглядели как стол. Возможно, это ужасное предложение, но я вас уверяю, что у вас будет вся гибкость, которая вам нужна, с расстоянием между ячейками и тому подобным. Некоторые идеи:

2 голосов
/ 16 ноября 2010

Да, вам нужен пакет multirow.

\usepackage{multirow}
\begin{document}
\begin{table}
\centering
\begin{tabular}{l||c|r}
Header 1 & Header 2 & Header 3 \\
\multirow{2}{*}{Hello} & stuff & stuff \\
& Body 2 & Body 3
\end{tabular}
\end{table}
\end{document}

РЕДАКТИРОВАТЬ после редактирования вопроса: я получил две ошибки:

  1. \multirow{4}{l}{Framing}. Я изменил на \multirow{4}{*}{Framing}

  2. Delta_t изменено на $Delta_t$.

В остальном все вроде нормально. Вы можете также спросить tex.stackexchange.com .

2 голосов
/ 16 ноября 2010

Дикая догадка: вы получаете undefined control sequence: multirow, потому что вам не хватает \usepackage{multirow} в преамбуле?

...