Ambiente per inserire codice LaTeX con di fianco il typeset

  • Creatore
    Topic
  • #10071
    lorenzo.pantieri
    Partecipante
      Up
      0
      Down
      ::


      Beh, mi rendo conto che forse non è il momento migliore (è Ferragosto e il forum sta per chiudere per manutenzione), ma…

      Sulla Not So Short, viene definito l’ambiente example per riportare codice sorgente LaTeX con a fianco il corrispondente typeset:
      `\documentclass[a4paper,11pt]{book}

      \usepackage{lshort}

      \begin{document}

      \begin{example}
      Il mio numero di telefono presto
      cambier\`a. Sar\`a \mbox{0116 291
      2319}.

      Il parametro
      \mbox{\emph{nomefile}} deve
      contenere il nome del file.
      \end{example}

      \end{document}
      `
      dove lshort.sty è
      `\ProvidesPackage{lshort}

      \RequirePackage{verbatim}
      \RequirePackage{fancyheadings}
      \RequirePackage{calc}
      \RequirePackage[colorlinks,hyperindex,plainpages=false]{hyperref}

      % — example —-
      % This is an environment to set LaTeX examples.
      % On the left side the source text and on the
      % right side the typeset text.
      %
      % \begin{example}
      % \Large This is Large
      % \end{example}
      %
      % This Part is stolen from the verbaim.sty by FMi
      %
      \newwrite\example@out
      \newcounter{exacnt}
      \setcounter{exacnt}{1}
      \newlength{\savefboxrule}
      \newlength{\savefboxsep}
      \newlength{\outdent}
      \setlength{\outdent}{2cm}
      \addtolength{\headwidth}{\outdent}
      \newenvironment{example}%
      {\begingroup% Lets Keep the Changes Local
      \@bsphack
      \immediate\openout \example@out \jobname.exa
      \let\do\@makeother\dospecials\catcode`\^^M\active
      \def\verbatim@processline{%
      \immediate\write\example@out{\the\verbatim@line}}%
      \verbatim@start}%
      {\immediate\closeout\example@out\@esphack\endgroup%
      %
      % And here comes my part. :-
      %
      \stepcounter{exacnt}%
      \setlength{\parindent}{0pt}%
      \par\addvspace{3.0ex plus 0.8ex minus 0.5ex}\vskip -\parskip
      % Page \lsspageref{exa:\theexacnt}
      \expandafter\ifx\csname r@exa:\theexacnt\endcsname\relax\else
      \ifx\pdfoutput\undefined % We're not running pdftex
      \ifodd\lsspageref{exa:\theexacnt}\hspace*{0pt}\else\hspace*{-\outdent}\fi%
      \else
      % HyPsd@pageref internal hyperref command v6.69c
      \ifodd\HyPsd@pageref{exa:\theexacnt}\hspace*{0pt}\else\hspace*{-\outdent}\fi%
      \fi
      \fi
      \makebox[\textwidth][l]{%
      %\raisebox{-\height}[0pt][\totalheight]{%
      \begin{minipage}[c]{0.5\outdent+0.46\textwidth-3mm}%
      \small\verbatiminput{\jobname.exa}
      \end{minipage}%
      %}%
      \hspace{5mm}%
      \setlength{\savefboxrule}{\fboxrule}%
      \setlength{\fboxrule}{0.1pt}%
      \setlength{\savefboxsep}{\fboxsep}%
      \setlength{\fboxsep}{3mm}%
      % \raisebox{-\height}[0pt][\totalheight]{%
      \fbox{%
      \begin{minipage}{0.5\outdent+0.54\textwidth-3.5mm-2\fboxrule-2\fboxsep}%
      \setlength{\fboxrule}{\savefboxrule}%
      \setlength{\fboxsep}{\savefboxsep}%
      \setlength{\fboxrule}{0.5pt}%
      \setlength{\parskip}{1ex plus 0.4ex minus 0.2ex}%
      \begin{trivlist}\item\small\input{\jobname.exa}
      \end{trivlist}
      \end{minipage}
      }%
      % }%
      }\label{exa:\theexacnt}%
      \par\addvspace{3ex plus 0.8ex minus 0.5ex}\vskip -\parskip
      }
      `
      Ho tolto tutto quello che sono riuscito a togliere. Vorrei eliminare anche fancyheadings e hyperref (ho altri progetti, e i due pacchetti non mi sembrano necessari per lo scopo dell’ambiente considerato), ma se lo faccio ottengo un errore. Come si deve modificare il codice di lshort.sty?

      Se poi qualcuno di voi ha idee migliori per realizzare lo scopo di example (magari usando lo splendido listings) o anche per evitare che il risultato di example sbordi (a volte succede), è il benvenuto!

      Grazie mille,
      L.

    Visualizzazione 9 filoni di risposte
    • Autore
      Risposte
      • #10072
        ev
        Partecipante
          Up
          0
          Down
          ::


          E se provassi ad usare l’ambiente demo fornito dal pacchetto sverb? Dagli un’occhiata…

        • #10073
          lorenzo.pantieri
          Partecipante
            Up
            0
            Down
            ::

            E se provassi ad usare l’ambiente demo fornito dal pacchetto sverb? Dagli un’occhiata…

            Lo farò senz’altro! Per il momento, grazie del consiglio Emanuele!

            Ciao,
            L.

          • #10074
            DMW
              Up
              0
              Down
              ::


              Lorenzo,

              Riprendo questo topic perché ho finalmente trovato due ottimi modi per riprodurre l’ambiente che cercavi.

              A parte l’ottimo pacchetto sverb, ne esiste un’altro che si chiama, nemmeno a farlo apposta
              example
              ftp://tug.ctan.org/pub/tex-archive/macros/latex209/contrib/misc/example.sty

              Ecco un esempio
              `
              \documentclass{article}
              \usepackage{amsmath,amsthm,amssymb}
              \usepackage{example}

              \begin{document}
              Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
              Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
              \begin{example}

              $f(x)=x^2$
              $$
              g(x)=\int f(x)dx g(x)=\int f(x)dx
              $$
              \end{example}
              Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
              Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
              \end{document}
              `

              Questo ambiente è identico a quello che ha usato Lamport nella realizzazione del suo noto libro. Come puoi notare anche questo sborda. Comunue penso che se con geometry o con setlength annulli marginparwidth, non dovrebbe sbordare.

              Il secondo metodo è quello che desideri tu ed è realizzato mediante il pacchetto listings.
              Ti metto direttamente l’esempio, perché del codice capisco solo l’ultima parte.

              `
              \documentclass[12pt]{article}
              \usepackage[T1]{fontenc}
              \usepackage[latin1]{inputenc}
              \usepackage[writefile]{listings}
              \usepackage[italian]{babel}

              \lstset{extendedchars} % important
              \makeatletter
              \lstnewenvironment{sidebyside}{%
              \global\let\lst@intname\@empty
              \setbox\z@=\hbox\bgroup
              \setkeys{lst}{language={},style={},basewidth=0.51em,%
              basicstyle=\small\ttfamily% or whatever
              } %
              \lst@BeginAlsoWriteFile{\jobname.tmp}%
              }{%
              \lst@EndWriteFile\egroup
              \ifdim \wd\z@>.5\linewidth %%% alternative?
              \begin{center}%
              \hbox to\linewidth{\box\z@\hss}%
              \end{center}%
              \leavevmode \catcode`\^^M=10\relax
              \input{\jobname.tmp}%
              \else
              \begin{center}%
              \begin{minipage}{0.45\linewidth}%
              \hbox to\linewidth{\box\z@\hss}%
              \end{minipage}%
              \qquad
              \begin{minipage}{0.45\linewidth}%
              \leavevmode \catcode`\^^M=10\relax
              \input{\jobname.tmp}%
              \end{minipage}%
              \end{center}%
              \fi
              }
              \makeatother
              \begin{document}
              Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
              Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
              \begin{sidebyside}
              \textit{Andrea} è il mio nome,
              \textit{Lorenzo} è il tuo.
              \LaTeX\ è il nostro programma
              preferito. Esempio con il
              pacchetto listings.
              \end{sidebyside}
              Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
              Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
              \end{document}
              `

              se vuoi puoi anche invertire l’ordine in questo modo:
              `…..
              \else
              \begin{center}%
              \begin{minipage}{0.45\linewidth}%
              \leavevmode \catcode`\^^M=10\relax
              \input{\jobname.tmp}%
              \end{minipage}%
              \qquad
              \begin{minipage}{0.45\linewidth}%
              \hbox to\linewidth{\box\z@\hss}%
              \end{minipage}%
              \end{center}%
              \fi
              }
              \makeatother`

              Ciao

              Alla prossima

              Andrea

            • #10075
              Up
              0
              Down
              ::

              Lorenzo,

              Riprendo questo topic perché ho finalmente trovato due ottimi modi per riprodurre l’ambiente che cercavi.

              A parte l’ottimo pacchetto sverb, ne esiste un’altro che si chiama, nemmeno a farlo apposta
              example
              ftp://tug.ctan.org/pub/tex-archive/macros/latex209/contrib/misc/example.sty

              Ne segnalo un altro: examplep (la TeX Live più recente ce l’ha). Mi sono divertito a costruire una versione di example che non usa file esterni, ma mi sono accorto che è adatto solo a esempi molto brevi e poco complicati.

              Ciao
              Enrico

            • #10076
              DMW
                Up
                0
                Down
                ::


                Avrei una curiosità stupida. Per prendere più confidenza con le box, in particolare con \vtop
                \hbox, \hss, \vss… Vi chiedo se si potrebbe far sbordare, come accade con il pacchetto example, l’ambiente sidebyside che ho appena messo. Cioè di poter scrivere un codice di questo tipo:

                `
                \newlength\fullwidth
                \setlength{\fullwidth}{\textwidth}
                \addtolength{\fullwidth}{\marginparwidth}
                \addtolength{\fullwidth}{\marginparsep}

                ……
                \begin{center}%
                \begin{minipage}{0.45\fullwidth}%
                \hbox to\linewidth{\box\z@\hss}%
                \end{minipage}%
                \qquad
                \begin{minipage}{0.45\fullwidth}%
                \leavevmode \catcode`\^^M=10\relax
                \input{\jobname.tmp}%
                \end{minipage}%
                \end{center}% `

                ciao

                Andrea

              • #10077
                lorenzo.pantieri
                Partecipante
                  Up
                  0
                  Down
                  ::


                  Ringrazio Andrea ed Enrico per le segnalazioni. Appena possibile, proverò i pacchetti example, examplep, listings ed sverb e vi comunicherò le mie impressioni e/o dubbi.

                  Ancora grazie!
                  Lorenzo

                • #10078
                  lorenzo.pantieri
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Ciao Andrea, ho provato il codice che mi hai segnalato. Vorrei sapere se è possibile inserire uno sfondo grigio nel codice LaTeX (e non nel corrispondente typeset). Se scrivo:
                    `\documentclass[12pt]{article}
                    \usepackage[T1]{fontenc}
                    \usepackage[applemac]{inputenc}
                    \usepackage[writefile]{listings}
                    \usepackage[italian]{babel}
                    \usepackage{xcolor}

                    \lstset{extendedchars} % important
                    \makeatletter
                    \lstnewenvironment{sidebyside}{%
                    \global\let\lst@intname\@empty
                    \setbox\z@=\hbox\bgroup
                    \setkeys{lst}{language={},style={},basewidth=0.51em,%
                    basicstyle=\small\ttfamily,backgroundcolor=\color{lightgray}
                    } %
                    \lst@BeginAlsoWriteFile{\jobname.tmp}%
                    }{%
                    \lst@EndWriteFile\egroup
                    \ifdim \wd\z@>.5\linewidth %%% alternative?
                    \begin{center}%
                    \hbox to\linewidth{\box\z@\hss}%
                    \end{center}%
                    \leavevmode \catcode`\^^M=10\relax
                    \input{\jobname.tmp}%
                    \else
                    \begin{center}%
                    \begin{minipage}{0.45\linewidth}%
                    \hbox to\linewidth{\box\z@\hss}%
                    \end{minipage}%
                    \qquad
                    \begin{minipage}{0.45\linewidth}%
                    \leavevmode \catcode`\^^M=10\relax
                    \input{\jobname.tmp}%
                    \end{minipage}%
                    \end{center}%
                    \fi
                    }
                    \makeatother
                    \begin{document}
                    Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
                    Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
                    \begin{sidebyside}
                    \textit{Andrea} è il mio nome,
                    \textit{Lorenzo} è il tuo.
                    \LaTeX\ è il nostro programma
                    preferito. Esempio con il
                    pacchetto listings.
                    \end{sidebyside}
                    Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
                    Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
                    \end{document} `
                    lo sfondo grigio viene inserito sia nel codice LaTeX sia nel corrispondente typeset.

                    Mi piacerebbe sapere, inoltre, se è possibile fare il viceversa (cioè inserire lo sfondo nel typeset, ma non nel codice LaTeX).

                    Grazie mille!

                    Ciao,
                    L.

                  • #10079
                    lorenzo.pantieri
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      P.S. Sto combattendo con la documentazione di examplep, che sembra la soluzione più elegante e versatile. Dico “sembra”, perché dalla doc. ci capisco poco! In generale (sarà la pigrizia, non dico di no), non amo le documetazioni dei pacchetti che si limitano a spiegare “in astratto” quello che fanno i rispettivi pacchetti, ma sono povere di esempi del tipo “questo codice produce questo risultato”.

                      Se qualcuno ha voglia di inviarmi qualche esempio compilabile, gliene sarei grato.

                      Ciao,
                      L.

                    • #10080
                      DMW
                        Up
                        0
                        Down
                        ::

                        Ciao Andrea, ho provato il codice che mi hai segnalato. Vorrei sapere se è possibile inserire uno sfondo grigio nel codice LaTeX (e non nel corrispondente typeset). Se scrivo:
                        `\documentclass[12pt]{article}
                        \usepackage[T1]{fontenc}
                        \usepackage[applemac]{inputenc}
                        \usepackage[writefile]{listings}
                        \usepackage[italian]{babel}
                        \usepackage{xcolor}

                        \lstset{extendedchars} % important
                        \makeatletter
                        \lstnewenvironment{sidebyside}{%
                        \global\let\lst@intname\@empty
                        \setbox\z@=\hbox\bgroup
                        \setkeys{lst}{language={},style={},basewidth=0.51em,%
                        basicstyle=\small\ttfamily,backgroundcolor=\color{lightgray}
                        } %
                        \lst@BeginAlsoWriteFile{\jobname.tmp}%
                        }{%
                        \lst@EndWriteFile\egroup
                        \ifdim \wd\z@>.5\linewidth %%% alternative?
                        \begin{center}%
                        \hbox to\linewidth{\box\z@\hss}%
                        \end{center}%
                        \leavevmode \catcode`\^^M=10\relax
                        \input{\jobname.tmp}%
                        \else
                        \begin{center}%
                        \begin{minipage}{0.45\linewidth}%
                        \hbox to\linewidth{\box\z@\hss}%
                        \end{minipage}%
                        \qquad
                        \begin{minipage}{0.45\linewidth}%
                        \leavevmode \catcode`\^^M=10\relax
                        \input{\jobname.tmp}%
                        \end{minipage}%
                        \end{center}%
                        \fi
                        }
                        \makeatother
                        \begin{document}
                        Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
                        Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
                        \begin{sidebyside}
                        \textit{Andrea} è il mio nome,
                        \textit{Lorenzo} è il tuo.
                        \LaTeX\ è il nostro programma
                        preferito. Esempio con il
                        pacchetto listings.
                        \end{sidebyside}
                        Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
                        Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo Testo
                        \end{document} `
                        lo sfondo grigio viene inserito sia nel codice LaTeX sia nel corrispondente typeset.

                        Mi piacerebbe sapere, inoltre, se è possibile fare il viceversa (cioè inserire lo sfondo nel typeset, ma non nel codice LaTeX).

                        Grazie mille!

                        Ciao,
                        L.

                        Scusa il ritardo ma mi sto rimbecillendo con le box, penso che tra poco chiedo un aiuto al Prof. Enrico, altrimenti esco pazzo.

                        Non ci sono problemi alla tua richista:
                        Il primo metodo è quello di mettere backgroundcolor=\color{green} sotto setkeys{lst}, cioè
                        `
                        lstnewenvironment{sidebyside}{%
                        \global\let\lst@intname\@empty
                        \setbox\z@=\hbox\bgroup
                        \setkeys{lst}{language={},style={},basewidth=0.51em,%
                        basicstyle=\small\ttfamily,%backgroundcolor=\color{green}% or whatever
                        } %
                        \lst@BeginAlsoWriteFile{\jobname.tmp}%
                        }{%
                        ….`
                        Però così ti colora tutto.

                        L’altro metodo è quello di colorare le minipage in modo separato.

                        Cioè per colorare solo il codice puoi scrivere

                        `
                        }{%
                        \lst@EndWriteFile\egroup
                        \ifdim \wd\z@>.5\linewidth %%% alternative?
                        \begin{center}%
                        \colorbox{green}{\hbox to\linewidth{\box\z@\hss}}%
                        \end{center}%
                        \leavevmode \catcode`\^^M=10\relax
                        \input{\jobname.tmp}%
                        \else
                        \begin{center}%
                        \begin{minipage}{0.45\linewidth}%
                        \colorbox{green}{\hbox to\linewidth{\box\z@\hss}}%
                        \end{minipage}%
                        \qquad
                        \begin{minipage}{0.45\linewidth}%
                        \leavevmode \catcode`\^^M=10\relax
                        \input{\jobname.tmp}%
                        \end{minipage}%
                        \end{center}%
                        `

                        Mentre per colorare solo l’output puoi scrivere, in questo caso fuori la minipage, altrimenti l’output sfora:

                        `
                        \else
                        \begin{center}%
                        \begin{minipage}{0.45\linewidth}%
                        \hbox to\linewidth{\box\z@\hss}%
                        \end{minipage}%
                        \qquad
                        \colorbox{green}{\begin{minipage}{0.45\linewidth}%
                        \leavevmode \catcode`\^^M=10\relax
                        \input{\jobname.tmp}%
                        \end{minipage}}%
                        \end{center}%
                        \fi%`

                        Ciao

                        Andrea

                      • #10081
                        lorenzo.pantieri
                        Partecipante
                          Up
                          0
                          Down
                          ::


                          Grazie Andrea, funziona tutto alla perfezione!

                          Ciao,
                          Lorenzo

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

                      Go to top