Inserire codice XHTML in LaTeX

 

Capita a volte di dover scriver documenti LaTeX che contengano stralci di codice dei più diversi linguaggi di programmazione, spesso risolta utile anche un evidenziazione della sintassi nel documento finale prodotto. Per fare questo esistono diverse vie:

  1. inserire il pezzo di codice e formattarlo a mano in modo che rispetti esattamente le impostazioni che vogliamo noi.
  2. appoggiarci a programmi esterni che facciano l'operazione appena descritta per noi.
  3. usare una classe apposita per far fare l'operazione LaTeX

Presuppongo che se siamo qui vogliamo seguire la terza strada l'operazione è abbastanza semplice, si tratta solamente di scaricare il pacchetto listings, per esempio da ctan.org.

Purtroppo tra gli stili presenti non vi è un XHTML, ma solo HTML e produce uno stile che personalmente non gradisco, per questo ho creato uno stile personalizzato. Per attivarlo creare un nuovo file nella cartella di listings e all'interno inserirvi il seguente testo:

\ProvidesFile{lstlang4.sty}
    [2007/09/03 1.3 listings language file]
%%
%% XHTML definition (c) Marco Vito Moscaritolo
%%
%% XHTML definition (c) 2007 Marco Vito Moscaritolo
%%                              <mavimo@gmail.com>
%%
\lst@definelanguage{XHTML}%
  {
   morekeywords=[0]{xml,html,head,body,title,abbr,acronym,address,blockquote,br,cite,code,dfn,div,em,h1,h2,h3,h4,h5,h6,kbd,p,pre,q,samp,span,strong,var,a,dl,dt,dd,ol,ul,li,object,param,b,big,hr,i,small,sub,sup,tt,del,ins,bdo,button,fieldset,form,input,label,legend,select,optgroup,option,textarea,caption,col,colgroup,table,tbody,td,tfoot,th,thead,tr,img,area,map,meta,noscript,script,styleelement,link,base},%
   keywordstyle=[0]\color{blue!80!black!90}\texttt,
   morekeywords=[1]{http-equiv,name,content,version,encoding,xmlns,lang,accesskey,href,id,class,alt,height,href,http-equiv,id,label,lang,longdesc,media,name,onblur,onchange,onclick,ondblclick,onfocus,onkeydown,onkeypress,onkeyup,onload,onmousedown,onmousemove,onmouseout,onmouseover,onmouseup,onselect,onunload,rel,selected,src,standby,style,value,width,xmlns},
   keywordstyle=[1]\color{violet!80}\texttt,
   tag=**[s]<>,%
   morecomment=[s]{<!--}{-->},%
   sensitive=t,%
   showstringspaces=f,
   morestring=[d]",% ??? doubled
   breaklines=t,
   breakatwhitespace=t,
   backgroundcolor=\color{gray!5},
   frame=trbl,
   tabsize=4,% un tab corrisponde a N spazi
   numbers=left,% numero sulla sinistra
   firstnumber=1,% parto a numerare da 1
   commentstyle=\textit,
   stringstyle=\texttt,
   MoreSelectCharTable=%
      \lst@CArgX--\relax\lst@DefDelimB{}{}%
          {\ifnum\lst@mode=\lst@tagmode\else
               \expandafter\@gobblethree
           \fi}%
          \lst@BeginComment\lst@commentmode{{\lst@commentstyle}}%
      \lst@CArgX--\relax\lst@DefDelimE{}{}{}%
          \lst@EndComment\lst@commentmode
  }[keywords,comments,strings,html]% 

All'interno del file listings.cfg presente nella directory del pacchetto installato inserire al posto della riga:{lstlang0.sty,lstlang1.sty,lstlang2.sty,lstlang3.sty}la riga{lstlang0.sty,lstlang1.sty,lstlang2.sty,lstlang3.sty,lstlang4.sty}per avere il pieno supporto al codice XHTML.
L'utilizzo del pacchetto all'interno di un file di LaTeX è banale, inserire nel preambolo del documento le righe:\usepackage{listings}mentre nel documento impostare il linguaggio predefinito a XHTML con il comando\lstset{language=XHTML}Ora ogni qualvolta nel nostro codice inseriamo l'elemento:

\begin{listings}
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/2000/REC-xhtml1-20000126/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="author" content="Marco Vito Moscaritolo" />
<meta name="keywords" content="parole, importanti, presenti, nella, pagina" />
<meta name="description" content="La descrizione di questa pagina" />
<title>Titolo della pagina</title>
</head>
<body>
<h1>Titolo principale</h1>
</body>
</html>
\begin{listings}

questo verrà correttamente evidenziato secondo quanto indicato dalla definizione indicata precedentemente, e le righe verranno numerate per una migliore comprensione. Per eventuali personalizzazioni vi rimando alla documentazione del pacchetto.
La stessa operazione si può fare anche per altri linguaggi, come per esempio il linguaggio Javascript, che spesso viene utilizzato all'interno di file XHTML; il codice da andare a mettere nel file stlang4.sty è:

%%
%% Javascript definition (c) Marco Vito Moscaritolo
%%
%% Javascript definition (c) 2007 Marco Vito Moscaritolo
%%                              <mavimo@gmail.com>
%%
\lst@definelanguage{Javascript}%
{morekeywords=[0]{abstract,boolean,break,byte,case,catch,char,class,%
      const,continue,default,do,double,else,extends,false,final,%
      finally,float,for,goto,if,implements,import,instanceof,int,%
      interface,label,long,native,new,null,package,private,protected,%
      public,return,short,static,super,switch,synchronized,this,throw,%
      throws,transient,true,try,void,volatile,while},%
   sensitive=t,%
   showstringspaces=f,
   morecomment=[l]//,%
   morecomment=[s]{/*}{*/},%
   morestring=[b]",%
   morestring=[b]',%
   breaklines=t,
   breakatwhitespace=t,
   backgroundcolor=\color{gray!5},
   frame=trbl,
   tabsize=4,% un tab corrisponde a N spazi
   numbers=left,% numero sulla sinistra
   firstnumber=1,% parto a numerare da 1
   commentstyle=\textit,
   stringstyle=\texttt,
  }[keywords,comments,strings]%
\endinput
%%
%% End of file `lstlang4.sty'.

mentre il codice viene definito da \lstset{language=Javascript} In allegato trovate il file contenente le definizioni dei due linguaggi indicati pronto per essere utilizzato.

AllegatoDimensione
lstlang4.sty2.96 KB

Altri contenuti che potrebbero interessarti

  • SASS per i CSS con Compass (in ruby)
    Come indicato nell'articolo precedente abbiamo visto la comodità di usare un metalinguaggio per i CSS come SASS. Ovviamente i browser non sono in grado di utilizzare direttamente questi file, ma necessitano di ricevere del codice CSS standard. Questa operazione (NdA:la conversione da SASS a CSS)...
  • Nello sviluppo di siti web è preferibile operare in locale e trasferire il tutto sul server remoto solo una volta che si è ottimizzata la configurazione per lo scopo che ci si è prefissi. Ciò permette di avere una maggior velocità poiché non è necessario operare sul server trasferendo i file ogni...
  • Drupal si occupa esclusivamente della validazione lato server delle informazioni, ma spesso è consigliabile prevedere ad una prima validazione dei dati inseriti dall'utente lato client, in modo da evitare l'invio della richiesta limitando quindi le possibilità di errore. Ovviamente la validazione...
  • SASS per i CSS
    I CSS sono uno degli elementi che nel corso degli anni, nel settore del web, si sono meno evoluti dal pundo ti vista della struttura utilizzata. Nelle corso delle diverse versioni sono state aggiunge solo proprietà e selettori nuovi. Probabilmente penserete: Se non sono cambiati tantomeglio, evito...

Commenti

Ritratto di cnt00

2 consigli

Allora questo articolo è molto utile e non se ne trovano molti in giro.
Vorrei rettificare:

  • Nel primo paragrafo il riferimento a listening deve essere corretto in listings
  • Nell'esempio dell'XHTML l'ultima riga deve essere cambiata
    da \begin{lstlisting} a \end{lstlisting}
  • Bisogna importare xcolor cosi: \usepackage{xcolor} all'inizio del documento
  • LA tecnica consigliata da te a me non funziona ho semplicemente aggiunto il contenuto del file lstlang4.sty
    senza LA PRIMA e L'ULTIMA riga nel file lstlang3.sty

Grazie mille!

Ritratto di mavimo

Allora questo articolo è

Allora questo articolo è molto utile e non se ne trovano molti in giro.

Lo prendo come un complimento, grazie!

o Nel primo paragrafo il riferimento a listening deve essere corretto in listings
o Nell'esempio dell'XHTML l'ultima riga deve essere cambiata

Corretto, grazie per la segnalazione

o Bisogna importare xcolor cosi: \usepackage{xcolor} all'inizio del documento

Solo se voglimo avere la colorazione della sintassi, altrimenti non è necessaria.

o La tecnica consigliata da te a me non funziona ho semplicemente aggiunto il contenuto del file lstlang4.sty senza LA PRIMA e L'ULTIMA riga nel file lstlang3.sty

Che problemi ti da? Che errori ottieni?

Grazie mille!

Grazie a te!

Ritratto di benry

Dopo avere aggiunto

Dopo avere aggiunto lstlang4.sty e modificato listings.cfg bisogna fare un refresh del db di TeX, altrimenti, quando si prova a compilare, non andrà a leggere il nuovo file:

http://theoval.cmp.uea.ac.uk/~nlct/latex/novices/refresh.html

Ritratto di cataclism

problemi con i colori

ciao, questo lavoro che hai fatto fa proprio al caso mio.
Ho però dei problemi nel realizzare il pdf, mi ritorna il seguente errore:

LaTeX Error: Undefined color `blue!80!black!90'

come posso risolvere?

PS: il package color è stato aggiunto

ciao e grazie

Ritratto di mavimo

xcolor

Usa il pacchetto xcolor che ti permette di combinare diverse percentuali di colori (80% blu e 90% nero), il pacchetto color è "obsoleto".

Ritratto di cataclism

grazissime, ora

grazissime, ora funziona.

Approfitto ancora della tua disponibilità per farti un'altra domanda. In realtà io dovrei utilizzarlo per il linguaggio XML, sai se già esiste qualcosa di pronto per listing senza che debba mettermi a prepararlo io? Perchè quello che c'è di default nel pacchetto è un po' osceno ed è senza colori.

Ciao e grazie di tutto

Ritratto di mavimo

No, non conosco altri

No, non conosco altri pacchetti, ma la modifica ti quello originale non dovrebbe essere troppo problematica, partendo dall'originale per attivare a quello che ti occorre sono pochi i punti da modificare (presumo), fai qualche prova, ed eventualmente chiedi cosa non riesci a fare che vedo se posso darti qualche dritta.

Invia nuovo commento





  • Elementi HTML permessi: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img> <h2> <h3> <h4> <table> <thead> <tbody> <tr> <th> <td>
  • You may post code using <code>...</code> (generic) or <?php ... ?> (highlighted PHP) tags.
  • Linee e paragrafi vanno a capo automaticamente.
  • Indirizzi web o e-mail vengono trasformati in link automaticamente

Maggiori informazioni sulle opzioni di formattazione.



Condividi contenuti