![Несколько столбцов разной ширины — сложная компоновка](https://rvso.com/image/475748/%D0%9D%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE%20%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%BE%D0%B2%20%D1%80%D0%B0%D0%B7%D0%BD%D0%BE%D0%B9%20%D1%88%D0%B8%D1%80%D0%B8%D0%BD%D1%8B%20%E2%80%94%20%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%B0%D1%8F%20%D0%BA%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0%20.png)
У меня возникли проблемы с набором сложного макета, состоящего из нескольких столбцов разной ширины и вертикально повернутого текста.
Я перепробовал несколько пакетов, \multicol \minipage \tabular
но ни один из них не подошел для решения этой проблемы.
Вопрос
Действительно ли этот тип макета можно реализовать в LaTex? Если да, то какой подход мне следует использовать?
решение1
Да, это можно сделать. Приложив достаточно усилий, можно создать практически любой вывод в LaTeX. Я не tabular
эксперт, но я включил попытку ниже в качестве примера. Как уже отмечалось, это широкий вопрос, и MWE был бы очень полезен для демонстрации того, чего именно вы хотите достичь и в рамках каких спецификаций.
\documentclass{article}
\usepackage[margin=2cm]{geometry} % prevent overfull hbox from wide table
\usepackage{graphicx} % for \rotatebox
\usepackage{colortbl} % for \cellcolor
\begin{document}
\begin{tabular}{|p{3cm}p{3cm}p{1cm}p{2cm}p{1cm}p{0.3cm}p{0.3cm}p{0.3cm}p{0.3cm}|}
\hline\multicolumn{9}{|l|}{}\\
\multicolumn{2}{|l}{\LARGE Longer longer heading line 1} & & \cellcolor[gray]{0.8}{} & & \multicolumn{4}{r|}{123-456-7}\\
\multicolumn{2}{|l}{\LARGE Longer longer heading line 2} & & \multicolumn{1}{c}{\cellcolor[gray]{0.8}{QR}} & & & & &\\[0.5cm]
28.2.2024 & Some venue & & & & & & &\\
20:00 & 100 USD & & & & & & &\\[1cm]
\multicolumn{5}{|l}{Basic ticket} & & & &\\[0.5cm]
\multicolumn{5}{|l}{Seat 24} & & & &\\
\multicolumn{5}{|l}{\tiny very tiny longer sentence. very tiny longer sentence.} & \rotatebox{90}{28.2.2024} & \rotatebox{90}{20:00} & \rotatebox{90}{Basic ticket} & \rotatebox{90}{Seat 24}\\[0.5cm]
\hline
\end{tabular}
\end{document}
решение2
Я бы подал заявку tikz
на это. Можно выполнить это, используя только minipage
s или \parbox
es, но tikz
это добавляет немного больше контроля над позиционированием и выравниванием.
Если вы хотите настроить интервал между строками текста, используйте setspace
. Затем добавьте одну из дополнительных настроек: [doublespacing]
, [onehaldspacing]
, вставьте макрос-переключатель, sa \onehalfspacing
или \doublespacing
. Если вам нужна тонкая настройка, используйте \setstretch{<factor>}
с , 1.0
который является стандартным интервалом. Или просто добавьте \vspace{}
для одноразового дополнительного вертикального интервала.
Я не знаю, есть ли какие-либо размеры этого билета. Поэтому в примере ниже используются некоторые произвольные значения ширины и высоты.
\documentclass[margin=1cm]{standalone}
\usepackage[doublespacing]{setspace}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{positioning}
\newlength\ticketheight
\setlength\ticketheight{6cm}
\begin{document}
\begin{tikzpicture}[
node distance = 1cm,
every node/.style = {
inner sep=0pt,
outer sep=0pt,
},
]
\node (A) {%
\parbox[t][\ticketheight][s]{7cm}{
{\LARGE\setstretch{1}%
Longer longer heading line 1
Longer longer heading line 2
\par}
\vspace{\fill}%
\begin{tabular}{@{}p{4cm} l@{}}
28.2.2024 & Some venue \\
20:00 & 100 USD
\end{tabular}
\vspace{\fill}%
Basic ticket
Seat 24
\vspace{\fill}%
{\tiny\setstretch{1}%
Much much longer sentence. Much much longer sentence.
Description at the bottom.
\par}}
};
\node [right=of A] (B) {
\parbox[t][\ticketheight]{3cm}{%
\includegraphics[width=\linewidth]{example-image}}
};
\node [right=of B] (C) {
\parbox[t][\ticketheight][s]{2cm}{
{\centering
123-456-7
\par}
\vspace{\fill}%
\raggedleft\onehalfspacing\small
\rotatebox{90}{%
\begin{tabular}[b]{@{}l@{}}
28.2.2024 \\
20:00 \\
Basic ticket \\
Seat 24
\end{tabular}}}
};
\end{tikzpicture}
\end{document}