希望对于可跨页的长表格排版中实现如下的类似效果:
具体要求有:
\adjustbox
实现垂直居中目前原OP尝试的MWE为:
\documentclass{ctexart}
\usepackage[margin=1in,landscape]{geometry}
\usepackage{longtable}
\usepackage{array}
\usepackage{cellspace}
\usepackage{graphicx}
\usepackage[export]{adjustbox}
% \usepackage{tabularray}
% 全局定义表格列类型(兼容 longtable)
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
% 左对齐+垂直居中(必须指定宽度)
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
\section{我是一个章节章节章节}
\begin{longtable}{|C{1cm}|C{4cm}|C{5cm}|C{5.2cm}|}
\caption{画随点运动实时生成的正弦曲线} \label{tab:image_table} \\
\hline
% 表头设置(四列)
\textbf{序号} & \textbf{实验内容} & \textbf{按键操作} & \textbf{截屏显示} \\
\hline
\endfirsthead
% 续表头设置
\multicolumn{4}{c}%
{\tablename\ \thetable{} -- 续上页表格} \\
\hline
\textbf{序号} & \textbf{实验内容} & \textbf{按键操作} & \textbf{截屏显示} \\
\hline
\endhead
1 & 暂停动画并擦除几何跟踪痕迹&隐藏不需要展示的对象,播放动画,隐藏不需要展示的对象,播放动画,
&\adjustbox{valign=c, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image}}\\
\hline
2&测量点$M$ 的坐标 &隐藏不需要展示的对象,播放动画,
得到点$M$的横、纵坐标,隐藏不需要展示的对象,播放动画,
&\adjustbox{valign=c, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image}}\\
\hline
3&保存点$M$ 的横坐标 & 选择点$M$ 的横坐标,依次点击命名为$x_m$ ,或者 鼠标右键
&\adjustbox{valign=c, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image}}\\
\hline
4 & 绘制随点 $M$变化生成的正弦曲线 &隐藏不需要展示的对象,播放动画输入相应的表达式
&\adjustbox{valign=c, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image}} \\
\hline
\end{longtable}
\end{document}
得到的效果是,\adjustbox
与m
列格式有一些冲突(如下图):
预期能有两个答案:
longtable
的实现上做调整longtblr
环境实现更好的内容与样式分离maybe related:
省流:
\adjustbox
命令中valign
的值改为m
.首先,最后一列的对齐方式需要改为p
型。原因未知。
然后:
在文字文本框内部的文字水平左对齐,且不缩进
既然如此,中间两列没必要再使用预设的C
型(因为它用了\centering
),而直接用m
型即可。
从效果图来看,表头内容是居中对齐的。由于改用了m
型,故对表头所在行单独做居中对齐处理:
\textbf{序号} & \centering\textbf{实验内容} & \centering\textbf{按键操作} & \makebox[5.2cm][c]{\textbf{截屏显示}}
其中,最后一列在改用了p
型的情况下用\centering
会报错,所以改用盒子把它“撑开”。
\adjustbox
命令中valign
的值改为m
.我翻了adjustbox
宏包的手册,发现valign
键的值只有T,M,B;t,t,m,b
,但用c
好像也没报错...我不懂看漏了什么,但还是顺便改成m
了。
另外,valign
的各值的效果图:
它的参考系有点诡异,可能与所在列不能用m
型对齐的情况有关,但我看了很久没弄明白,交给有缘人了...
\documentclass{ctexart}
\usepackage[margin=1in,landscape]{geometry}
\usepackage{longtable}
\usepackage{array}
\usepackage{cellspace}
\usepackage{graphicx}
\usepackage[export]{adjustbox}
% \usepackage{tabularray}
% 全局定义表格列类型(兼容 longtable)
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}m{#1}}
% 左对齐+垂直居中(必须指定宽度)
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
\section{我是一个章节章节章节}
\begin{longtable}{|C{1cm}|m{4cm}|m{5cm}|p{5.2cm}|}
\caption{画随点运动实时生成的正弦曲线} \label{tab:image_table} \\
\hline
% 表头设置(四列)
\textbf{序号} & \centering\textbf{实验内容} & \centering\textbf{按键操作} & \makebox[5.2cm][c]{\textbf{截屏显示}} \\
\hline
\endfirsthead
% 续表头设置
\multicolumn{4}{c}%
{\tablename\ \thetable{} -- 续上页表格} \\
\hline
\textbf{序号} & \centering\textbf{实验内容} & \centering\textbf{按键操作} & \makebox[5.2cm][c]{\textbf{截屏显示}} \\
\hline
\endhead
1 & 暂停动画并擦除几何跟踪痕迹&隐藏不需要展示的对象,播放动画,隐藏不需要展示的对象,播放动画,
&\adjustbox{valign=m, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image}}\\
\hline
2&测量点$M$ 的坐标 &隐藏不需要展示的对象,播放动画,
得到点$M$的横、纵坐标,隐藏不需要展示的对象,播放动画,
&\adjustbox{valign=m, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image}}\\
\hline
3&保存点$M$ 的横坐标 & 选择点$M$ 的横坐标,依次点击命名为$x_m$ ,或者 鼠标右键
&\adjustbox{valign=m, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image}}\\
\hline
4 & 绘制随点 $M$变化生成的正弦曲线 &隐藏不需要展示的对象,播放动画输入相应的表达式
&\adjustbox{valign=m, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image}} \\
\hline
\end{longtable}
\end{document}
效果:
预期得到两份答案: 使用longtblr环境实现更好的内容与样式分离
我基于tabularray
的longtblr
也做了一个尝试:
Q
列格式可以让你直接摆脱longtable
的列格式和array
宏包和valign
的混合指定,我也妹弄得很明白...header
可以实现重复标题行的功能,且该设置位于longtable
的环境外,适合移植批量配置表格样式row{1}={font=\bfseries}
也可以避免使用四次\textbf
的尴尬支持\adjustimage
代替\adjustbox{\includegraphics{}}
tabularray
!优雅永不过时~\documentclass[fontset=fandol]{ctexart}
\usepackage[margin=1in,landscape]{geometry}
\usepackage{graphicx}
\usepackage{adjustbox}
\usepackage{tabularray}
\newcommand*{\inserttxt}{I can eat the glass and it doesn't hute me.}
\DeclareTblrTemplate{contfoot-text}{normal}{(见下页)}
\SetTblrTemplate{contfoot-text}{normal}
\DeclareTblrTemplate{conthead-text}{normal}{ -- 续上页表格}
\SetTblrTemplate{conthead-text}{normal}
\begin{document}
\section{我是一个章节章节章节}
\begin{longtblr}[
label = {tblr:a longtblr},
caption = {这是一个长长长长长长长长长长长长表格},
]{
colspec = {Q[c,m,1cm]Q[m,4cm]Q[m,5cm]Q[c,m,5.5cm]},vlines,hlines,
row{1} = {font=\large\bfseries,halign=c},
row{2-5} = {ht=4cm},
width = .6\linewidth,%自行控制
stretch = 0,
rowhead = 1,
}
No. & Content & Content & Graphs \\
1 & \inserttxt & \inserttxt & \adjustbox{valign=m, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image-A}} \\
2 & \inserttxt\inserttxt & \inserttxt\inserttxt & \adjustbox{valign=m, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image-B}} \\
3 & \inserttxt\inserttxt\inserttxt & \inserttxt\inserttxt\inserttxt & \adjustbox{valign=m, margin=3pt 5pt}{\includegraphics[width=5cm,height=3.5cm]{example-image-C}} \\
4 & Alpha & Beta & \adjustimage{valign=m, margin=3pt 5pt,width=5cm}{example-image} \\
\end{longtblr}
\end{document}
谢谢您的耐心...昨天实在是没空折腾了...我先挑个软柿子捏
关于
adjustbox
中valign=c
的使用似乎是文档外的命令其中将
#1
放到了\hbox{$\vcenter{\hbox{#1}}\m@th$}
中....umm无论如何,对于非数学环境(图片)的排版,使用valign=c
是不太合适的.关于以下三者:
longtable
默认的列格式m{}
(byarray
),p{}
还有自定义的L
,C
格式\adjustbox
中的valign
对齐的基线和对齐方式\centering
等行为的互相作用探究...
太痛苦了,继续交给有缘人吧~
^_^