Prova in questo modo, di più non posso fare:
Ciao Andrea, quest’ultima versione dell’ambiente è un nettissimo miglioramento, adesso ci siamo quasi! Per la perfezione, mancherebbero:
1. Il supporto alle impostazioni di default di listings da parte di ClassicThesis, che sono riportate nel preambolo:
`\lstset{language=[LaTeX]Tex,%C++,
keywordstyle=\color{RoyalBlue},%\bfseries,
basicstyle=\small\ttfamily,
%identifierstyle=\color{NavyBlue},
commentstyle=\color{Green}\ttfamily,
stringstyle=\rmfamily,
numbers=none,%left,%
numberstyle=\scriptsize,%\tiny
stepnumber=5,
numbersep=8pt,
showstringspaces=false,
breaklines=true,
frameround=ftff,
frame=single
%frame=L
} `
Per ora, le ho semplicemente copiate nella definizione del tuo ambiente, ma forse c’è qualcosa di più elegante (che permetta di far sì che eventuali modifiche delle impostazioni del preambolo si riflettano immediatamente sull’ambiente, senza fare la modifica due volte)2. Nella definizione del tuo ambiente, il pacchetto listings deve essere chiamato con l’opzione writefile. Purtroppo ClassicThesis richiama di suo listings senza questa opzione, e se si aggiunge semplicemente nel preambolo
`\usepackage[writefile]{listings}`
c’è un errore in compilazione:
`! LaTeX Error: Option clash for package listings.`
Ovviamente si può rimediare modificando il file originale classicthesis-ldpkg.sty, ma modificare “a mano” i file originali .sty dei pacchetti non è mai una buona prassi. Esistono soluzioni più ortodosse?3. Il codice LaTeX non viene distribuito benissimo nel suo riquadro, in particolare ci sono (piccole) indentazioni extra che non dovrebbero esserci. Sapresti come rimediare?
4. Sapresti suggerirmi come modificare il tuo ambiente per inserire un riquadro anche nel typeset? Infatti, come ti dicevo, non so se sia eventualmente più logico riquadrare il typeset, per distinguerlo dal resto del testo, piuttosto che riquadrare il codice LaTeX, che è già distinguibile dal resto del testo perché p scritto con un font diverso. O riquadrarli tutti e due? Mah… sono davvero incerto e in attesa di illuminanti suggerimenti tipografici! 💡
Grazie mille, non ce la farei mai da solo!
L.
per togliere l’indentazione devi aggiungere breakindent=0pt dopo breaklines=true, in pratica così a me va:
`\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{language={},style={},basewidth=0.51em,breaklines=true,%
linewidth=0.45\linewidth, frame=single, breakindent=0pt,boxpos=t,%
basicstyle=\small\ttfamily
} %
….`
se vuoi allineare tutto in alto puoi mettere
`
\begin{minipage}[t]{0.45\linewidth}`
al posto delle due
`
\begin{minipage}{0.45\linewidth}`
se vuoi un frame globale prova così
`\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{language={},style={},basewidth=0.51em,breaklines=true,%
linewidth=0.45\linewidth, frame=single, breakindent=0pt,boxpos=t,%
basicstyle=\small\ttfamily
} %
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\begin{center}%
\framebox{\begin{minipage}[t]{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\qquad
\begin{minipage}[t]{0.45\linewidth}%
\leavevmode \catcode`\^^M=10\relax
\small\input{\jobname.tmp}%
\end{minipage}}%
\end{center}%
}
\makeatother`
naturalmente per togliere il frame al codice togli frame=single.
Io sceglierei di riquadrare solo il codice, secondo me è la soluzione migliore, cioè
`
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{language={},style={},basewidth=0.51em,breaklines=true,%
linewidth=0.45\linewidth, frame=single, breakindent=0pt,boxpos=t,%
basicstyle=\small\ttfamily
} %
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\begin{center}%
\begin{minipage}[t]{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\qquad
\begin{minipage}[t]{0.45\linewidth}%
\leavevmode \catcode`\^^M=10\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\end{center}%
}
\makeatother`
Per quanto riguarda passare le opzioni di listings a classicthesis non so come farlo. Magari il prof conosce qualche comando specifico tipo PassOption che si vede in molti pacchetti e che faccia una cosa simile.
Ciao
Andrea