Quarto(R) PDF三栏布局:顶部对齐与列间竖线实现问询
Quarto三栏PDF布局问题解决
1. 实现内容顶部对齐
layout-valign="top"在PDF输出中失效,核心是LaTeX默认的基线对齐逻辑覆盖了Quarto的设置,可通过以下两种方式修复:
方式一:在Quarto布局中强制顶部对齐
给每个列的内容开头添加LaTeX的\vspace{0pt},强制LaTeX将该列顶部作为对齐基准:
--- title: "Untitled" format: pdf --- ## QUARTO ::: {layout="[1,-0.1, 1,-0.1, 1]" layout-valign="top"} ::: {#leftcolumn} ```{=latex} \vspace{0pt} Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit ...
:::
::: {#middlecolumn}
\vspace{0pt}
x <- 1:10 y <- rnorm(10) z <- x/y
:::
::: {#text2}
\vspace{0pt}
plot(x, y)
:::
:::
### 方式二:改用LaTeX原生`columns`环境(更稳定) 直接使用LaTeX的`columns`环境,指定`[t]`参数实现顶部对齐,对PDF输出的控制更精准: ```yaml --- title: "Untitled" format: pdf --- ## QUARTO ```{=latex} \begin{columns}[t] \begin{column}{0.3\textwidth} Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit ... \end{column} \begin{column}{0.05\textwidth} % 留白间隙 \end{column} \begin{column}{0.3\textwidth}
x <- 1:10 y <- rnorm(10) z <- x/y
\end{column} \begin{column}{0.05\textwidth} % 留白间隙 \end{column} \begin{column}{0.3\textwidth}
plot(x, y)
\end{column} \end{columns}
## 2. 添加列间竖线 Quarto原生布局不支持直接添加竖线,需结合LaTeX实现,以下是两种可行方案: ### 方案一:在LaTeX`columns`环境中插入竖线 在列的间隙中添加`\vrule`命令生成竖线,可调整宽度和高度控制样式: ```yaml --- title: "Untitled" format: pdf --- ## QUARTO ```{=latex} \begin{columns}[t] \begin{column}{0.3\textwidth} \vspace{0pt} Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit ... \end{column} \begin{column}{0.02\textwidth} \vrule width 0.5pt height \textheight % 竖线:宽度0.5pt,高度与文本等高 \end{column} \begin{column}{0.3\textwidth} \vspace{0pt}
x <- 1:10 y <- rnorm(10) z <- x/y
\end{column} \begin{column}{0.02\textwidth} \vrule width 0.5pt height \textheight \end{column} \begin{column}{0.3\textwidth} \vspace{0pt}
plot(x, y)
\end{column} \end{columns}
### 方案二:用`tcolorbox`给列添加边框(可选) 如果需要更美观的分隔效果,可使用LaTeX的`tcolorbox`包给每个列添加带竖线的容器,需先在YAML中加载包: ```yaml --- title: "Untitled" format: pdf: include-in-header: text: | \usepackage{tcolorbox} \tcbset{colframe=black, colback=white, boxrule=0.5pt, left=0pt, right=0pt, top=0pt, bottom=0pt} --- ## QUARTO ```{=latex} \begin{columns}[t] \begin{column}{0.3\textwidth} \begin{tcolorbox}[nobeforeafter, rightrule=0.5pt] \vspace{0pt} Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit ... \end{tcolorbox} \end{column} \begin{column}{0.02\textwidth} \end{column} \begin{column}{0.3\textwidth} \begin{tcolorbox}[nobeforeafter, rightrule=0.5pt] \vspace{0pt}
x <- 1:10 y <- rnorm(10) z <- x/y
\end{tcolorbox} \end{column} \begin{column}{0.02\textwidth} \end{column} \begin{column}{0.3\textwidth} \begin{tcolorbox}[nobeforeafter] \vspace{0pt}
plot(x, y)
\end{tcolorbox} \end{column} \end{columns}
内容的提问来源于stack exchange,提问作者L Smeets
相关产品推荐
相关产品推荐

