[Risolto] Linee di separazione particolari per codici.

  • Creatore
    Topic
  • #53510
    admin
    Amministratore del forum
      Up
      0
      Down
      ::


      Salve a tutti.
      Devo scrivere alcune righe di codice e voglio separarle dal testo con due linee, una sopra e una sotto.
      Il pacchetto listing, con la semplice opzione frame=lines, permette di farlo.

      Però vorrei una linea tratteggiata con delle forbici, come riportato
      in Gestione di Figure e Tabelle con LaTeX di Luca Caucci e Mariano Spadaccini.

      Ho utilizzato tikz per riprodurla nel seguente modo:
      `\tikz \draw[dashed] node at (1cm,0) [fill=white] {\ding{34}} (0,0)–(\textwidth,0);`
      Il risultato è accettabile.

      Per utilizzarla avevo pensato a qualcosa del genere:
      `\documentclass{book}
      \usepackage{lipsum}
      \usepackage{tikz}
      \usepackage{verbatim}
      \usepackage{pifont}

      \def\linea{%
      \tikz \draw[dashed] node at (1cm,0) [fill=white] {\ding{34}}%
      (0,0)–(\textwidth,0);%
      }

      \newenvironment{codice}{\noindent\linea\verbatim}{\endverbatim\linea}

      \begin{document}
      \lipsum[1]

      \begin{codice}
      Hello from \LaTeX{}.
      \end{codice}
      %\lipsum[1]
      \lipsum[1]
      \end{document}`
      ma il risultato non è dei migliori. Ci sono degli spazi di troppo tra le linee e codice.

      Pertanto vi chiedo qualche altra soluzione (che sicuramente sarà migliore della mia), magari per listings.
      Ho provato a cercare la definizione di frame=lines per modificarla, ma non ci sono riuscito.

      Grazie,
      ansys.

    Visualizzazione 1 filone di risposte
    • Autore
      Risposte
      • #53511
        Up
        0
        Down
        ::

        Salve a tutti.
        Devo scrivere alcune righe di codice e voglio separarle dal testo con due linee, una sopra e una sotto.
        Il pacchetto listing, con la semplice opzione frame=lines, permette di farlo.

        Però vorrei una linea tratteggiata con delle forbici, come riportato
        in Gestione di Figure e Tabelle con LaTeX di Luca Caucci e Mariano Spadaccini.

        Ho utilizzato tikz per riprodurla, nel seguente modo:
        `\tikz \draw[dashed] node at (1cm,0) [fill=white] {\ding{34}} (0,0)–(\textwidth,0);`
        Il risultato è accettabile.

        Per utilizzarla avevo pensato a qualcosa del genere:
        `\documentclass{book}
        \usepackage{lipsum}
        \usepackage{tikz}
        \usepackage{verbatim}
        \usepackage{pifont}

        \def\linea{%
        \tikz \draw[dashed] node at (1cm,0) [fill=white] {\ding{34}}%
        (0,0)–(\textwidth,0);%
        }

        \newenvironment{codice}{\noindent\linea\verbatim}{\endverbatim\linea}

        \begin{document}
        \lipsum[1]

        \begin{codice}
        Hello from \LaTeX{}.
        \end{codice}
        %\lipsum[1]
        \lipsum[1]
        \end{document}`
        ma il risultato non è dei migliori. Ci sono degli spazi di troppo tra le linee e codice.

        Pertanto vi chiedo qualche altra soluzione (che sicuramente sarà migliore della mia), magari per listings.
        Ho provato a cercare la definizione di frame=lines per modificarla, ma non ci sono riuscito.

        È orrendo lo stesso, ma puoi fare così:
        `\newenvironment{codice}
        {\par\medskip\hbox{\linea}\vskip-3ex\verbatim}
        {\endverbatim\vskip-2ex\hbox{\linea}\vskip-1ex\medskip}`
        Ma attento: è possibile che LaTeX ti lasci le forbicine su una pagina e il resto del codice sull’altra. Meglio usare fancyvrb:
        `\usepackage{fancyvrb}
        \makeatletter
        \def\FV@Frame@forbici{%
        \let\FV@BeginListFrame\start@forbici
        \let\FV@LeftListFrame\relax
        \let\FV@RightListFrame\relax
        \let\FV@EndListFrame\finish@forbici}
        \def\start@forbici{\@linea\nobreak}
        \def\finish@forbici{\nobreak\kern1.3ex\nobreak\@linea}

        \newbox\@lineabox % si compone la linea una volta sola
        \sbox\@lineabox{%
        \tikz \draw[dashed] node at (1cm,0) [fill=white] {\ding{34}}%
        (0,0)–(\textwidth,0);}
        \def\@linea{\copy\@lineabox}
        \makeatother

        \begin{document}

        \begin{Verbatim}[frame=forbici]
        Hello from \LaTeX{}.
        \end{Verbatim}
        …`
        Ciao
        Enrico

      • #53512
        admin
        Amministratore del forum
          Up
          0
          Down
          ::

          Meglio usare fancyvrb:
          `\usepackage{fancyvrb}
          \makeatletter
          \def\FV@Frame@forbici{%
          \let\FV@BeginListFrame\start@forbici
          \let\FV@LeftListFrame\relax
          \let\FV@RightListFrame\relax
          \let\FV@EndListFrame\finish@forbici}
          \def\start@forbici{\@linea\nobreak}
          \def\finish@forbici{\nobreak\kern1.3ex\nobreak\@linea}

          \newbox\@lineabox % si compone la linea una volta sola
          \sbox\@lineabox{%
          \tikz \draw[dashed] node at (1cm,0) [fill=white] {\ding{34}}%
          (0,0)–(\textwidth,0);}
          \def\@linea{\copy\@lineabox}
          \makeatother

          \begin{document}

          \begin{Verbatim}[frame=forbici]
          Hello from \LaTeX{}.
          \end{Verbatim}
          …`
          Ciao
          Enrico

          Grazie mille.
          La seconda soluzione (quella di questo messaggio) è certamente migliore delle altre.
          Penso di usarla come soluzione definitiva, mettendo da parte listings.

          Intanto Mariano Spadaccini, che ieri avevo contattato via mail, mi ha fornito il codice di quell’ambiente basato su pstricks (anche perché credo che tikz non fosse ancora nato).

          Grazie mille,
          ansys.

      Visualizzazione 1 filone di risposte
      • Devi essere connesso per rispondere a questo topic.

      Go to top