我正在尝试将一个包含大量内容且宽度大于文本宽度的表格居中。问题是我在序言中定义了表格环境以便可以重复使用它,这似乎会产生很多问题。
\NewEnviron{reqtable}{
\table
\tabularx{1.3\textwidth}{cX}
\toprule
\BODY
\bottomrule
}[
\endtabularx
\endtable
]
我初始化我的表
\begin{reqtable}
item & item \\
\end{reqtable}
我使用 environ 包中的 NewEnviron 的原因是我可以使用 booktabs 包中的规则(请参阅bottomrule 在自制环境中不起作用)
我尝试了以下改动来使表格居中。
\centering
之后使用\table
——没有错误,不居中。- 使用
\adjustwidth[]{}{-8em}
后立即\table
(见https://stackoverflow.com/questions/722613/latex-centering-a-table-wider-than-the-text-column)——产生错误! File ended while scanning use of TX@get@body.
- 用来
\begin{fullwidth}
包装\table
——产生错误! LaTeX Error: Not in outer par mode.
我还能尝试什么来让我的桌子居中?
注意:我使用的是双面布局,因此奇数页和偶数页的边距不同。这就是该\adjustwidth
命令对我最有吸引力的原因,因为它可以处理不同的边距。
这是一个 MWE,其中不同页面上的表格比我试图居中的文本宽度更宽。
\documentclass[11pt,a4paper,twoside]{report}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{environ}
\usepackage{lipsum}
\NewEnviron{reqtable}{
\renewcommand{\arraystretch}{1.3}
\table
\tabularx{1.3\textwidth}{lX}
\toprule
\BODY
\bottomrule
}[
\endtabularx
\endtable
\renewcommand{\arraystretch}{1}
\vspace{10pt}
]
\begin{document}
\lipsum[1]
\begin{reqtable}
Some text & \lipsum[1] \\
\end{reqtable}
\lipsum[3]
% This table is on the second page which has different margins
\begin{reqtable}
Other text & \lipsum[1] \\
\end{reqtable}
\end{document}
答案1
您需要隐式或显式地引入一些负间距,以将表格拉入左边距
\NewEnviron{reqtable}{%
\table\centering
\hspace*{-.5\textwidth}\tabularx{1.3\textwidth}{cX}%
\toprule
\BODY
\bottomrule
}[%
\endtabularx\hspace*{-.5\textwidth}%
\endtable
注意我使用了您展示的定义形式,但是您展示的使用形式
\begin{reqtable}{table1}{This is a table}
使用两个环境参数(标签和标题?),这里没有定义。]
可能有效,但未经测试,因为您没有提供示例文档。负空间的确切数量相当随意,只要总数大于,.3\textwidth
那么整行的宽度小于文本宽度,并且将居中。
答案2
我认为隐藏你的环境和标记不会给你带来任何好处。
\documentclass{article}
\usepackage{tabularx,booktabs,changepage}
\usepackage[pass,showframe]{geometry} % just to show centering
\usepackage{lipsum} % mock text
% optional argument is the default table placement
% mandatory argument is the fraction of \textwidth for the enlargement
\newenvironment{widetable}[2][htp]
{\begin{table}[#1]
\begin{adjustwidth}{-#2\textwidth}{-#2\textwidth}
\centering}
{\end{adjustwidth}\end{table}}
\begin{document}
\begin{widetable}{.15}
\begin{tabularx}{\linewidth}{cX}
\toprule
item & \lipsum[2] \\
\bottomrule
\end{tabularx}
\caption{This is a table}\label{table1}
\end{widetable}
\begin{widetable}{.1}
\begin{tabularx}{\linewidth}{cX}
\toprule
item & \lipsum[2] \\
\bottomrule
\end{tabularx}
\caption{This is a table}\label{table2}
\end{widetable}
\end{document}