¿Cómo hacer que el salto de línea/multifila funcione en el título de mi tabla para principiantes?

¿Cómo hacer que el salto de línea/multifila funcione en el título de mi tabla para principiantes?

¿Cómo hacer que el salto de línea/multifila funcione en el título de mi tabla para principiantes?

\caption{this is my first table's captive caption}

Me gustaría que el título se viera así:

esta es mi primera

título cautivo de la mesa

¿Cómo?

\documentclass{article}
\usepackage{tabulary}
\usepackage{threeparttable}
\usepackage{array}
\usepackage{siunitx}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{pbox}
\usepackage{lipsum}
\usepackage[utf8]{inputenc}\usepackage{textcomp}
\renewcommand{\arraystretch}{1.2}
\sisetup{round-mode=places,round-precision=1, add-decimal-zero=true, add-integer-zero=true, round-integer-to-decimal}

\begin{document}

\lipsum[1]


\begin{table}
\begin{threeparttable}
\caption{this is my first table's captive caption}
\begin{tabulary}{\textwidth}{@{}*{2}{L}*{6}{S[table-format=3.2]}@{}} \toprule
× & TOTALLY bla percentage of bla & {1000} & {2000} & {3000} & 
\multicolumn{1}{c}{\begin{tabular}{@{}c@{}}Bonjour\tabularnewline monde!\end{tabular}} &
 {5000} & {6000\tnote{1}}\\ \midrule
% × & TOTALLY bla percentage of bla & {1000} & {2000} & {3000} & \multirow{2}*{4000 apples and pears \\ and whatnot} & {5000} & {6000\tnote{1}}\\ \midrule
DDD 1 & 47.6 & 29.1 & 1.0 & 0.2 & 1.9 & 15.2 & 0.0\\
UUU & 24.8 & 10.8 & 6.4 & 0.0 & 3.2 & 4.5 & 0.0\\
× & × & × & × & × & × & × & ×\\
Unweighted average: & × & × & × & × & × & × & ×\\
BBB & 33.8 & 11.3 & 9.1 & 0.4 & 1.8 & 11.0 & 0.2\\
GGG & 32.9904 & 8.60325 & 9.3845 & 0.0495 & 1.43225 & 10.79525 & 0.119\\
DDD & 39.4545 & 9.8695 & 15.3365 & 0.6915 & 2.246 & 10.6705 & 0.5105\\ \bottomrule
\end{tabulary}

\begin{tablenotes}
\item [1] the first note ...
\end{tablenotes}

\end{threeparttable}
\end{table}

\lipsum[2]

\end{document}

Editar

tratando decentrolos títulos de dos líneas:

\usepackage{caption}
(...)
\begin{table}
  \captionsetup{singlelinecheck=false, justification=centering}
\begin{threeparttable}
\caption{this is my first\newline table's very captive caption}

... el resultado de este intento no parece del todo correcto ... ¿cómo hacerlo bien?


Editar 2

  • ¿Cómo podría hacer que se produzca el salto de línea entre dos palabras (o incluso caracteres) en particular?pero solo si¿El título saltaría de línea en cualquier caso?

Es decir, el salto de línea estaría "inactivo" siempre que el título sea lo suficientemente corto como para caber completamente en una línea; tan pronto como lo haríatengo quesalto de línea, el salto se produce en el lugar predefinido.

Respuesta1

LaTeX utiliza dos pases para el título. En la primera pasada, el título se establece en una línea, \hboxsi el resultado cabe en una línea, el título se establece en una línea; de lo contrario, se establece en varias líneas. En su caso, el título es demasiado corto y cabe en una línea.

Un truco: se establece un salto de línea y se agrega mucho espacio horizontal al título. En la primera pasada, se ignora el salto de línea, pero el espacio horizontal garantiza que el título no quepa en una línea. El título se establece en modo de varias líneas y se ejecuta el salto de línea, pero el espacio horizontal al comienzo de la siguiente línea se descarta (\hspace sinestrella):

\documentclass{article}
\begin{document}
\begin{table}
  \caption{this is my first\newline
    \hspace{\linewidth}table's captive caption}
\end{table}
\end{document}

Resultado

Una alternativa es el paquete captionque proporciona una opción singlelinecheckque permite deshabilitar el primer paso que verifica la longitud de los subtítulos:

\documentclass{article}
\usepackage{caption}
\begin{document}
\begin{table}
  \captionsetup{singlelinecheck=false}
  \caption{this is my first\newline
    table's captive caption}
\end{table}
\end{document}

(La opción también se puede configurar globalmente en el preámbulo).

Centrado

Lo siguiente utiliza un interno tabular(y el predeterminado singlelinecheck=true). El valor de la etiqueta de la tabla Table 1:se calcula ( \settowidth) y se tiene en cuenta.

\captionSi no se utiliza el argumento opcional de , el siguiente ejemplo también lo redefine localmente \centeredmultilineincaptionpara eliminar el tabulary el salto de línea de la lista de figuras.

\documentclass{article}

\makeatletter
\newlength{\@captionlabelwidth}
\DeclareRobustCommand*{\centeredmultilineincaption}[1]{%
  \settowidth{\@captionlabelwidth}{%
    \@nameuse{fnum@\@captype}: %
  }%
  \begin{tabular}[t]{@{\hspace{-\@captionlabelwidth}}c@{}}%
    \hspace{\@captionlabelwidth}\ignorespaces
    #1%
  \end{tabular}%
}

\begin{document}
\begingroup
  \renewcommand*{\centeredmultilineincaption}[1]{%
    \begingroup
      \let\tabularnewline\space
      #1%
    \endgroup
  }%
  \listoftables
\endgroup

\begin{table}
  \caption{%
    \centeredmultilineincaption{%
       this is my first\tabularnewline
       table's captive caption
    }%
  }
\end{table}
\end{document}

Resultado con centrado

Actualizar:Este método sólo funciona si la primera línea es más larga.

Salto de línea "condicional"

  • Se pueden utilizar ambos \\y . \linebreakEn el modo de una sola línea desaparecen, por lo que se debe establecer un espacio antes: first line \linebreak second line, no first line\linebreak second line. Este último pasaría a estar first linesecond lineen modo unifilar.
  • Ambas macros son frágiles. Si el mismo salto de línea también debe ocurrir en la lista de tablas, entonces \protectes necesario:

    \caption{First line \protect\\second line}
    
  • El argumento opcional de \captionse puede utilizar para la lista de tablas:

    \caption[Short version]{First line \\second line}
    

    o un salto de línea diferente en la lista de tablas:

    \caption[Short\protect\\version]{First line \\second line}
    

El siguiente ejemplo define \captionlinebreakque

  • cuida el espacio antes,
  • es robusto y
  • se puede redefinir para la lista de tablas.

Si el título de varias líneas también debe estar centrado, se vuelve más feo, porque \@makecaptionnecesita redefinirse y su definición depende de la clase y los paquetes. El ejemplo lo redefine para la clase articlesin paquete caption:

\documentclass[a5paper]{article}
\usepackage{varwidth}

\DeclareRobustCommand*{\captionlinebreak}{%
  \leavevmode\unskip\space % one space before
  \\%
}

\makeatletter
\long\def\@makecaption#1#2{%
  \vskip\abovecaptionskip
  \sbox\@tempboxa{#1: #2}%
  \ifdim \wd\@tempboxa >\hsize
    \centerline{%
      \begin{varwidth}{\hsize}%
        #1: #2%
      \end{varwidth}%
    }%
  \else
    \global \@minipagefalse
    \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  \fi
  \vskip\belowcaptionskip
}
\makeatother

\begin{document}
\begingroup
  \let\captionlinebreak\relax
  \listoftables
\endgroup
\begin{table}
\centering
\caption{Lorem ipsum\protect\captionlinebreak
  dolor sit amet, consetetur sadipscing elitr, \dots}
\end{table}
\begin{table}
\centering
\caption{Lorem ipsum\captionlinebreak
  dolor sit amet, \dots}
\end{table}
\end{document}

Resultado

Respuesta2

\centeringse redefine \\para que funcione correctamente, pero desafortunadamente no se redefine \newline. Por lo tanto combinando \centeringy \newlineda resultados extraños:

\documentclass{article}
\begin{document}
\parbox{\linewidth}{\centering
This is some text\newline And this is some text, too.}
\par\bigskip
\parbox{\linewidth}{\centering
This is some text\\And this is some text, too.}
\end{document}

ingrese la descripción de la imagen aquí

(¿Por qué? ¿Error en LaTeX? ¿Quizás David Carlisle podría encender la luz aquí?)

Por lo tanto, es mejor usarlo \\en subtítulos u otras cosas que deban estar tipográficas centradas. Por cierto: cuando se utiliza el captionpaquete, un salto de línea tipográfico \\se reemplazará automáticamente por un carácter de espacio en las entradas de la lista, por lo que normalmente no es necesario utilizar un texto de entrada de lista alternativo:

\documentclass{article}
\usepackage[justification=centering]{caption}
\begin{document}
\listoftables
\begin{table}
  \caption{This is my first\\table's captive caption}
\end{table}
\end{document}

ingrese la descripción de la imagen aquí

Anexo "Salto de línea condicional"

El uso de \DeclareCaptionStyleuno puede definir diferentes conjuntos de opciones para subtítulos de "una sola línea" y subtítulos "largos". Con \DeclareCaptionOptionuno puede definir sus propias opciones para su uso con el captionpaquete.

Entonces, como ejemplo, defino un nuevo llamado condicional \ifcaptionlinebreaky una opción apropiada para usar con el captionpaquete que se puede alternar con linebreak=falsey linebreak=true:

\documentclass{article}

\usepackage{caption}

% New conditional \ifcaptionlinebreak
\newif\ifcaptionlinebreak

% New caption package option "linebreak" for toggeling \ifcaptionlinebreak
\DeclareCaptionOption{linebreak}{\csname captionlinebreak#1\endcsname}

% New command \captionlinebreak which either typesets a line break or a space,
% depending on \ifcaptionlinebreak
\newcommand\captionlinebreak{\ifcaptionlinebreak\\\else\space\fi}

% Own caption style which turns the linebreak into a space for short captions
% and into a line break for long captions
\DeclareCaptionStyle{mystyle}[linebreak=false]{linebreak=true}
\captionsetup{style=mystyle,justification=centering}

\begin{document}
\listoftables

\begin{table}[!hb]
  \caption{This is my first\\table's captive caption}
\end{table}

\begin{table}[!hb]
  \caption{This is my first\captionlinebreak table's captive caption}
\end{table}

\begin{table}[!hb]
  \caption{This is my first\captionlinebreak table's captive caption.
                 This is my first table's captive caption}
\end{table}

\end{document}

ingrese la descripción de la imagen aquí

Anexo al anexo "Salto de línea condicional"

Acabo de presentar \ifsinglelinecaptionel captionpaquete, por lo que a partir de la próxima versión publicada en CTAN, el documento de ejemplo anterior podría reducirse a:

\documentclass{article}

\usepackage[justification=centering]{caption}
\newcommand\captionlinebreak{\ifsinglelinecaption\space\else\\\fi}

\begin{document}
\listoftables

\begin{table}[!hb]
  \caption{This is my first\\table's captive caption}
\end{table}

\begin{table}[!hb]
  \caption{This is my first\captionlinebreak table's captive caption}
\end{table}

\begin{table}[!hb]
  \caption{This is my first\captionlinebreak table's captive caption.
                 This is my first table's captive caption}
\end{table}

\end{document}

(El paciente internado puede obtener la versión reciente enhttp://sourceforge.net/p/latex-caption/code/HEAD/tree/trunk/tex/)

información relacionada