Bu tabularx'in nesi yanlış?

Aug 26 2020

LaTeX'teki masalardan nefret ediyorum! Her zaman bazı sorunlara giriyorum ve yine de bu kolay olmalı:

\documentclass[12pt,letterpaper,twoside]{book}
\usepackage{lmodern}
\usepackage[total={6in,10in},left=1.5in,top=0.5in,includehead,includefoot]{geometry}
\usepackage[dvipsnames,table]{xcolor}
\usepackage{multirow}
\usepackage{hhline}
\usepackage{tabularx}

\begin{document}
 
\begin{center}
    \renewcommand{\arraystretch}{1.5}
    \begin{tabularx}{\textwidth}{|X|X|X|X|X|}
    \hline
        \rowcolor[gray]{0.95}
        \multicolumn{5}{|c|}{Title}
        \\ \hline
        \multicolumn{1}{|c|}{\textsf{Day 1}}
        & \multicolumn{1}{c|}{\textsf{Day 2}}
        & \multicolumn{1}{c|}{\textsf{Day 3}}
        & \multicolumn{1}{c|}{\textsf{Day 4}}
        & \multicolumn{1}{c|}{\textsf{Day 5}}
        \\ \hhline{|=|=|=|=|=|}
        \multicolumn{1}{|c|}{Text 1}
        & \multicolumn{1}{c|}{Text 2}
        & \multicolumn{1}{c|}{Text 3}
        & \multicolumn{1}{c|}{Text 4}
        & \multicolumn{1}{c|}{Text 5}
        \\
        \multicolumn{1}{|c|}{12h00 to 18h00}
        & \multicolumn{1}{c|}{12h00 to 18h00}
        & \multicolumn{1}{c|}{12h00 to 18h00}
        & \multicolumn{1}{c|}{12h00 to 18h00}
        & \multicolumn{1}{c|}{12h00 to 18h00}
        \\ \hline
    \end{tabularx}
\end{center}

\end{document}

Sorunun önizlemesi:

Resimde görüldüğü gibi, masa sağ tarafta kapanmıyor. Kodun nesi var?

Yanıtlar

6 Mico Aug 26 2020 at 11:57

Sen sordun,

Kodun nesi var?

Kod, bir \multicolumn{1}{|c|}{...}sarmalayıcıdaki her bir hücreyi kaplar (entomb?) , Böylece Xsütun türünün hücrelerin içinde otomatik satır kesme sağlama yeteneğini tamamen geçersiz kılar . Sonuç olarak, tabularxortamın genişliğinin eşit olmasını beklemek için kesinlikle hiçbir neden yoktur \textwidth.

Çare mi? Makinenin işini gerçekten yapabilmesi için (a) \multicolumn{1}{|c|}{...}sarmalayıcılardan kurtulmanız tabularxve (b) Xhücre içeriğini tam olarak doğrulamaktan ziyade ortalayan sütun tipi bir versiyonunu tanımlamanız ve kullanmanız gerekir . İkinci koşulu karşılamanın yolları için aşağıdaki koda bakın.

Eldeki örnek için \tabcolsep, sütunlar arası boşluk miktarını yöneten parametrenin değerini yarı yarıya azaltmak , son satırda satır kesmelerinden kaçınmayı başarır. tabularxOrtaya çıkan "görünüm" için aşağıdaki ekran görüntüsündeki ikinci örneğe bakın .

\documentclass[12pt,letterpaper,twoside]{book}
\usepackage{lmodern}
\usepackage[total={6in,10in}, left=1.5in,top=0.5in, 
            includehead,includefoot]{geometry}
\usepackage[dvipsnames,table]{xcolor}
\usepackage{multirow,hhline}
\usepackage{tabularx}
\usepackage{ragged2e} % for '\Centering' macro
% Define a centered version of 'X' column type:
\newcolumntype{C}{>{\Centering}X} 
% or: \newcolumntype{C}{>{\centering\arraybackslash}X} 

\begin{document}

\begin{center}
\renewcommand{\arraystretch}{1.5}
    \begin{tabularx}{\textwidth}{|*{5}{C|}} % <-- "C", not "X"
    \hline
    \rowcolor[gray]{0.95}
    \multicolumn{5}{|c|}{\texttt{tabularx} with default value of \texttt{\string\tabcolsep}}
    \\ \hline
    \textsf{Day 1}
    & \textsf{Day 2} & \textsf{Day 3} & \textsf{Day 4} & \textsf{Day 5}
    \\ \hhline{|=|=|=|=|=|}
    Text 1 & Text 2 & Text 3 & Text 4 & Text 5 \\
    12h00 to 18h00 & 12h00 to 18h00 & 12h00 to 18h00 & 12h00 to 18h00 & 12h00 to 18h00
    \\ \hline
    \end{tabularx}

\bigskip
\setlength\tabcolsep{3pt} % default value: 6pt

    \begin{tabularx}{\textwidth}{|*{5}{C|}} % <-- "C", not "X"
    \hline
    \rowcolor[gray]{0.95}
    \multicolumn{5}{|c|}{\texttt{tabularx} with reduced value of \texttt{\string\tabcolsep}}
    \\ \hline
    \textsf{Day 1}
    & \textsf{Day 2} & \textsf{Day 3} & \textsf{Day 4} & \textsf{Day 5}
    \\ \hhline{|=|=|=|=|=|}
    Text 1 & Text 2 & Text 3 & Text 4 & Text 5 \\
    12h00 to 18h00 & 12h00 to 18h00 & 12h00 to 18h00 & 12h00 to 18h00 & 12h00 to 18h00
    \\ \hline
    \end{tabularx}
\end{center}

\end{document}
1 jsbibra Aug 26 2020 at 11:14

\documentclass[12pt,letterpaper,twoside]{book}
\usepackage{lmodern}
\usepackage[total={6in,10in},left=1.5in,top=0.5in,includehead,includefoot]{geometry}
\usepackage[dvipsnames,table]{xcolor}
\usepackage{multirow}
\usepackage{hhline}
\usepackage{tabularx}

\begin{document}
 
\begin{center}
    \renewcommand{\arraystretch}{1.5}
    \begin{tabular}{|c|c|c|c|c|}
    \hline
        \rowcolor[gray]{0.95}
        \multicolumn{5}{|c|}{Title}
        \\ \hline
        \multicolumn{1}{|c|}{\textsf{Day 1}}
        & \multicolumn{1}{c|}{\textsf{Day 2}}
        & \multicolumn{1}{c|}{\textsf{Day 3}}
        & \multicolumn{1}{c|}{\textsf{Day 4}}
        & \multicolumn{1}{c|}{\textsf{Day 5}}
        \\ \hhline{|=|=|=|=|=|}
        \multicolumn{1}{|c|}{Text 1}
        & \multicolumn{1}{c|}{Text 2}
        & \multicolumn{1}{c|}{Text 3}
        & \multicolumn{1}{c|}{Text 4}
        & \multicolumn{1}{c|}{Text 5}
        \\
        \multicolumn{1}{|c|}{12h00 to 18h00}
        & \multicolumn{1}{c|}{12h00 to 18h00}
        & \multicolumn{1}{c|}{12h00 to 18h00}
        & \multicolumn{1}{c|}{12h00 to 18h00}
        & \multicolumn{1}{c|}{12h00 to 18h00}
        \\ \hline
    \end{tabular}
\end{center}

\end{document}