CTeX-org / forum

A temporarily alternate forum of `bbs.ctex.org`
https://t.me/chinesetex
Apache License 2.0
210 stars 16 forks source link

如何使超长的并列tabular表格居中显示 #301

Closed Mikachu2333 closed 7 months ago

Mikachu2333 commented 7 months ago

检查

编译环境

描述问题

  1. 在试图使两个长表格并列且位于页面中央时遇到的问题
  2. 目前解决方案:makebox嵌套两个设定宽度的minipage,由minipage负责详细的tabular表格显示
  3. 疑惑:为什么是 \makebox[.915\textwidth][c] ?(在设定为1时,两表整体偏右,测试为0.915时正常)
  4. 是否有更简单的方法解决?
  5. 另:必须是两个分离、有间距的表格,不能合并成一个tabular

最小工作示例(MWE)

备注:梦源宋体是思源宋体的平替因其更小,请尽量使用思源系列以模仿其字体的行高

伪代码:

\documentclass[a4paper,twoside,onecolumn,12pt,fontset=none]{ctexrep}
\usepackage[a4paper,top = 1.8cm,bottom = 1.0cm,hmargin=1.5cm]{geometry}
\usepackage{...}

\setmainfont{...}
\setlength{}

\begin{document}
\chapter{老乡群号汇总}
\vspace*{2em}
\makebox[.915\textwidth][c]{
    \begin{minipage}[H]{12em}
        \begin{tabular}{|c|c|}
            ...
        \end{tabular}
    \end{minipage}

    \begin{minipage}[H]{12em}
        \begin{tabular}{|c|c|}
            ...
        \end{tabular}
    \end{minipage}
}
\end{document}

真代码:

% !TeX encoding = UTF-8

\documentclass[a4paper,twoside,onecolumn,12pt,fontset=none]{ctexrep}
\usepackage{titlesec}
\usepackage{indentfirst,ulem}
\usepackage{float,graphicx}
\usepackage{multirow,booktabs,makecell,amssymb,array}
\usepackage[a4paper,top = 1.8cm,bottom = 1.0cm,hmargin=1.5cm]{geometry}

% 重设定chapter间距
\ctexset{
    chapter={
        beforeskip=1ex,
        afterskip=2ex
    },
    section={
        beforeskip=1ex,
        afterskip=.6ex
    },
    subsection={
        beforeskip=0pt,
        afterskip=.4ex
    }
}

% 重定义文章字体
\setmainfont[BoldFont=Dream Han Serif CN W20]{Dream Han Serif CN W7}
\setCJKmainfont{Dream Han Serif CN W7}[BoldFont=Dream Han Serif CN W20]

% 行间距以及部分页边距设定
\setlength{\parindent}{1em}
\setlength{\headheight}{0pt}
\setlength{\topmargin}{-6em}

\begin{document}
% 题目
\title{\Huge{\textbf{山二医入学与生活指南}\\\normalsize{(简称:三二一新指南)}\\\large{浮烟山校区专用}}}
\bigbreak
\author{LinkChou\thanks{第2.2.3版,遵循CC BY-SA 4.0协议。}\and 山二医校园频道}
\maketitle

% 段落间距重设定
\setlength{\parskip}{.75em plus 5pt minus 5pt}

%chapter12
\chapter[老乡群号汇总]{老乡群号汇总}
\vspace*{2em}
\makebox[.915\textwidth][c]{
    \begin{minipage}[H]{12em}
        \begin{tabular}{|c|c|}
            \Xhline{1.2pt}
            \multicolumn{2}{|c|}{山东省老乡QQ群号} \\
            \Xhline{1.2pt}
            济南   & 1234556777\\

            \Xhline{1.2pt}
            \multicolumn{2}{|c|}{潍坊市老乡QQ群号} \\
            \Xhline{1.2pt}
            潍坊总群 & 234444444444\\
            \Xhline{1.2pt}
        \end{tabular}
    \end{minipage}
    \begin{minipage}[H]{12em}
        \begin{tabular}{|c|c|}
            \Xhline{1.2pt}
            \multicolumn{2}{|c|}{省外地区老乡QQ群号} \\
            \Xhline{1.2pt}
            重庆   & 234234234234\\
            \Xhline{1.2pt}
        \end{tabular}
    \end{minipage}
}
\end{document}

编译提示

①0.915情况下用 XeLaTeX 二次编译一切正常(原文中到处都是\ref所以需要二次编译),无 Overfull 以及 Underfull 提示 ②\textwidth 提示\hbox Overfull

我还做了这些尝试

  1. 参考 https://liam.page/series/#LaTeX-%E4%B8%AD%E7%9A%84%E6%B5%AE%E5%8A%A8%E4%BD%93 中的教程修正,未果。
muzimuzhi commented 7 months ago
\documentclass[a4paper,twoside,onecolumn,12pt]{ctexrep}
\usepackage{titlesec}
\usepackage{indentfirst,ulem}
\usepackage{float,graphicx}
\usepackage{multirow,booktabs,makecell,amssymb,array}
\usepackage[a4paper, hmargin=1.5cm, vmargin=1cm, headheight=0pt, ignorehead]{geometry}

% 重设定chapter间距
\ctexset{
    chapter={
        beforeskip=1ex,
        afterskip=2ex
    },
    section={
        beforeskip=1ex,
        afterskip=.6ex
    },
    subsection={
        beforeskip=0pt,
        afterskip=.4ex
    }
}

% 重定义文章字体
%\setmainfont[BoldFont=Dream Han Serif CN W20]{Dream Han Serif CN W7}
%\setCJKmainfont{Dream Han Serif CN W7}[BoldFont=Dream Han Serif CN W20]

% 行间距设定
\setlength{\parindent}{1em}

\begin{document}
% 题目
\title{\Huge{\textbf{山二医入学与生活指南}\\\normalsize{(简称:三二一新指南)}\\\large{浮烟山校区专用}}}
\bigbreak
\author{LinkChou\thanks{第2.2.3版,遵循CC BY-SA 4.0协议。}\and 山二医校园频道}
\maketitle

% 段落间距重设定
\setlength{\parskip}{.75em plus 5pt minus 5pt}

%chapter12
\chapter[老乡群号汇总]{老乡群号汇总}

\vspace*{2em}

\begin{center}
  测试居中效果\\
  XXX\qquad XXX \\
\end{center}

\noindent\makebox[\textwidth][c]{%
    \begin{tabular}[t]{|w{c}{4em}|w{c}{6em}|}
        \Xhline{1.2pt}
        \multicolumn{2}{|c|}{山东省老乡QQ群号} \\
        \Xhline{1.2pt}
        济南   & 123456789                \\
        \hline
        青岛1群 & 123456789                \\
        \Xhline{1.2pt}
    \end{tabular}%
    \qquad
    \begin{tabular}[t]{|w{c}{4em}|w{c}{6em}|}
        \Xhline{1.2pt}
        \multicolumn{2}{|c|}{省外地区老乡QQ群号} \\
        \Xhline{1.2pt}
        重庆   & 123456789                 \\
        \hline
        江苏   & 123456789                 \\
        \Xhline{1.2pt}
    \end{tabular}%
}
\end{document}

image

Mikachu2333 commented 7 months ago

非常感谢您!之前从未意识到换行符会在这种情况下自动转换为空格,以及一直困扰我的0.915问题原来是由于缩进导致的!非常感谢!

muzimuzhi commented 7 months ago

何时换行会转换为空格且不被跳过,严谨的规则可以在 texdoc texbytopic, sec. 2.5 "The input processor as a finite state automaton" 看到。严谨的代价是,难于理解。

Mikachu2333 commented 7 months ago

感谢告知,刚刚看了一眼,头大max,暂时emm凑合凑合吧,大不了我把所有不确定的都加上%……难看讲难看,起码不会出故障?(大概)