Как сделать так, чтобы текст последнего столбца оказался внизу строки?
То есть я хочу, XXX
чтобы он был выровнен с линией, содержащей стрелку.
Я пробовал поиграться с \multirow{3}{-3ex}{XXX}
, но, очевидно, я не понимаю \multirow
.
Код:
\documentclass{article}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\begin{tabularx}{\linewidth}[t]{l X p{1.3cm}}
& Header & Title \\\cmidrule(lr){2-2}\cmidrule(lr){3-3}
a. & Some text text text text text text text text text text text text text text
text text text text text text text text text text
Want XXX on this line $\rightarrow$%
& XXX\\
\end{tabularx}
\end{document}
решение1
(Отредактированный ответ, с использованием другого механизма)
\documentclass{article}
\usepackage{tabularx}
\usepackage{booktabs}
\makeatletter
\def\foo#1{\leavevmode
\expandafter\ifx\csname PDFSAVE#1\endcsname\relax
\expandafter\gdef\csname PDFSAVE#1\endcsname{0sp}%
\fi
\pdfsavepos\write\@auxout{\gdef\string\PDFSAVE#1{\the\pdflastypos}}}
\makeatother
\begin{document}
\noindent
\begin{tabularx}{\linewidth}[t]{l X p{1.3cm}}
& Header & Title \\\cmidrule(lr){2-2}\cmidrule(lr){3-3}
a. & \foo{a}Some text text text text text text text text text text text text text text
text text text text text text text text text text
Want XXX on this line $\rightarrow$\foo{b}%
& \smash{\raisebox{\dimexpr\PDFSAVEb sp-\PDFSAVEa sp\relax}{XXX}}\\
\end{tabularx}
\end{document}
Исходный ответ переместил базовую линию столбца X вниз с помощью
\renewcommand\tabularxcolumn[1]{b{#1}}
Но это влияет на все X
столбцы, а также делает a.
выравнивание по нижнему ряду. Последняя проблема может быть исправлена перемещением a.
во второй столбец (с висячим отступом)
Если вы хотите изменить выравнивание только некоторых столбцов X в таблице, то вы можете использовать:
>{\begin{minipage}[b]{\hsize}}X<{\end{minipage}} :-)
решение2
Если вы хотите поиграться с \multirow
, вы можете использовать второй необязательный аргумент, который называется «fixup» — длина для точной настройки положения.
В вашем случае это должно быть-2\baselineskip
МВЭ:
\documentclass{article}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{multirow}
\begin{document}
\noindent
\begin{tabularx}{\linewidth}[t]{l X p{1.3cm}}
& Header & Title \\\cmidrule(lr){2-2}\cmidrule(lr){3-3}
a. & Some text text text text text text text text text text text text text text
text text text text text text text text text text
Want XXX on this line $\rightarrow$%
& \multirow{1}{*}[-2\baselineskip]{XXX}\\
\end{tabularx}
\end{document}
Выход:
решение3
В зависимости от типа содержимого, связанного с XXX
, ниже представлен простой способ выравнивания по нижнему краю, не требующий знания предыдущих записей столбцов:
\documentclass{article}
\usepackage{tabularx}
\usepackage{booktabs}
\begin{document}
\noindent
\begin{tabularx}{\linewidth}[t]{l X p{1.3cm}}
& Header & Title \\\cmidrule(lr){2-2}\cmidrule(lr){3-3}
a. & Some text text text text text text text text text text text text text text
text text text text text text text text text text
Want XXX on this line $\rightarrow$
& \\[-\normalbaselineskip] && XXX
\end{tabularx}
\end{document}
Идея: разместить XXX
на отдельной строке, но наложить на нижнюю часть предыдущей строки с помощью \\[-\normalbaselineskip]
.
решение4
Вот решение с использованием {NiceTabularX}
of nicematrix
и его встроенной команды \Block
.
\documentclass{article}
\usepackage{nicematrix}
\usepackage{booktabs}
\begin{document}
\begin{NiceTabularX}{\linewidth}[t]{l X p{1.3cm}}
& Header & Title \\\cmidrule(lr){2-2}\cmidrule(lr){3-3}
a. & Some text text text text text text text text text text text text text text
text text text text text text text text text text
Want XXX on this line $\rightarrow$%
& \Block[B]{}{XXX \strut}
\end{NiceTabularX}
\end{document}
Вам нужно несколько компиляций (т.к. nicematrix
под капотом используются узлы PGF/TikZ).