![ラテックステーブルに境界線がない](https://rvso.com/image/461891/%E3%83%A9%E3%83%86%E3%83%83%E3%82%AF%E3%82%B9%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AB%E5%A2%83%E7%95%8C%E7%B7%9A%E3%81%8C%E3%81%AA%E3%81%84.png)
もう一度、LatexテーブルコードをあるジャーナルからSpringer形式に移植すると、境界線が失われます(画像添付)。Latexコードは次のとおりです。境界線が失われ、ページ幅に合わせて自動改行される代わりに、手動で行っていた解決策を提案してください。\\
\usepackage{adjustbox}
%\usepackage{tabularx}
\usepackage{tabularx,ragged2e}
\documentclass{sn-jnl}
\begin{document}
\begin{table*}[!h]
%\tiny
\centering
\small
\caption{Result}
\begin{tabular}{|c|c|c|c|}
\hline
\multicolumn{1}{|l|}{\begin{tabular}[c]{@{}l@{}}Users Set\\Size (USS)\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}} Range of Users \\ Individual \end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Index of scalar array \\ for mapping\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Transfer \\ Failure\end{tabular}} \\ \hline
\multirow{6}{*}{6} & \multirow{2}{*}{6} & 10 & 23 \\ \cline{3-4}
& & 4 & \textbf{18.3} \\ \cline{2-4}
& \multirow{2}{*}{7} & 0 & 13.3 \\ \cline{3-4}
& & 4 & \textbf{33.3} \\ \cline{2-4}
& \multirow{2}{*}{7} & 1 & 17 \\ \cline{3-4}
& & 2 & \textbf{66.6} \\ \hline
\end{tabular}
\end{table}
\end{document}
答え1
tabularray
およびパッケージを使用するとsiunitx
、縦線の問題が解消され、最後の列の数字が小数点で揃えられます。
\documentclass{sn-jnl}
\usepackage{xcolor}
\usepackage{tabularray}
\UseTblrLibrary{siunitx}
\begin{document}
\begin{table*}[ht]
\caption{Result}
\sisetup{table-format=2.1,
detect-weight, % <--
}
\begin{tblr}{hlines, vlines,
colspec = {X[c] X[1.2,c] X[1.8,c] X[c, si]},
cell{even}{2} = {r=2}{},
cell{odd[3]}{Z} = {font=\bfseries},
row{1} = {guard}
}
Users Set Size (USS)
& Range of Users Individual
& Index of scalar array for mapping
& Transfer Failure \\
\SetCell[r=6]{c} 6
& 6 & 10& 23 \\
& & 4 & 18.3 \\
& 7 & 0 & 13.3 \\
& & 4 & 33.3 \\
& 7 & 1 & 17 \\
& & 2 & 66.6 \\
\end{tblr}
\end{table*}
\end{document}
答え2
問題は、ドキュメント クラスsn-jnl
(2019/11/18 v0.1、行 1333) が を定義していることです\let\cline\cmidrule
。ただし、この時点では、\cmidrule
パッケージbooktabs
がロードされていないため、 はまだ未定義です。 は未定義なので、エラーが発生します。これは、実際にはドキュメント クラスのコード内のバグと見なす必要があります。を使用する前にを使用してパッケージ\cline
をロードすることで、このバグを回避できます(の前では動作しません)。booktabs
\RequirePackage{booktabs}
\documentclass
\usepackage
\documentclass
しかし、この組み込みのバグを脇に置いておくと、ドキュメントクラスの作者は明らかにbooktabs
、縦線はサポートされていませんこのパッケージで提供されるマクロ ( も含まれる) を使用すると、\cmidrule
垂直方向の規則を破る垂直方向のスペースが挿入されます。クラスはを のエイリアスとしてsn-jnl
設定するようになったため、境界線が壊れてしまいます。\cline
\cmidrule
これを回避するには 2 つの方法があります。最初の方法は、このパッケージの作成者が意図したとおりに、パッケージが提供する機能を採用することです。つまり、縦線の使用を避け、場合によってはsbooktabs
も使用しないことです。\multirow
\documentclass{sn-jnl}
\begin{document}
\begin{table*}[!h]
\centering
\small
\caption{Result}
\begin{tabular}{ c c c c }
\toprule
\begin{tabular}{@{}l@{}} Users Set \\ Size (USS) \end{tabular} &
\begin{tabular}{@{}l@{}} Range of Users \\ Individual \end{tabular} &
\begin{tabular}{@{}l@{}} Index of scalar array \\ for mapping \end{tabular} &
\begin{tabular}{@{}l@{}} Transfer \\ Failure \end{tabular} \\
\midrule
6 & 6 & 10 & 23 \\ \cline{3-4}
& & 4 & \textbf{18.3} \\ \cline{2-4}
& 7 & 0 & 13.3 \\ \cline{3-4}
& & 4 & \textbf{33.3} \\ \cline{2-4}
& 7 & 1 & 17 \\ \cline{3-4}
& & 2 & \textbf{66.6} \\
\bottomrule
\end{tabular}
\end{table*}
\end{document}
もう 1 つの、よりハッキーな方法は、ドキュメント クラスをロードする前に元の\cline
マクロを保存し、後で の定義を復元することです\cline
。
\let\clineorig\cline
\documentclass{sn-jnl}
\usepackage{multirow}
\begin{document}
\begin{table*}[!h]
\centering
\small
\caption{Result}
\let\cline\clineorig
\begin{tabular}{|c|c|c|c|}
\hline
\begin{tabular}{@{}l@{}} Users Set \\ Size (USS) \end{tabular} &
\begin{tabular}{@{}l@{}} Range of Users \\ Individual \end{tabular} &
\begin{tabular}{@{}l@{}} Index of scalar array \\ for mapping \end{tabular} &
\begin{tabular}{@{}l@{}} Transfer \\ Failure \end{tabular} \\
\hline
\multirow{6}{*}{6} & \multirow{2}{*}{6} & 10 & 23 \\ \cline{3-4}
& & 4 & \textbf{18.3} \\ \cline{2-4}
& \multirow{2}{*}{7} & 0 & 13.3 \\ \cline{3-4}
& & 4 & \textbf{33.3} \\ \cline{2-4}
& \multirow{2}{*}{7} & 1 & 17 \\ \cline{3-4}
& & 2 & \textbf{66.6} \\
\hline
\end{tabular}
\end{table*}
\end{document}
個人的には最初の解決策をお勧めします。
改行については、ネストしてもまったく問題ありませtabulars
んが、マクロ内に配置する必要がありません\multicolumn
。この点についてはコードを簡略化しました。別の方法としては、p{}
改行を可能にする列タイプを適用することですが、LaTeX に列の幅 (たとえば、列幅を 1cm にする場合) を伝える必要がありますp{1cm}
。
答え3
{NiceTabular}
参考までに、の代わりにを使用するとどうなるかを以下に示します{tabular}
。
私は負荷をかけましたが
nicematrix
、\usepackage{nicematrix}
クラスでは、nicematrix
pgf
sn-jnl
pgf
をロードする必要があります。前に(\documentclass
と\RequirePackage
)。\begin{tabular}
および をおよびend{tabular}
に置き換えました。\begin{NiceTabular}
\end{NiceTabular}
\RequirePackage{pgf}
\documentclass{sn-jnl}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{|c|c|c|c|}
\hline
\multicolumn{1}{|l|}{\begin{tabular}[c]{@{}l@{}}Users Set\\Size (USS)\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}} Range of Users \\ Individual \end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Index of scalar array \\ for mapping\end{tabular}} & \multicolumn{1}{l|}{\begin{tabular}[c]{@{}l@{}}Transfer \\ Failure\end{tabular}} \\ \hline
\multirow{6}{*}{6} & \multirow{2}{*}{6} & 10 & 23 \\ \cline{3-4}
& & 4 & \textbf{18.3} \\ \cline{2-4}
& \multirow{2}{*}{7} & 0 & 13.3 \\ \cline{3-4}
& & 4 & \textbf{33.3} \\ \cline{2-4}
& \multirow{2}{*}{7} & 1 & 17 \\ \cline{3-4}
& & 2 & \textbf{66.6} \\ \hline
\end{NiceTabular}
\end{document}
nicematrix
の環境ではcline
が再定義されるため、規則は破られません (そしてその定義は\ncline
によって行われたの再定義をローカルに上書きしますsn-jnl
)。
ただし、{NiceTabular}
テーブルを構築する標準的な方法 ( のツールを使用nicematrix
) は次のとおりです。
\RequirePackage{pgf}
\documentclass{sn-jnl}
\usepackage{nicematrix}
\usepackage{siunitx}
\begin{document}
\sisetup{table-format = 2.1,detect-weight}
\begin{NiceTabular}{cccS}[hvlines]
\Block[l]{}{Users Set\\ Size (USS)}
& \Block[l]{}{Range of Users\\ Individual}
& \Block[l]{}{Index of scalar array\\ for mapping}
& \Block[l]{}{Transfer\\ Failure} \\
\Block{6-1}{6} & \Block{2-1}{6} & 10 & 23 \\
& & 4 & \bfseries 18.3 \\
& \Block{2-1}{7} & 0 & 13.3 \\
& & 4 & \bfseries 33.3 \\
& \Block{2-1}{7} & 1 & 17 \\
& & 2 & \bfseries 66.6 \\
\end{NiceTabular}
\end{document}