Проблема с умлаутами в повернутой длинной таблице

Проблема с умлаутами в повернутой длинной таблице

Я столкнулся со странной вещью при настройке повернутой длинной таблицы с помощью apa6.

В частности, это работает:

\documentclass[12pt
               ,man % manuscript mode; jou man doc
               ,babel, american % language
               %,biblatex % loads biblatex or apacite
               ,a4paper % default:letter
               % ,floatsintext
               ,noextraspace %removes extra space after headings; closer to "true" double-spacing
               %,mask
               ,longtable
               %,helv % font in man mode
               %,tt   % font in man mode
               %,draftfirst
               %,draftall
               ]{apa6}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{pdflscape}
\usepackage{lipsum}
\usepackage{threeparttablex}
\usepackage{siunitx}


%% for the huge table to avoid boxes warnings
\newcommand{\rr}{\raggedright}
\newcommand{\tn}{\tabularnewline}


\DeclareDelayedFloatFlavor*{landscape}{table}


\title{Longtables and Me: An Endless Story}
\shorttitle{Longtables}

\author{Me}
\affiliation{MeU}

\authornote{
Empty
}



\abstract{
Empty.
}


\keywords{Empty}





\begin{document}

\lipsum

\begin{landscape}

\begin{ThreePartTable}

\begin{TableNotes}
\rr \footnotesize %
\textit{Note.} 
Just a TableNote to explain some stuff.
\end{TableNotes}


\begin{longtable}{p{7.3cm}
                  S[table-format = 5]
                  l
                  l
                  S[table-format = 2.2]
                  c
                  p{5cm}}

\caption{Longitudinal Studies Included in the Analysis} \\
\label{tab:studies} \\

\toprule
1st Column  & {2nd Column}  &  3rd Column   &  4th Column  &  {5th Column}  &  6th  &  7th Column\\
\midrule
\endfirsthead


\multicolumn{7}{l}{{\tablename} \thetable{} (continued)} \\[0.5ex]

\toprule
1st Column  & {2nd Column}  &  3rd Column   &  4th Column  &  {5th Column}  &  6th  &  7th Column\\
\midrule
\endhead

\rr An Entry    & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry that is quite long and breaks to the next line   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr Another rather long Entry that also breaks and extends over two lines   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\


\bottomrule

\insertTableNotes

\end{longtable}

\end{ThreePartTable}
\end{landscape}


\lipsum


\end{document}

Вставка умлаута в одну из ячеек таблицы (первая строка, левый столбец) все ломает и приводит к ошибке:

\documentclass[12pt
               ,man % manuscript mode; jou man doc
               ,babel, american % language
               %,biblatex % loads biblatex or apacite
               ,a4paper % default:letter
               % ,floatsintext
               ,noextraspace %removes extra space after headings; closer to "true" double-spacing
               %,mask
               ,longtable
               %,helv % font in man mode
               %,tt   % font in man mode
               %,draftfirst
               %,draftall
               ]{apa6}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{pdflscape}
\usepackage{lipsum}
\usepackage{threeparttablex}
\usepackage{siunitx}


%% for the huge table to avoid boxes warnings
\newcommand{\rr}{\raggedright}
\newcommand{\tn}{\tabularnewline}


\DeclareDelayedFloatFlavor*{landscape}{table}


\title{Longtables and Me: An Endless Story}
\shorttitle{Longtables}

\author{Me}
\affiliation{MeU}

\authornote{
Empty
}



\abstract{
Empty.
}


\keywords{Empty}





\begin{document}

\lipsum

\begin{landscape}

\begin{ThreePartTable}

\begin{TableNotes}
\rr \footnotesize %
\textit{Note.} 
Just a TableNote to explain some stuff.
\end{TableNotes}


\begin{longtable}{p{7.3cm}
                  S[table-format = 5]
                  l
                  l
                  S[table-format = 2.2]
                  c
                  p{5cm}}

\caption{Longitudinal Studies Included in the Analysis} \\
\label{tab:studies} \\

\toprule
1st Column  & {2nd Column}  &  3rd Column   &  4th Column  &  {5th Column}  &  6th  &  7th Column\\
\midrule
\endfirsthead


\multicolumn{7}{l}{{\tablename} \thetable{} (continued)} \\[0.5ex]

\toprule
1st Column  & {2nd Column}  &  3rd Column   &  4th Column  &  {5th Column}  &  6th  &  7th Column\\
\midrule
\endhead

\rr An Entry with ä    & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry that is quite long and breaks to the next line   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr Another rather long Entry that also breaks and extends over two lines   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\


\bottomrule

\insertTableNotes

\end{longtable}

\end{ThreePartTable}
\end{landscape}


\lipsum


\end{document}

Интересно, что если убрать \DeclareDelayedFloatFlavor*{landscape}{table}преамбулу, то все снова работает (однако мне нужно сохранить эту команду).

Конечно, эту проблему можно легко обойти, экранируя умляуты и специальные символы (например, \"aв этом случае), но мне было интересно, есть ли более общее решение для этого контекста.

Заранее спасибо.

PS: умлауты работают правильно за пределами повернутой длинной таблицы.

решение1

По какой-то непонятной мне причине временный файл, в который записывается отложенная таблица, закодирован в latin 1, а не в utf8. Таким образом, обходной путь — установить входную кодировку на latin 1, когда таблица будет считываться снова. Вы можете удобно сделать это с помощью

\AtBeginDelayedFloats{\inputencoding{latin1}}

Пример вывода

\documentclass[12pt
               ,man % manuscript mode; jou man doc
               ,babel, american % language
               %,biblatex % loads biblatex or apacite
               ,a4paper % default:letter
               % ,floatsintext
               ,noextraspace %removes extra space after headings; closer to "true" double-spacing
               %,mask
               ,longtable
               %,helv % font in man mode
               %,tt   % font in man mode
               %,draftfirst
               %,draftall
               ]{apa6}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{pdflscape}
\usepackage{lipsum}
\usepackage{threeparttablex}
\usepackage{siunitx}


%% for the huge table to avoid boxes warnings
\newcommand{\rr}{\raggedright}
\newcommand{\tn}{\tabularnewline}


\DeclareDelayedFloatFlavor*{landscape}{table}
\AtBeginDelayedFloats{\inputencoding{latin1}}

\title{Longtables and Me: An Endless Story}
\shorttitle{Longtables}

\author{Me}
\affiliation{MeU}

\authornote{
Empty
}



\abstract{
Empty.
}


\keywords{Empty}





\begin{document}

\lipsum

\begin{landscape}

\begin{ThreePartTable}

\begin{TableNotes}
\rr \footnotesize %
\textit{Note.}
Just a TableNote to explain some stuff.
\end{TableNotes}


\begin{longtable}{p{7.3cm}
                  S[table-format = 5]
                  l
                  l
                  S[table-format = 2.2]
                  c
                  p{5cm}}

\caption{Longitudinal Studies Included in the Analysis} \\
\label{tab:studies} \\

\toprule
1st Column  & {2nd Column}  &  3rd Column   &  4th Column  &  {5th Column}  &  6th  &  7th Column\\
\midrule
\endfirsthead


\multicolumn{7}{l}{{\tablename} \thetable{} (continued)} \\[0.5ex]

\toprule
1st Column  & {2nd Column}  &  3rd Column   &  4th Column  &  {5th Column}  &  6th  &  7th Column\\
\midrule
\endhead

\rr An Entry with ä    & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry that is quite long and breaks to the next line   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr Another rather long Entry that also breaks and extends over two lines   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\

\rr An Entry   & 1234  & ABCD    & glo  & 99.32  & 2  & Some more text \\


\bottomrule

\insertTableNotes

\end{longtable}

\end{ThreePartTable}
\end{landscape}


\lipsum


\end{document}

решение2

Возможно, вы захотите сообщить об этом apa6сопровождающему или endfloatсопровождающему ( apa6использует endfloatдля отображения поплавков).

Основная проблема заключается в том, что если мы можем записать utf8 на диск, нам необходимо защитить данные перед записью, иначе специальные символы будут расширены.

Кажется, это помогает, помещено в преамбулу

\makeatletter
\renewcommand\efloat@iwrite[1]{%
   \expandafter\immediate\expandafter\protected@write\csname efloat@post#1\endcsname{}}

\makeatother

Я изменил \writeна \protected@writeи добавил {}после, \csnameтак как этот макрос ожидает три аргумента, а не только два.

Редактировать: Хм, глядя на сгенерированный код, нет, он не записывает utf8 на диск, но, похоже, компилируется правильно.

Связанный контент