将 NewEnviron 中定义的宽表居中

将 NewEnviron 中定义的宽表居中

我正在尝试将一个包含大量内容且宽度大于文本宽度的表格居中。问题是我在序言中定义了表格环境以便可以重复使用它,这似乎会产生很多问题。

  \NewEnviron{reqtable}{
  \table
  \tabularx{1.3\textwidth}{cX}
  \toprule
  \BODY
  \bottomrule
}[
  \endtabularx
  \endtable
]

我初始化我的表

\begin{reqtable}
item & item \\
\end{reqtable}

我使用 environ 包中的 NewEnviron 的原因是我可以使用 booktabs 包中的规则(请参阅bottomrule 在自制环境中不起作用

我尝试了以下改动来使表格居中。

我还能尝试什么来让我的桌子居中?

注意:我使用的是双面布局,因此奇数页和偶数页的边距不同。这就是该\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}

在此处输入图片描述

相关内容