comandi per ottenere simboli C++ e C# in latex

  • Creatore
    Topic
  • #21235
    sirol81
    Partecipante
      Up
      0
      Down
      ::


      salve, scrivendo la tesi vorrei poter inserire i nomi dei linguaggi C++ e C# in maniera esteticamente gradevole. Cercando qua e là sono riuscito a trovare un forum in tedesco (che non conosco)
      http://www.informatik-forum.at/archive/index.php/t-33986.html
      dove suggeriscono:
      `
      \documentclass[]{article}
      \usepackage{relsize}

      %c from texinfo.tex
      \def\ifmonospace{\ifdim\fontdimen3\font=0pt }

      %c C plus plus
      \def\C++{%
      \ifmonospace%
      C++%
      \else%
      C\kern-.1667em\raise.30ex\hbox{\smaller{++}}%
      \fi%
      \spacefactor1000 }

      %c C sharp
      \def\Csharp{%
      \ifmonospace%
      C\#%
      \else%
      C\kern-.1667em\raise.30ex\hbox{\smaller{\#}}%
      \fi%
      \spacefactor1000 }
      `

      codice che io ho snellito in
      `
      \def\C++{C\kern-.1667em\raise.30ex\hbox{\smaller{\bfseries++}}\spacefactor1000}
      \def\Csharp{C\kern-.1667em\raise.30ex\hbox{\smaller{\bfseries\#}}\spacefactor1000}
      `
      con risultato tutto sommato soddisfacente, ma volevo sentire la vostra opinione, se avete qualche consiglio per migliorare il risultato.
      Grazie

      =) L

    Visualizzazione 3 filoni di risposte
    • Autore
      Risposte
      • #21236
        Up
        0
        Down
        ::

        salve, scrivendo la tesi vorrei poter inserire i nomi dei linguaggi C++ e C# in maniera esteticamente gradevole. Cercando qua e là sono riuscito a trovare un forum in tedesco (che non conosco)
        http://www.informatik-forum.at/archive/index.php/t-33986.html
        dove suggeriscono:
        `
        \documentclass[]{article}
        \usepackage{relsize}

        %c from texinfo.tex
        \def\ifmonospace{\ifdim\fontdimen3\font=0pt }

        %c C plus plus
        \def\C++{%
        \ifmonospace%
        C++%
        \else%
        C\kern-.1667em\raise.30ex\hbox{\smaller{++}}%
        \fi%
        \spacefactor1000 }

        %c C sharp
        \def\Csharp{%
        \ifmonospace%
        C\#%
        \else%
        C\kern-.1667em\raise.30ex\hbox{\smaller{\#}}%
        \fi%
        \spacefactor1000 }
        `

        codice che io ho snellito in
        `
        \def\C++{C\kern-.1667em\raise.30ex\hbox{\smaller{\bfseries++}}\spacefactor1000}
        \def\Csharp{C\kern-.1667em\raise.30ex\hbox{\smaller{\bfseries\#}}\spacefactor1000}
        `
        con risultato tutto sommato soddisfacente, ma volevo sentire la vostra opinione, se avete qualche consiglio per migliorare il risultato.

        Non userei affatto il nero né quell’avvicinamento né i simboli più piccoli. Ma, contento tu. Certo, se poi usi quei comandi con un font a larghezza fissa dei caratteri ti troverai maluccio.

        Manca uno spazio prima della graffa di chiusura, dopo il 1000. Non metterlo potrebbe provocarti grattate di testa per scoprire dove sia l’inghippo. Prova a scrivere, con la tua definizione, \Csharp 2.0 e spiega dove sta l’arcano.

        Se proprio insisti a non voler scrivere semplicemente C$++$, almeno cambia il nome in \Cpp, usare macro delimitate è pericoloso, se non si sa ciò che si fa.

        Un’altra osservazione: la macro \ifmonospace è definita in modo pericoloso. Infatti inserita dentro un altro condizionale potrebbe avere come conseguenza un errore. Provare per credere. Le soluzioni sono due:
        `\def\ifmonospace#1#2{\ifdim\fontdimen3\font=0pt #1\else#2\fi}`
        e la definizione di \Csharp diventerebbe
        `\def\Csharp{\ifmonospace{C++}{C\kern…}\spacefactor1000 }`
        oppure
        `\def\monospace{TT\fi\ifdim\fontdimen3\font=0pt }`
        e la definizione di \Csharp diventerebbe
        `\def\Csharp{\if\monospace C++\else C\kern…\fi\spacefactor1000 }`
        in modo che il compilatore non si perda i condizionali. In ogni caso, usando LaTeX, sarebbe meglio usare \DeclareRobustCommand (e non si potrebbe usare il nome \C++).

        Ciao
        Enrico

      • #21237
        sirol81
        Partecipante
          Up
          0
          Down
          ::

          Non userei affatto il nero né quell’avvicinamento né i simboli più piccoli. Ma, contento tu. Certo, se poi usi quei comandi con un font a larghezza fissa dei caratteri ti troverai maluccio.

          Quindi tu consigli di ripristinare il costrutto condizionale per il monospace?
          Ti premetto che sono alle prime armi con latex.
          Se vedi costrutti strani, probabilmente è perche li sto provando per imparare e/o non conosco valide alternative.
          Così com’è adesso non va malaccio, però se mi fossi accontentato non sarei qui a chiedere consiglio.
          Proprio perchè non sono convinto della bontà della cosa, mi sono rivolto al forum del GuiT.

          Manca uno spazio prima della graffa di chiusura, dopo il 1000. Non metterlo potrebbe provocarti grattate di testa per scoprire dove sia l’inghippo. Prova a scrivere, con la tua definizione, \Csharp 2.0 e spiega dove sta l’arcano.

          Infatti, se provo si mangia il 2. Con lo spazio finale, rispunta il 2.
          Chissà se in tedesco avvisano di stare attento a quello spazio finale…

          Se proprio insisti a non voler scrivere semplicemente C$++$, almeno cambia il nome in \Cpp, usare macro delimitate è pericoloso, se non si sa ciò che si fa.

          Non avevo trovato da nessuna parte il suggerimento di usare C$++$. L’ho provato adesso, ma i segni positivi “scendono” sotto la linea di scrittura, che è ciò che vorrei migliorare.
          Il nome l’ho cambiato in \Cplusplus.

          Un’altra osservazione: la macro \ifmonospace è definita in modo pericoloso. Infatti inserita dentro un altro condizionale potrebbe avere come conseguenza un errore. Provare per credere. Le soluzioni sono due:
          `\def\ifmonospace#1#2{\ifdim\fontdimen3\font=0pt #1\else#2\fi}`
          e la definizione di \Csharp diventerebbe
          `\def\Csharp{\ifmonospace{C++}{C\kern…}\spacefactor1000 }`
          oppure
          `\def\monospace{TT\fi\ifdim\fontdimen3\font=0pt }`
          e la definizione di \Csharp diventerebbe
          `\def\Csharp{\if\monospace C++\else C\kern…\fi\spacefactor1000 }`
          in modo che il compilatore non si perda i condizionali. In ogni caso, usando LaTeX, sarebbe meglio usare \DeclareRobustCommand (e non si potrebbe usare il nome \C++).

          Ciao
          Enrico

          credo che implementero la tua prima versione.
          Volendo dichiararli come comandi robusti, come è meglio procedere?

          Grazie
          =) L

        • #21238
          Up
          0
          Down
          ::

          Non userei affatto il nero né quell’avvicinamento né i simboli più piccoli. Ma, contento tu. Certo, se poi usi quei comandi con un font a larghezza fissa dei caratteri ti troverai maluccio.

          Quindi tu consigli di ripristinare il costrutto condizionale per il monospace?
          Ti premetto che sono alle prime armi con latex.

          Se non lo usi in ambiente con font a spaziatura fissa, non è importante.

          Manca uno spazio prima della graffa di chiusura, dopo il 1000. Non metterlo potrebbe provocarti grattate di testa per scoprire dove sia l’inghippo. Prova a scrivere, con la tua definizione, \Csharp 2.0 e spiega dove sta l’arcano.

          Infatti, se provo si mangia il 2. Con lo spazio finale, rispunta il 2.
          Chissà se in tedesco avvisano di stare attento a quello spazio finale…

          In quelle macro lo mettevano. 😉

          Se proprio insisti a non voler scrivere semplicemente C$++$, almeno cambia il nome in \Cpp, usare macro delimitate è pericoloso, se non si sa ciò che si fa.

          Non avevo trovato da nessuna parte il suggerimento di usare C$++$. L’ho provato adesso, ma i segni positivi “scendono” sotto la linea di scrittura, che è ciò che vorrei migliorare.
          Il nome l’ho cambiato in \Cplusplus.

          `\DeclareRobustCommand{\Cplusplus}{C%
          \ifdim\fontdimen3\font=0pt
          ++%
          \else
          \raisebox{.2ex}{$++$}%
          \fi\spacefactor1000 }
          \DeclareRobustCommand{\Csharp}{C%
          \ifdim\fontdimen3\font=0pt
          \#%
          \else
          \raisebox{.2ex}{\#}%
          \fi\spacefactor1000 }`
          Ciao
          Enrico

        • #21239
          sirol81
          Partecipante
            Up
            0
            Down
            ::


            Ti ringrazio.
            Almeno adesso sò che ho dei comandi fatti per bene, oserei dire “col bollino di qualità” by egreg9 – GuiT 😆

            =) L

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

        Go to top