Interazione tra \input, \tabular, texlive 2016 e texlive 2020

  • Creatore
    Topic
  • #119762
    gamboz
    Partecipante
      Up
      0
      Down
      ::


      Ciao care/i,
      come da oggetto, ho una questione “curiosa”.
      Se provo a usare \input dentro \tabular, la compilazione (pdflatex con texlive 2020) fallisce se \input è seguito da \hline.
      L’errore è un “! Misplaced \noalign.”
      Non succede compilando con una texlive 2016.
      Es.:
      `
      \begin{tabular}{c}
      \input{b.tex}
      \hline
      \end{tabular}
      `
      dove b.tex contiene solo
      `
      x
      \\
      `

      Qualcuno vede se mi sono perso qualcosa di banale?
      grazie
      m

      Attachments:
      You must be logged in to view attached files.
    Visualizzazione 4 filoni di risposte
    • Autore
      Risposte
      • #119763
        OldClaudio
        Partecipante
          Up
          0
          Down
          ::


          Sembra che \InputIfFileExists (il primo comando eseguito da \input{…} abbia un piccolo baco che è già venuto al pettine e che Il LaTeX Team mi dice di avere già corretto, ma che la versione corretta sarà disponibile con la versione di TeXLive del 2021, che sarà disponibile fra 6 o 7 settimane.

          Per evitare l’errore, per ora puoi usare il comando nativo di TeX sostituendo [tt\\input{b.tex}[/tt] con [tt]\input b.tex[/tt], cioè togliendo le graffe.
          \InputIfFileExists è contenuto dentro il comando \@input che è quello che viene eseguito quando ci sono le graffe.

        • #119764
          gamboz
          Partecipante
            Up
            0
            Down
            ::


            grazie per la spiegazione e per il workaround 🙂

            Se posso approfittare, come faccio a trovare la definizione di \input che viene usata?
            (ho provato a leggere latex.ltx, ma al momento mi supera)

          • #119765
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              potresti dare da terminale il comando texdoc source2e contiene la documentazione di latex.ltx & company. Nella pagina 210 c’è la sezione 1.1 intitolata Safe Input Macros e li sono descritti anche i test \IfFileExists e \InputIfFileExists, oltre a \input, \@input e \@@input; quest’ultimo è semplicemente un alias del comando nativo di TeX \input, in modo che il comando \input possa essere ridefinito ai fini di LaTeX.
              In sostanza la prima definizione di \input testa se è seguito da una graffa; se lo è lancia \@input (che a quanto pare è la sorgente dei vari problemi, ma se non lo è lancia \@@input, cioè il comando nativo.
              Se viene lanciato \@input, ils uso argomento viene testato con \InputIfFileExists. La comprensione di questo comando è molto difficile perché il suo sviluppo è scritti in LaTeX3 e senza conoscere LaTeX3 è come leggere in arabo. In realtà esisterebbe la lettura di interface3 (sempre con texdoc), ma benché io lo abbia letto diverse volte (solole parti che mi interessavano) continuo ad essere al livello del bambino di prima elementare che impara a disegnare le lettere, ma non sa ancora scrivere; si, come il bambino di prima elementare che impara a scrivere il proprio nome, sono riuscito a definirmi una mezza dozzina di comandi di interfaccia, ma solo Enrico riesce a maneggiare LaTeX3 con maestria.
              Se ti ci metti di buzzo buono, visto che sei giovane e impari alla svelta, forse tu ci riesci meglio di me e impari LaTeX3 in modo efficiente ed efficace.

            • #119766
              gamboz
              Partecipante
                Up
                0
                Down
                ::


                texdoc source2e è proprio quello che cercavo. Grazie! (è una miniera d’oro 🙂

                LaTeX3 mi ha sempre fatto paura, finché non ho letto texdoc expl3 e non ho cominciato a scrivere qualche macro (e non ho cambiato modo in emacs per poter editare expl3 in modo decente).
                Nel mio piccolo, devo dire che con expl3 sono riuscito a fare cose che con TeX/LaTeX2e da soli probabilmente non sarei stato in grado.

              • #119767
                OldClaudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Ho provato ad allegare il tuo esempio minimo compilabile ad un messaggio inviato al LaTeX Progect Team; ti scrivo il codice che ho inviato`\documentclass{article}
                  \begin{filecontents}{b.tex}
                  xx \\
                  \end{filecontents}
                  \begin{document}
                  Ok: This works fine

                  \begin{tabular}{c}
                  x \\
                  \hline
                  \end{tabular}

                  \bigskip

                  The following is not ok.

                  The b.tex contains the core of the tabular (see env. filencontents);
                  but if \verb|\input{b.tex}| is used an error pops up; while if
                  \verb|\input b.tex| is used, it works properly.

                  \begin{tabular}{c}% uncomment one of the following lines
                  %\input{b.tex}
                  \input b.tex
                  \hline
                  \end{tabular}

                  \bigskip

                  Apparently the error is produced by the expansion of \verb|\@input@| that
                  checks the existence of the b.tex file through \verb|\IfFileExists|.

                  \end{document}` Questa è la risposta:
                  \quote]using \input{…} inside a tabular was never officially supported and never worked reliably depending in the circumstances (i.e. what other package were loaded), because various parts of tabular scan ahead and that fails based on what is found. you have to put the whole tabular into a file not only its body. Nowadays with files executing hooks at the start and the end it will always fail and that can’t be avoided. [/quote] Vedremo a maggio se le modfiche apportateal nucleo di LaTeX risolveranno questo problema,ma da quello che scrivono sembra che il messaggio sia “Perché fai cose così strane? Non farle e sarai al sicuro”

              Visualizzazione 4 filoni di risposte
              • Devi essere connesso per rispondere a questo topic.

              Go to top