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

#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

Go to top