Coder Social home page Coder Social logo

Comments (15)

davidcarlisle avatar davidcarlisle commented on July 30, 2024 2

@davidcarlisle So longtable did change (@SverreStausland said the version was the same).

https://chat.stackexchange.com/transcript/message/32722915#32722915 :-)

from babel.

jbezos avatar jbezos commented on July 30, 2024 1

@davidcarlisle So longtable did change (@SverreStausland said the version was the same).

from babel.

davidcarlisle avatar davidcarlisle commented on July 30, 2024 1

@SverreStausland as I showed just make sure you don't start a vbox with \begin{otherlanguage} so use \leavevmode\begin{otherlanguage} or \mbox{}\begin{otherlanguage} in such a context.

from babel.

jbezos avatar jbezos commented on July 30, 2024 1

I’ll investigate, but this doesn’t mean there will be a general solution. An option is to document \leavevmode will be necessary in some cases. Interestingly, the babel manual explains neither \foreignlanguage nor otherlanguage* enter in horizontal mode, but I missed a similar remark in otherlanguage. Very likely, and for compatibility reasons. the current behavior will stay (as \foreignlanguage stayed), but, well, I'd like to investigate.

from babel.

davidcarlisle avatar davidcarlisle commented on July 30, 2024

As I explained on tex.sx chat this is unrelated to the table packages,

\documentclass{article}
\usepackage[main = american, norsk]{babel}


\begin{document}


xxx \parbox[t]{5cm}{%
  \begin{otherlanguage}{norsk}Foo bar baz\end{otherlanguage}}

\bigskip


xxx \parbox[t]{5cm}{%
  \leavevmode\begin{otherlanguage}{norsk}Foo bar baz\end{otherlanguage}}

\end{document}

produces

image

due to a \write whatsit at the start of the language switch.

from babel.

jbezos avatar jbezos commented on July 30, 2024

It seems there is a change in behavior in the LaTeX kernel [edit: actually, in longtable], which now enters in vertical mode (formerly it didn’t; or exists horizontal mode, I’m not yet sure). The following test file prints ‘Vertical’ in current LaTeX, while Overleaf prints ‘Horizontal’:

\documentclass{article}

\usepackage{array, ltxtable}

\begin{document}

\begin{filecontents}[overwrite]{testing.tex}
\begin{longtable}{p{3em}X}
9999 & {\ifhmode Horizontal\else Vertical\fi}\\
9999 & {\ifhmode Horizontal\else Vertical\fi}\\
\end{longtable}
\end{filecontents}
\LTXtable{\linewidth}{testing.tex}

\end{document}

from babel.

jbezos avatar jbezos commented on July 30, 2024

@SverreStausland Just read David’s message, which gave me the workaround: use \leavevmode.

from babel.

davidcarlisle avatar davidcarlisle commented on July 30, 2024

longtable now follows array

% \changes{v4.18}{2023/08/25}{Use \cs{everypar} to match array package, github 1128}%

so the strut is delayed in everypar (so if the p-entry starts wih a list you don't have a paragraph with just an invisible strut before the list

so while you see a change in behaviour for longtable it would always have been this way in a tabular using the array package, or as shown above in a standard parbox

from babel.

davidcarlisle avatar davidcarlisle commented on July 30, 2024

@jbezos you could try to delay the write with \ifvmode\everypar{...}\else...} but it's a tricky area to ensure everypar survives at starts of sections and places.

In color.sty I just documented that \color may do this (footnote page 7 of grfguide) and made \textcolor always have \leavevmode so it does not have the issue, but always starts a paragraph so can not surround lists etc

from babel.

jbezos avatar jbezos commented on July 30, 2024

As otherlanguage can be used in many contexts, I can’t change it hastly. I have to investigate.

from babel.

SverreStausland avatar SverreStausland commented on July 30, 2024

@jbezos I looked through my two log files twice to make sure that the package versions were the same, and now that I'm doing the same one more time, I notice that the versions for longtable are indeed different ... Sorry! 😖

from babel.

SverreStausland avatar SverreStausland commented on July 30, 2024

@davidcarlisle @jbezos Can someone explain how exactly one should "use \leavemode" as a workaround?

from babel.

SverreStausland avatar SverreStausland commented on July 30, 2024

If I understood it correctly, @jbezos will investigate and see if there's a solution that doesn't require the user to insert \leavemode before \begin{otherlanguage} whenever it's used in a table. Did I understand that correctly?

from babel.

davidcarlisle avatar davidcarlisle commented on July 30, 2024

@SverreStausland yes but it's tricky, for \color I decided to just document that it could happen and the user should add the correction at the start of vmode. For \textcolor I went the other way and always add \leavevmode but that's for small text fragments that should always be in a paragraph. So @jbezos may find a safe compromise, but this is a hard area (TeX really doesn't help) so I'd simply add them.

If in your document you always have \begin{otherlanguage}Text never \begin{otherlanguage}\begin{itemize} or similar, then you can simply define it locally to always start a paragraph so

\let\xxotherlanguage\otherlanguage
\def\otherlanguage{\leavevmode\xxotherlanguage}

But that is not a general solution

from babel.

jbezos avatar jbezos commented on July 30, 2024

Finally the current behavior will stay for a couple of reasons: (1) backwards compatibility; (2) otherlanguage is the environment version of \selectlanguage and entering in horizontal mode doesn’t make much sense. I even considered an option to change the behavior, but I discarded it for reason 2. If a \leavevmode is always required in otherlanguage, there is the possibility to add it with:

\AddToHook{env/otherlanguage/before}{\leavevmode}

So, I’ll just document neither \selectlanguage nor otherlanguage change the current mode.

from babel.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.