Команда \fillwithdottedlines (взято из exam documentclass) не работает в таблице (Tabularray). Почему? Можно ли исправить?

Команда \fillwithdottedlines (взято из exam documentclass) не работает в таблице (Tabularray). Почему? Можно ли исправить?

У меня есть следующий документ, представляющий собой таблицу (tabularray), которую я хочу заполнить пустыми пунктирными линиями. Я определил команду, \fillwithdottedlinesкак вы можете видеть в MWE. Хотя команда отлично работает вне tblrсреды, она не работает внутри. Почему это происходит и как это исправить? Пожалуйста, раскомментируйте строку с этой командой внутри таблицы, чтобы увидеть ошибку.

\documentclass[12pt]{article}
\usepackage[a4paper, total={180mm,257mm},left=15mm,top=20mm]{geometry}
\usepackage{tabularray}
\makeatletter
\newlength\dottedlinefillheight
\setlength\dottedlinefillheight{9mm}

\def\fillwithdottedlines#1 {%
    \begingroup
    \ifhmode
    \par
    \fi
    \hrule height \z@
    \nobreak
    \setbox0=\hbox to \hsize{\hskip \@totalleftmargin
        \vrule height \dottedlinefillheight depth \z@ width \z@
        \dotfill}%
    \cleaders \copy0 \vskip #1 \hbox{}%
    \endgroup
}
\makeatother

\begin{document}
    \begin{tblr}{colspec={Q[0.5\linewidth-5pt,c]X[c]},row{1,2}={1cm,m},row{3}={15cm,m},vlines,hlines}
        \SetCell[c=2]{c} \large \textbf{TITLE}                                      \\ 
        \textbf{Subtitle 1}             & \textbf{Subtitle 2}                       \\
                                        &                                           \\
        %\fillwithdottedlines{10cm}     &  \fillwithdottedlines{10cm}               \\
    \end{tblr}

\fillwithdottedlines{5cm}
    
\end{document}

решение1

Я не совсем уверен, что на самом деле здесь не так (и поэтому это только частичный ответ), но по крайней мере одна из проблем вытекает из определения, которое \fillwithdottedlinesтребует, чтобы пробел следовал за аргументом (потому что пробел разделяет аргумент). Вы можете проверить это, записав в одну из ячеек в левом столбце \fillwithdottedlines{5cm} {}, что по крайней мере не приведет к ошибкам, но все еще к неоптимальному выводу относительно вертикального выравнивания. По некоторым причинам, которые я не могу объяснить, но, вероятно, из-за того, как tblrпостроен , этот трюк не работает для ячеек в правом столбце.

Однако решением было бы обернуть макрос \fillwithdottedlinesв \parbox, например, с помощью \parbox{\linewidth}{\fillwithdottedlines{2cm} }. Позаботьтесь о необходимом пространстве перед последней закрывающей фигурной скобкой!

\documentclass[12pt]{article}
\usepackage[a4paper, total={180mm,257mm}, left=15mm, top=20mm]{geometry}
\usepackage{tabularray}

\makeatletter
\newlength\dottedlinefillheight
\setlength\dottedlinefillheight{9mm}

\def\fillwithdottedlines#1 {%
    \begingroup
    \ifhmode
    \par
    \fi
    \hrule height \z@
    \nobreak
    \setbox0=\hbox to \hsize{\hskip \@totalleftmargin
        \vrule height \dottedlinefillheight depth \z@ width \z@
        \dotfill}%
    \cleaders \copy0 \vskip #1 \hbox{}%
    \endgroup
}
\makeatother

\begin{document}
    \begin{tblr}{
        colspec = { Q[0.5\linewidth-5pt, c] X[c] },
        row{1,2} = {1cm, m},
        row{3} = {15cm, m},
        vlines,
        hlines,
    }
        \SetCell[c=2]{c} \large \textbf{TITLE}                                      \\ 
        \textbf{Subtitle 1}             & \textbf{Subtitle 2}                       \\
                                        &                                           \\
        \parbox{\linewidth}{\fillwithdottedlines{2cm} } &  
        \parbox{\linewidth}{\fillwithdottedlines{2cm} }                             \\
    \end{tblr}
    
%\fillwithdottedlines{5cm}

\end{document}

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

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