![在 tabularx 中对文本进行连字符处理](https://linux22.com/image/345172/%E5%9C%A8%20tabularx%20%E4%B8%AD%E5%AF%B9%E6%96%87%E6%9C%AC%E8%BF%9B%E8%A1%8C%E8%BF%9E%E5%AD%97%E7%AC%A6%E5%A4%84%E7%90%86.png)
我目前正在写一篇论文,其中不允许使用连字符,表格除外。使用以下方法可以很好地禁用文本连字符:
\usepackage[none]{hyphenat}
\sloppy
现在的问题是 tabularx 里面单词大于列宽,它们会流入下一列。我在定义列时尝试使用 RaggedRight:
\newcolumntype{Z}{>{\RaggedRight\centering\arraybackslash\hspace{0pt}}X}
但文本仍然没有被连字符连接。有什么想法吗?
要求:
- 整个文档中没有连字符
- 表格列中的文本不应流入相邻列
以下是 Mwe 和屏幕截图。谢谢
\documentclass[a4paper,12pt,oneside]{scrbook}
\usepackage{blindtext}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\usepackage{ngerman}
\usepackage[none]{hyphenat}
\sloppy
\usepackage{tabularx}
\usepackage{ragged2e}
\usepackage{booktabs}
\usepackage{ltablex}
\newcolumntype{Z}{>{\RaggedRight\centering\arraybackslash\hspace{0pt}}X}
%Used for multicolumn
\newcolumntype{M}{>{\RaggedRight\arraybackslash\hspace{0pt}}c}
\newcolumntype{L}{>{\RaggedRight\arraybackslash\hspace{0pt}}l}
\begin{document}
\chapter{Intro}
\blindtext
\begin{tabularx}{\linewidth}{|Z|Z|Z|Z|Z|Z|Z|}
\hline
& \multicolumn{2}{M|}{ \textbf{Anzahl TADs}} & \textbf{Verlustrate} & \textbf{Erfolgsdefinition} & \textbf{Misserfolgsdefinition} & \textbf{Entzündungserscheinung} \\ \hline
\textbf{Publikation} & \textbf{Insgesamt} & \textbf{Verlust} & & & & \\ \hline
Jung et al., 2009 & 30 & 2 & 6,7\% & & Mangel an Osseointegrität, Mobilität des Implantates & milde Mukositis \\ \hline
Jung et al., 2010 & 41 & 1 & 2,4\% & keine Implantatmobilität, keine unerwünschte Bewegung der Suprakonstruktion & & \\ \hline
\end{tabularx}
\end{document}
答案1
The `hyphenat` package disables hyphenation by setting \hyphenpenalty=10000\exhyphenpenalty=10000
因此,如果您想临时启用连字符,请将其设置为合理的值(例如 25),这比平常要低一点,但在小栏中,我们希望比在常规文本中更鼓励使用连字符。
\newcommand{\HY}{\hyphenpenalty=25\exhyphenpenalty=25}
\newcolumntype{Z}{>{\HY\centering\arraybackslash\hspace{0pt}}X}
\newcolumntype{M}{>{\HY\RaggedRight\arraybackslash\hspace{0pt}}c}
\newcolumntype{L}{>{\HY\RaggedRight\arraybackslash\hspace{0pt}}l}
答案2
(编辑以纳入 Piet van Ostrum 关于改变连字惩罚参数的想法本地)
来自该包的用户指南hyphenat
:
该
hyphenat
包中有一个名为 的选项none
。使用此选项可防止任何连字符整个文档中。如果 TeX 无法使用连字符,它可能会抱怨换行不当,您可能会发现文本的某些部分伸出到边距中。如果您使用此选项,您还应该考虑使用\sloppy
and/or\raggedright
。[强调]
尽管通过 全局禁用了连字\usepackage[none]{hyphenat}
,但可以通过重置连字惩罚参数\hyphenpenalty
和在本地重新启用它\exhyphenpenalty
,如@PietvanOostrum 对Z
列类型定义的回答所示。
结合这个想法,同时使用\RaggedRight
而不是\centering
并使用babel
包(带选项ngerman
)代替弃用的ngerman
包。 产生以下解决方案。请注意,提供一些出现在标题行中的单词的可接受连字符点的指导仍然是一个好主意。否则,最终会出现诸如 的情况Verlus-trate
。还请注意使用\cline
将子标题分组到“Anzahl TADs”下。
\documentclass[a4paper,12pt,oneside]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
%\usepackage{ngerman} % 'ngerman' package is deprecated
\usepackage[ngerman]{babel}
\usepackage[none]{hyphenat} % suppress hyphenation *globally*
\sloppy
\usepackage{tabularx,ragged2e}
\newcommand{\HY}{\hyphenpenalty=25\exhyphenpenalty=25}
% re-enable hyphenation locally inside "Z" columns
\newcolumntype{Z}{>{\HY\RaggedRight\arraybackslash\hspace{0pt}}X}
\begin{document}
\setlength\tabcolsep{3pt} % optional
\begin{tabularx}{\linewidth}{|Z|Z|l|Z|Z|Z|Z|}
\hline
\textbf{Publika\-tion} &
\multicolumn{2}{l|}{\textbf{Anzahl TADs}} &
\textbf{Verlust\-rate} & \textbf{Erfolgs\-definition}
& \textbf{Miss\-erfolgs\-definition} & \textbf{Entzündungserscheinung} \\
\cline{2-3}
& \textbf{Insgesamt} & \textbf{Verlust} & & & & \\
\hline
Jung et~al. 2009 & 30 & 2 & 6,7\% & & Mangel an Osseointegrität, Mobilität des Implantates & milde Mukositis \\
\hline
Jung et~al. 2010 & 41 & 1 & 2,4\% & keine Implantatmobilität, keine unerwünschte Bewegung der Suprakonstruktion & & \\
\hline
\end{tabularx}
\end{document}
答案3
一种可能的解决方案是在单独的文档中设置表格,在这些文档中不使用hyphenat
包,编译这些文档并将其作为 pdf 图像包含到主文档中:
表格单独文档的示例:
\documentclass[a4paper,12pt,oneside]{scrbook}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{textcomp}
\usepackage{ngerman}
\usepackage{tabularx}
\usepackage{ragged2e}
\usepackage{booktabs}
\newcolumntype{C}{>{\Centering\arraybackslash\hspace{0pt}}X}
\newcolumntype{L}{>{\RaggedRight\arraybackslash\hspace{0pt}}X}
\usepackage[active,tightpage]{preview}
\setlength\PreviewBorder{1pt}
\begin{document}
\begin{preview}
\small
\setlength\tabcolsep{3pt}
\begin{tabularx}{\linewidth}{|*{7}{C|}}% or better to use L clumn type
\hline
& \multicolumn{2}{c|}{\textbf{Anzahl TADs}}
& \textbf{Verlustrate}
& \textbf{Erfolgsdefinition}
& \textbf{Misserfolgsdefinition}
& \textbf{Entzündungserscheinung} \\
\hline
\textbf{Publikation}
& \textbf{Insgesamt}
& \textbf{Verlust} & & & & \\
\hline
Jung et al., 2009
& 30 & 2 & 6,7\% &
& Mangel an Osseointegrität, Mobilität des Implantates
& milde Mukositis \\
\hline
Jung et al., 2010
& 41 & 1 & 2,4\% & keine Implantatmobilität, keine unerwünschte Bewegung der Suprakonstruktion & & \\
\hline
\end{tabularx}
\end{preview}
\end{document}
这使:
包preview
用于修剪表格,以便连字符可以更好地工作。获取表格 pdf 文件,然后将其包含在主文档中
\begin{table}[htb]
\caption{title of table}
\label{tab: ...}
\includegraphics{path/table name}
\end{table}
当然,这种方法对于可以放在一页上的表格来说很有效。