长桌上悬挂文字

长桌上悬挂文字

我使用了提供的解决方案这个帖子在表格内有悬挂缩进。这适用于tabular。但是,我现在必须使用longtable。这里第一的每个单元格中的段落是不是挂了。我不知道为什么。

有谁能解决这个问题?


\documentclass[a4paper,
           11pt, 
           BCOR=8.25mm,
           DIV=11]{scrbook}

\usepackage{array}
\newcommand{\dohang}{\hangindent1em\hangafter1 }

\usepackage{booktabs}
\usepackage{longtable}

\begin{document}

    \begin{longtable}[c]{
          >{\everypar\expandafter{\the\everypar\dohang\everypar{\dohang}\raggedright\arraybackslash}\arraybackslash}p{.15\textwidth}
          >{\everypar\expandafter{\the\everypar\dohang\everypar{\dohang}\raggedright\arraybackslash}\arraybackslash}p{.75\textwidth}}
      \caption{Long table. } \\
      \toprule
       \multicolumn{1}{l}{consetetur} & \multicolumn{1}{c}{sadipscing} \\ \midrule

      \endfirsthead
      \multicolumn{2}{c}%
      {\tablename\ \thetable\ -- \textit{Continued from previous page}} \\
      \toprule
       \multicolumn{1}{l}{consetetur} & \multicolumn{1}{c}{sadipscing} \\ \midrule
      \endhead
      \bottomrule
      \multicolumn{2}{r}{\textit{Continued on next page}} \\
      \endfoot
      \bottomrule
      \endlastfoot  
      \emph{Lorem ipsum dolor} & 
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor \par
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor \par
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor  \\
      &  \\
      \emph{Lorem ipsum dolor} & 
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor \par
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor \par
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor  
    \end{longtable}

    \begin{table}
    \caption{Tabular. }
    \begin{tabular}{
          >{\everypar\expandafter{\the\everypar\dohang\everypar{\dohang}\raggedright\arraybackslash}\arraybackslash}p{.15\textwidth}
          >{\everypar\expandafter{\the\everypar\dohang\everypar{\dohang}\raggedright\arraybackslash}\arraybackslash}p{.75\textwidth}}
      \toprule
       \multicolumn{1}{l}{consetetur} & \multicolumn{1}{c}{sadipscing} \\ \midrule
      \emph{Lorem ipsum dolor} & 
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor \par
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor \par
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor  \\
      &  \\
      \emph{Lorem ipsum dolor} & 
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor \par
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor \par
      Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor  
    \end{tabular}
    \end{table}

\end{document}

在此处输入图片描述

答案1

从我认为在 longtable 源代码中看到的内容来看,在条目的开头,在代码执行p{}之前插入了一个 strut >{}。这发生在宏中\LT@startpbox。这意味着段落在>{}代码完成之前已经开始。因此,\everypar对于第一段来说,来得太晚了。可以通过\dohang在中添加一个来补偿>{}

在正常的 中tabular,至少在array包中,支柱是通过 插入的。这就是在 中构造\everypar的原因,因为必须保留该特定值。在 中,这不是必需的:\expandafter\everypar\everyparlongtable

>{\everypar{\dohang}\dohang\raggedright\arraybackslash}

可以完成这项工作,只要longtable不更新以符合array.sty其工作方式即可。

在我看来,这是一种错误。你怎么看,@DavidCarlisle?

答案2

Pieter 的解决方案对我没有用。在以下帮助下,我找到了一个可行的解决方案:唐小姐, 然而:

\documentclass[a4paper]{article}

\usepackage{longtable, array}

\begin{document}
    \begin{longtable}{>{\hangindent.5cm\hangafter=1\raggedright}p{3cm}p{3cm}}
        Left aligned text with hanging indent & Justified text without hanging indent
    \end{longtable}
\end{document}

在此处输入图片描述

相关内容