- Questo topic ha 50 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 18 anni, 5 mesi fa da
lorenzo.pantieri.
-
CreatoreTopic
-
17 Novembre 2007 alle 22:56 #18900::
Ciao a tutti. In questo topic Andrea mi aveva suggerito un ambiente per riportare del codice LaTeX con a fianco il corrispondente typeset. Riporto per comodità un esempio “abbastanza minimale”:
`\documentclass[10pt,a4paper,twoside,openright,titlepage,fleqn,
cleardoubleempty,abstractoff,pointlessnumbers,
headinclude,footinclude,BCOR5mm]{scrreprt}\usepackage[writefile]{listings}
\usepackage{classicthesis-ldpkg}
\usepackage[eulerchapternumbers,subfig,beramono,
eulermath,pdfspacing]{classicthesis}
\usepackage{lipsum}\lstset{frame=lines}
\lstset{basicstyle=\normalfont\ttfamily}
\lstset{flexiblecolumns=true}
\lstset{moredelim={[is][\normalfont\itshape]{/*}{*/}}}\lstnewenvironment{codice}%
{\lstset{basicstyle=\small\ttfamily}%
}{}\lstset{extendedchars}
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{columns=fullflexible,%
linewidth=0.45\linewidth,
breaklines=true,%
breakindent=0pt,%
boxpos=t,%
basicstyle=\small\ttfamily
}%
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\begin{center}%
\begin{minipage}{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\qquad
\begin{minipage}{0.45\linewidth}%
\leavevmode \catcode`\^^M=10\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\end{center}%
}
\makeatother\begin{document}
\lipsum[1]\begin{sidebyside}
Ci sono voluti secoli per dimostrare che quando $n>2$
\emph{non} ci sono tre interi positivi $a$, $b$, $c$ tali che $a^n+b^n=c^n$.
\end{sidebyside}\lipsum[2]
\begin{sidebyside}
\begin{multline}
f=a+b+c+ \\
+d+e+g+h+\\
+r+s+t
\end{multline}
\end{sidebyside}\lipsum[3]
\end{document}
`
L’ambiente funziona piuttosto bene, ma c’è da limare qualcosa.1. Vorrei che la parte con il codice LaTeX fosse perfettamente a filo del margine sinistro (ora è leggermente rientrata a destra), e che il typeset fosse perfettamente a filo del margine destro (ora è leggermente rientrata a sinistra).
2. Visto che strano il problema con multline? Il sorgente e il typeset vengono messi uno sopra l’altro, anziché di fianco. Ancora, il typeset di multline non è perfetto: la seconda riga non è centrata come dovrebbe. Per il resto, l’ambiente funziona benissimo, l’ho provato nelle situazioni più disparate, sempre con risultati impeccabili.
Grazie anticipate, l’ambiente mi sta molto a cuore ed è fondamentale per la guida che sto scrivendo…
Ciao,
L.
-
CreatoreTopic
-
AutoreRisposte
-
-
18 Novembre 2007 alle 1:15 #18901::
Lorenzo,
se metti \hfill anche l’esempio con multline va apposto.Comunque per avere quello che cerchi prova così:
`
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{columns=fullflexible,%
linewidth=0.45\linewidth,
breaklines=true,%
breakindent=0pt,%
boxpos=t,%
basicstyle=\small\ttfamily
}%
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\medskip\noindent%
\begin{minipage}{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\hfill
\begin{minipage}{0.45\linewidth}%
\leavevmode \catcode`\^^M=10\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\medskip%
}
\makeatother
`Se ritieni che lo spazio sotto e sopra sia poco, sostituisci \medskip con \bigskip.
C’è ancora un piccolo problemino con li ambienti matematici perché il numero non lo mette alla fine, come puoi vedere ma dipende dal fatto che la minipage è larga 0.45\linewidth. Comunque, credo che ci si può accontentare.Ciao
Andrea
-
19 Novembre 2007 alle 16:51 #18902::
Ciao Andrea, innanzitutto ti mando un ringraziamento gigante! Da solo, non riuscirei mai a venire a capo della faccenda…1. Il problema con multline è risolto.
2. Il codice che mi hai dato funziona (!!!), con un unico inconveniente: non puoi attaccare l’ambiente sidebyside ad un paragrafo, ma devi separarlo dal resto con linee bianche. Il seguente
`Parole parole parole.
\begin{sidebyside}
…
\end{sidebyside}
Parole parole parole.`
dà in output un pasticcio, mentre il
`Parole parole parole.\begin{sidebyside}
…
\end{sidebyside}Parole parole parole.`
è ok. La cosa strana è che l’ambiente di prima non aveva questo inconveniente… 😥Se riesci a trovare una soluzione a questo inghippo… 🙄
Un salutone,
L.
-
20 Novembre 2007 alle 11:43 #18903::
Scusa il ritardo ma sono un po’ impegnato!Prova così
`
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{columns=fullflexible,%
linewidth=0.45\linewidth,
breaklines=true,%
breakindent=0pt,%
boxpos=t,%
basicstyle=\small\ttfamily
}%
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\par\medskip\noindent%
\begin{minipage}{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\hfill
\begin{minipage}{0.45\linewidth}%
\leavevmode \catcode`\^^M=10\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\par\medskip%
}
\makeatother`oppure questo:
`
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{columns=fullflexible,%
linewidth=0.45\linewidth,
breaklines=true,%
breakindent=0pt,%
boxpos=t,%
basicstyle=\small\ttfamily
}%
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\begin{flushleft}%
\begin{minipage}{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\hfill
\begin{minipage}{0.45\linewidth}
\leavevmode\catcode`\^^M=10\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\end{flushleft}%
}
\makeatother`Ciao
Andrea
-
21 Novembre 2007 alle 11:29 #18904
-
29 Novembre 2007 alle 17:09 #18905::
Rieccomi!Ho trovato un altro problemino con l’ambiente sidebyside (che alla fine mi sono deciso ad usare nella prima forma, quella col minuscolo rientro, che secondo me ci sta bene).
Nel codice, gli spazi bianchi sembrano non avere effetto! Eppure a me piacerebbe incolonnare (anche visivamente) alcuni simboli nel codice. Il typeset invece è perfetto. Ecco un esempio (per comodità, riporto tutto un documento compilabile).
`\documentclass[10pt,a4paper,twoside,openright,titlepage,
cleardoubleempty,abstractoff,pointlessnumbers,
headinclude,footinclude,BCOR5mm]{scrreprt}\usepackage[writefile]{listings}
\usepackage{classicthesis-ldpkg}
\usepackage[eulerchapternumbers,subfig,beramono,
eulermath,pdfspacing]{classicthesis}
\usepackage{lipsum}\lstset{frame=lines}
\lstset{basicstyle=\normalfont\ttfamily}
\lstset{flexiblecolumns=true}
\lstset{moredelim={[is][\normalfont\itshape]{/*}{*/}}}\lstnewenvironment{codice}%
{\lstset{basicstyle=\small\ttfamily}%
}{}\lstset{extendedchars}
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{columns=fullflexible,%
linewidth=0.45\linewidth,
breaklines=true,%
breakindent=0pt,%
boxpos=t,%
basicstyle=\small\ttfamily
}%
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\begin{center}%
\begin{minipage}{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\qquad
\begin{minipage}{0.45\linewidth}%
\leavevmode \catcode`\^^M=10\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\end{center}%
}
\makeatother\begin{document}
\begin{sidebyside}
\begin{align}
a_1 &= b_1+c_1+d_1, \\
a_2 &= b_2, \notag \\
a_3-1 &= b_3+c_3.
\end{align}
\end{sidebyside}\end{document}`
Non riesco ad allineare i vari & nell’ambiente align, posso aggiungere spazi a volontà, ma non succede niente…C’è una cura?
Grazie,
L.
-
29 Novembre 2007 alle 17:25 #18906::
Rieccomi!
Ho trovato un altro problemino con l’ambiente sidebyside (che alla fine mi sono deciso ad usare nella prima forma, quella col minuscolo rientro, che secondo me ci sta bene).
Nel codice, gli spazi bianchi sembrano non avere effetto! Eppure a me piacerebbe incolonnare (anche visivamente) alcuni simboli nel codice. Il typeset invece è perfetto. Ecco un esempio (per comodità, riporto tutto un documento compilabile).
`…`
Non riesco ad allineare i vari & nell’ambiente align, posso aggiungere spazi a volontà, ma non succede niente…C’è una cura?
Suppongo ci voglia qualche opzione per listings. Il file sideside.tmp viene scritto con tutti gli spazi che inserisci; se listings non li rispetta, non saprei che altro farci.
Ciao
Enrico
-
29 Novembre 2007 alle 18:05 #18907::
keepspaces=true,`\lstset{extendedchars}
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{columns=fullflexible,%
linewidth=0.45\linewidth,keepspaces=true,
breaklines=true,%
breakindent=0pt,%
boxpos=t,%
basicstyle=\small\ttfamily
}%
…..`Ciao
Andrea
-
29 Novembre 2007 alle 18:11 #18908
-
1 Dicembre 2007 alle 15:24 #18909::
Ciao, purtroppo è saltato fuori un altro problema con l’ambiente sidebyside. 😥 Vorrei fare un esempio di bibliografia con l’ambiente thebibliography, ma purtroppo sembra che il comando \bibitem sia indigesto a sidebyside. Riporto l’esempio completo con i codici che mi interessano.
`\documentclass[10pt,a4paper,twoside,openright,titlepage,
cleardoubleempty,abstractoff,pointlessnumbers,
headinclude,footinclude,BCOR5mm]{scrreprt}\usepackage[italian]{babel}
\usepackage[writefile]{listings}
\usepackage{classicthesis-ldpkg}
\usepackage[eulerchapternumbers,subfig,beramono,
eulermath,pdfspacing]{classicthesis}
\usepackage{minitoc}\lstset{frame=lines}
\lstset{basicstyle=\normalfont\ttfamily}
\lstset{flexiblecolumns=true}
\lstset{moredelim={[is][\normalfont\itshape]{/*}{*/}}}\lstnewenvironment{codice}%
{\lstset{basicstyle=\small\ttfamily}%
}{}\lstset{extendedchars}
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{columns=fullflexible,%
linewidth=0.45\linewidth,keepspaces=true,%
breaklines=true,%
breakindent=0pt,%
boxpos=t,%
basicstyle=\small\ttfamily
}%
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\begin{center}%
\begin{minipage}{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\qquad
\begin{minipage}{0.45\linewidth}%
\leavevmode \catcode`\^^M=10\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\end{center}%
}
\makeatother\begin{document}
\dominitoc\tableofcontents\myChapter{La bibliografia}
\minitoc\section{Prova}
\begin{sidebyside}
\begin{thebibliography}{9}
\bibitem{lamport:latex}
Leslie Lamport.
\emph{\LaTeX: a document preparation system}.
Addison-Wesley, 1994.
\bibitem{companion}
Michel Goossens,
Frank Mittelbach,
and Alexander Samarin.
\emph{The \LaTeX\ Companion}.
Addison-Wesley, 1994.
\end{thebibliography}
\end{sidebyside}\begin{sidebyside}
\bibitem[Lamport 94]{lamport-latex} Leslie Lamport, …
\end{sidebyside}\end{document}`
In compilazione c’è addirittura un errore di sintassi…Se provo a ridefinire \bibitem come \item la bibliografia almeno viene generata, anche se naturalmente non nel formato corretto: resta però anche un’incompatibilità con minitoc.
Mi andrebbe bene anche una soluzione “spiccia e sporca” (purché funzionante): gli esempi bibliografici sono solo quei due, e \bibitem non lo uso più per tutta la guida.
Grazie di cuore,
L.
-
1 Dicembre 2007 alle 15:58 #18910::
Ciao, purtroppo è saltato fuori un altro problema con l’ambiente sidebyside. 😥 Vorrei fare un esempio di bibliografia con l’ambiente thebibliography, ma purtroppo sembra che il comando \bibitem sia indigesto a sidebyside. Riporto l’esempio completo con i codici che mi interessano.
…
In compilazione c’è addirittura un errore di sintassi…
Se provo a ridefinire \bibitem come \item la bibliografia almeno viene generata, anche se naturalmente non nel formato corretto: resta però anche un’incompatibilità con minitoc.
Mi andrebbe bene anche una soluzione “spiccia e sporca” (purché funzionante): gli esempi bibliografici sono solo quei due, e \bibitem non lo uso più per tutta la guida.
Il problema è creato dal pacchetto backref, che impone, da qualche parte ci sarà pure scritto, che ogni \bibitem sia seguito da una riga vuota:
`\begin{thebibliography}{1}
\bibitem{a} testo\bibitem{b} testo
\end{thebibliography}`
Questo perché ridefinisce \bibitem in termini di \BR@@bibitem che ha la definizione
`\def\BR@@bibitem #1#2\par{…}`
Dunque il secondo argomento è delimitato da \par. Ovviamente questo non basta e occorre anche modificare quel comando
`\catcode`\^^M=10\relax`
in un più onesto
`\catcode`\^^M=5\relax`
Naturalmente, scrivere \bibitem fuori da un ambiente thebibliography dà errore sempre.Ciao
Enrico
-
1 Dicembre 2007 alle 16:12 #18911::
Questo perché ridefinisce \bibitem in termini di \BR@@bibitem che ha la definizione
`\def\BR@@bibitem #1#2\par{…}`
Dunque il secondo argomento è delimitato da \par. Ovviamente questo non basta e occorre anche modificare quel comando
`\catcode`\^^M=10\relax`
in un più onesto
`\catcode`\^^M=5\relax`Enrico, ora funziona tutto in maniera spettacolare. 😀
Mi resta la curiosità di capire che cosa fa quel (per me) ermetico
`\catcode`\^^M=5\relax`
e quali sono i cambiamenti ora che ho messo 5 al posto di 10.Grazie infinite,
L.
-
1 Dicembre 2007 alle 16:28 #18912::
Questo perché ridefinisce \bibitem in termini di \BR@@bibitem che ha la definizione
`\def\BR@@bibitem #1#2\par{…}`
Dunque il secondo argomento è delimitato da \par. Ovviamente questo non basta e occorre anche modificare quel comando
`\catcode`\^^M=10\relax`
in un più onesto
`\catcode`\^^M=5\relax`Enrico, ora funziona tutto in maniera spettacolare. 😀
Mi resta la curiosità di capire che cosa fa quel (per me) ermetico
`\catcode`\^^M=5\relax`
e quali sono i cambiamenti ora che ho messo 5 al posto di 10.Non è affatto ermetico; basta leggere l’aureo articolo su ArsTeXnica che parla appunto dei codici di categoria. 🙂
^^M indica il carattere di fine riga che TeX inserisce quando legge un file; siccome ogni sistema operativo ha il suo modo di fare, Knuth ha deciso che, una volta trovata la fine riga (secondo quanto stabilito dal SO), tutto ciò che la indica viene scartato e sostituito con un carattere fisso (quello di numero \endlinechar, usualmente 13).
Questo carattere ha, normalmente, codice di categoria 5. Quando TeX ne vede due consecutivi, li sostituisce con un token \par, altrimenti questo carattere diventa equivalente a un token di categoria 10 (spazio).
Mi dirai, ma se io su una riga batto due spazi e poi il ritorno a capo, come fa TeX a trovare due fine riga consecutivi? Risposta: gli spazi a inizio riga sono del tutto ignorati. Così si può far rientrare il codice come ci pare, senza preoccuparci di spazi spuri che, invece, possono comparire a fine riga.
Una definizione come \def\xxx#1\par{…} delimita l’argomento con il token \par; ma le due chiamate
`\xxx aaa\par
\xxx aaa
`
sono del tutto equivalenti.Ciao
Enrico
-
1 Dicembre 2007 alle 16:33 #18913
-
12 Dicembre 2007 alle 19:04 #18914::
Riprendo il topic per segnalare un altro problemino con l’ambiente sidebyside, che uso nell’ultima versione riportata nel topic. (A proposito: sto usando l’iambiente in lungo e in largo e non potrei farne a meno, non sarebbe male farci un pacchetto).I problemini sono questi:
`\begin{sidebyside}
Non ha importanza se
immetti uno o tanti spazi
dopo una parola.Una riga vuota fa iniziare un nuovo
paragrafo.
\end{sidebyside}
`
Nel typeset (nonostante nel mio documento sia caricato il pacchetto indentfirst) i due capoversi non sono rientrati. Come si può rimediare?Grazie,
L.
-
12 Dicembre 2007 alle 19:58 #18915::
Non è possibile correggere il problema, a meno che il prof non trovi un rimedio, perché il tutto è dovuto alla minipage.Prova a compilare questo codice:
`
\begin{minipage}{\linewidth}
Non ha importanza se immetti uno o tanti dopo una parola.\par Una riga vuota fa iniziare un nuovo paragrafo.
\end{minipage}%`il problema è minipage.
Ciao
Andrea
-
25 Dicembre 2007 alle 8:02 #18916::
Carissimi, che c’è di meglio che trascorrere il giorno di Natale meditando sui misteri di LaTeX? 😉`\begin{sidebyside}
\{ \} \!?%?! \$ \^{} \_ \& \# \~{}
\end{sidebyside}`
Questo codice viene compilato perfettamente, ma se si tolgono le due graffe {} dopo la tilde, c’è un errore! In altre parole:
`\begin{sidebyside}
\~
\end{sidebyside}`
non funziona.
`! File ended while scanning use of \T1\~.`
Un problema c’è anche con
`\begin{sidebyside}
\^
\end{sidebyside}`
che non viene composto bene. Se si scrive
`\begin{sidebyside}
\~{} \ˆ{}
\end{sidebyside}`
tutto funziona alla grande, invece.È normale? Ci sono rimedi?
Grazie mille e ancora buon Natale,
L.
-
25 Dicembre 2007 alle 11:22 #18917::
Carissimi, che c’è di meglio che trascorrere il giorno di Natale meditando sui misteri di LaTeX? 😉
`\begin{sidebyside}
\{ \} \!?%?! \$ \^{} \_ \& \# \~{}
\end{sidebyside}`
Questo codice viene compilato perfettamente, ma se si tolgono le due graffe {} dopo la tilde, c’è un errore! In altre parole:
`\begin{sidebyside}
\~
\end{sidebyside}`
non funziona.
`! File ended while scanning use of \T1\~.`
Un problema c’è anche con
`\begin{sidebyside}
\^
\end{sidebyside}`
che non viene composto bene. Se si scrive
`\begin{sidebyside}
\~{} \ˆ{}
\end{sidebyside}`
tutto funziona alla grande, invece.È normale? Ci sono rimedi?
Solo perché a Natale si è tutti più buoni.
Non hai pensato che \~ e \^ sono comandi per gli accenti che richiedono un argomento?
Ciao
Enrico
-
25 Dicembre 2007 alle 20:25 #18918::
Solo perché a Natale si è tutti più buoni.
Non hai pensato che \~ e \^ sono comandi per gli accenti che richiedono un argomento?
Che sciocco che sono! In effetti sono stato tratto in inganno dalla Mica tanto breve intro, che dopo aver presentato i simboli speciali (fra cui tilde e cappuccio) dice:
questi caratteri possono essere usati nei vostri
documenti tutti allo stesso modo facendoli precedere da un backslash:Ne concludo che non è un caso, quelle parentesi graffe ci vogliono:
`\~{} \^{}
`
Grazie, perfetto come sempre!Ciao,
L.
-
6 Gennaio 2008 alle 12:09 #18919::
Carissimi, vi segnalo questo aspetto, che mi ricorda il paradosso degli insiemi normali.L’ambiente sidebyside è costruito con listings: nel codice (a sinistra) ci sono due righe, in alto e in basso, che delimitano il codice. A destra c’è il corrispondente typeset, senza righe.
Il “problema” si presenta quando si usa l’ambiente sidebyside per… spiegare lo stesso listings!
`\begin{sidebyside}
\begin{lstlisting}
Nell'ambiente lstlisting i
comandi \LaTeX{} e i caratteri
speciali (\{}!?%?!$_&#^~)
non vengono interpretati.
\end{lstlisting}
\end{sidebyside}`
Questa volta compaiono delle righe anche nel typeset, e quelle righe non ci andrebbero.Non pretendo che qualcuno di voi si sbatta per trovare una soluzione, ci mancherebbe!
Tuttavia, io quelle righe nel typeset non le voglio: alla disperata, ritaglierò il risultato, lo modifcherò con un programma di grafica vettoriale e includerò l’immagine taroccata con \includegraphics…
Un problema più serio è invece il rientro. È vero, minipage disabilita i rientri, ma non tutti! Per esempio se si inserisce un ambiente abstract, il testo del sommario viene rientrato eccome! Mi sembra strano che non esista una soluzione, il rientro ci vorrebbe proprio. Per esempio per mostrare il funzionamento di indentfirst…
Grazie mille,
L.
-
6 Gennaio 2008 alle 14:47 #18920::
Metto tutto in un unico messaggio.
Io toglierei i colori alle keyword e ai commenti.
L’ambiente minipage annulla \parindent, così l’ho ripristinato.
`
\newlength{\mnparindent}\setlength\mnparindent{\parindent}%%%%%%%%%%
….
….
}{%
\lst@EndWriteFile\egroup
\begin{center}%
\begin{minipage}{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\qquad% o \hfil
\begin{minipage}{0.45\linewidth}
\setlength\parindent{\mnparindent}%%%%%%%%%%%%%%%%%
\setkeys{lst}{frame=none,keywordstyle=\normalcolor,%%%%%%%%
commentstyle=\normalcolor\ttfamily}%%%%%%%%%%%%%%%%
% oppure lstset al psto di \setkeys{lst}
\leavevmode\catcode`\^^M=5\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\end{center}%
}
\makeatother`i commenti %%%%%% indicano le modifiche
CiaoAndrea
-
6 Gennaio 2008 alle 15:18 #18921
-
28 Gennaio 2008 alle 17:25 #18922::
Ecco un altro problemino. Se scrivo
`\begin{sidebyside}
È possibile mettere tutta
un'espressione\index{tutta
un'espressione} nell’indice analitico.
\end{sidebyside}
`
la voce “tutta un’espressione” viene naturalmente scritta nell’indice analitico. Vorrei evitarlo. Mi è venuta l’idea di ridefinire temporaneamente \index, annullandolo:
`\let\oldindex\index
\let\index\relax
`
e poi ripristinandolo con
`\let\index\oldindex
`
Va bene? C’è qualche possibile effetto collaterale?Grazie mille,
L.
-
28 Gennaio 2008 alle 17:49 #18923::
Ecco un altro problemino. Se scrivo
`\begin{sidebyside}
È possibile mettere tutta
un'espressione\index{tutta
un'espressione} nell’indice analitico.
\end{sidebyside}
`
la voce “tutta un’espressione” viene naturalmente scritta nell’indice analitico. Vorrei evitarlo. Mi è venuta l’idea di ridefinire temporaneamente \index, annullandolo:
`\let\oldindex\index
\let\index\relax
`
e poi ripristinandolo con
`\let\index\oldindex
`
Va bene? C’è qualche possibile effetto collaterale?`\begingroup\renewcommand\index[1]{}\begin{sidebyside}
È possibile mettere tutta
un'espressione\index{tutta
un'espressione} nell’indice analitico.
\end{sidebyside}\endgroup`
Altrimenti avrai qualche problemino, non trovi? Non c’è bisogno di ripristinare nulla se metti la ridefinizione nel gruppo. Non uso {…} perché \begingroup…\endgroup non modifica il modo (orizzontale, verticale o matematico), le graffe potrebbero invece avere effetti imprevisti a causa dell’ambiente sidebyside.Ciao
Enrico
-
28 Gennaio 2008 alle 18:44 #18924
-
25 Febbraio 2008 alle 14:04 #18925::
Ciao a tutti, ecco un’altra cosa che vorrei fare con questo preziosissimo ambiente. Vorrei illustrare come si inserisce un’immagine in LaTeX.Se carico il pacchetto float, nessun problema:
`…Qui finisce un capoverso.\begin{figure}[H]
…
\caption{…}
\label{fig:esempio}
\end{figure}Qui comincia un nuovo capoverso. Vedi la figura~\ref{fig:esempio}.
`
Se non carico il pacchetto float e uso un normale posizionamento [tb]:
`…Qui finisce un capoverso.\begin{figure}[tb]
…
\caption{…}
\label{fig:esempio}
\end{figure}Qui comincia un nuovo capoverso. Vedi la figura~\ref{fig:esempio}.
`
C’e’ modo di risolvere la cosa? Anche una soluzione spiccia e sporca andrebbe benissimo…Grazie mille,
L.[OT]
Mi scuso per la mancanza degli accenti e per il fatto che potro’ rispodere solo nei prossimo giorni, ma in Romania gli Internet Point sono una rarita’, e le tastiere sono scombinate.
[OT]
-
26 Febbraio 2008 alle 15:07 #18926::
Onestamente non saprei cosa fare. il motivo è che non si può mettere un ambiente float dentro una minipage. Nel caso di posizionamento H il pacchetto float tratta l’oggetto “flottante” come se fosse una minipage e quindi non dà errore. Nel caso di tb ma anche di h dà errore dovuto al motivo che ti ho testé detto.Ma comunque non avrebbe senso mettere una fugura in quel modo. Io se fossi in te metterei il codice in un normale ambiente
`
\begin{lstlisting}
qui finisce un capoverso.\begin{figure}[tb]
…
\caption{….}
\label{fig:esempio}
\end{figure}Qui comincia un nuovo capoverso. Vedi la figura~\ref{fig:esempio}.
\end{lstlisting}`e poi subito dopo scrivere una cosa tipo
`
il risultato è il seguente
\vspace{\topsep}\noindent
qui finisce un capoverso.\begin{figure}[tb]
…
\caption{…}
\label{fig:esempio}
\end{figure}Qui comincia un nuovo capoverso. Vedi la figura~\ref{fig:esempio}.
\vspace{\topsep}
Si può notare che la figura~\ref{fig:esempio} è in alto. Comunque \LaTeX\ avrebbe potuto metterla anche in basso.
`Magari tra i due \vspace potresti mettere qualche rullo con \hrule o definirti un ambiente ad hoc.
Mi dispiace ma penso che non ci siano vie di uscita.
Se vuoi posso provare a creare un uovo ambiente dove l’output è diverso e indipendente dall’input che dai dentro l’ambiente. Così a sinistra hai questo codice
`
qui finisce un capoverso.\begin{figure}[tb]
…
\caption{…}
\label{fig:esempio}
\end{figure}Qui comincia un nuovo capoverso. Vedi la figura~\ref{fig:esempio}.`
e a destra
`
qui finisce un capoverso.
__Qui comincia un nuovo capoverso. Vedi la figura~\ref{fig:esempio}`
cioè le due righe con la figura in alto.Fammi sapere e Buon Lavoro.
Ciao
Andrea
-
28 Febbraio 2008 alle 13:32 #18927
-
23 Marzo 2008 alle 9:21 #18928::
Ciao, ho bisogno di un “gioco di prestigio”.
`\begin{sidebyside}
\begin{figure}[H]
\centering
\includegraphics[width=%
0.5\textwidth]{Immagine}
\caption{Didascalia lunga}
\label{fig:float}
\end{figure}
\end{sidebyside}
`
Ecco, io vorrei che nell’elenco delle figure ci andasse una “didascalia corta” al posto di quella lunga, senza però modificare il codice che ho appena scritto.Quindi ci vorrebbe un trucco prima e/o dopo sidebyside per avere
`\caption[Didascalia corta]{Didascalia lunga}`
senza farlo vedere a che legge (della serie: scientia est celare scientiam).Chissà se si può fare…
Grazie,
L.
-
23 Marzo 2008 alle 10:29 #18929::
Ciao, ho bisogno di un “gioco di prestigio”.
`\begin{sidebyside}
\begin{figure}[H]
\centering
\includegraphics[width=%
0.5\textwidth]{Immagine}
\caption{Didascalia lunga}
\label{fig:float}
\end{figure}
\end{sidebyside}
`
Ecco, io vorrei che nell’elenco delle figure ci andasse una “didascalia corta” al posto di quella lunga, senza però modificare il codice che ho appena scritto.Quindi ci vorrebbe un trucco prima e/o dopo sidebyside per avere
`\caption[Didascalia corta]{Didascalia lunga}`
senza farlo vedere a che legge (della serie: scientia est celare scientiam).Chissà se si può fare…
Immagino di sì. Probabilmente cambiando localmente la definizione di \caption:
`\let\standardcaption\caption
\def\caption#1{\standardcaption{Didascalia corta}}`
Puoi scriverlo fra \begingroup e \begin{sidebyside}, ricordandoti di mettere \endgroup dopo \end{sidebyside}.Ciao
Enrico
-
23 Marzo 2008 alle 11:52 #18930::
Immagino di sì. Probabilmente cambiando localmente la definizione di \caption:
`\let\standardcaption\caption
\def\caption#1{\standardcaption{Didascalia corta}}`
Puoi scriverlo fra \begingroup e \begin{sidebyside}, ricordandoti di mettere \endgroup dopo \end{sidebyside}.Ho provato, ma non funziona.
`\begingroup
\let\standardcaption\caption
\def\caption#1{\standardcaption{Didascalia breve}}
\begin{sidebyside}
\begin{figure}[H]
\centering
\includegraphics[width=%
0.5\textwidth]{Formica}
\caption{Didascalia lunga}
\label{fig:float}
\end{figure}
\end{sidebyside}
\endgroup
`
Non succede niente: nell’elenco delle figure la didascalia è sempre quella lunga. 🙁Che ne pensi?
Grazie,
L.
-
23 Marzo 2008 alle 12:34 #18931::
Immagino di sì. Probabilmente cambiando localmente la definizione di \caption:
`\let\standardcaption\caption
\def\caption#1{\standardcaption{Didascalia corta}}`
Puoi scriverlo fra \begingroup e \begin{sidebyside}, ricordandoti di mettere \endgroup dopo \end{sidebyside}.Ho provato, ma non funziona.
`\begingroup
\let\standardcaption\caption
\def\caption#1{\standardcaption{Didascalia breve}}
\begin{sidebyside}
\begin{figure}[H]
\centering
\includegraphics[width=%
0.5\textwidth]{Formica}
\caption{Didascalia lunga}
\label{fig:float}
\end{figure}
\end{sidebyside}
\endgroup
`
Non succede niente: nell’elenco delle figure la didascalia è sempre quella lunga. 🙁Che ne pensi?
Che probabilmente è \figure che ridefinisce \caption. Ovviamente non posso sapere il tuo preambolo eccetera; prova a dare \show\figure dopo \begin{document}; se c’è lì qualche riferimento a \caption (o comandi collegati) bisogna modificare la definizione di \figure (localmente).
Ciao
Enrico
-
23 Marzo 2008 alle 12:59 #18932
-
23 Marzo 2008 alle 13:04 #18933::
Che probabilmente è \figure che ridefinisce \caption. Ovviamente non posso sapere il tuo preambolo eccetera; prova a dare \show\figure dopo \begin{document}; se c’è lì qualche riferimento a \caption (o comandi collegati) bisogna modificare la definizione di \figure (localmente).
Il mio preambolo è questo:
`\documentclass[10pt,a4paper,twoside,openright,titlepage,%fleqn,
cleardoubleempty,abstracton,pointlessnumbers,
headinclude,footinclude,BCOR5mm]{scrreprt}\newcommand{\myName}{…}
\newcommand{\myTitle}{…}\usepackage[applemac]{inputenc}
\usepackage[OT2,T1]{fontenc}
\usepackage[final]{microtype}
\usepackage{amsfonts,amssymb,amsthm}
\usepackage{amscd}
\usepackage[italian]{varioref}
\usepackage[square]{natbib}
\usepackage{indentfirst}
\usepackage[tight,italian]{minitoc}
\usepackage{wrapfig}
\usepackage{makeidx}
\usepackage{multicol}
\usepackage{chngpage,calc}
\usepackage{float}
\usepackage{braket}
\usepackage{mhchem}
\usepackage{empheq}
\usepackage[light,condensed,math]{iwona}
\usepackage[writefile]{listings}
\usepackage[italian,squaren,cdot]{SIunits}
\usepackage{enumitem}
\usepackage{calligra}
\usepackage{comment}
\usepackage{shapepar,lettrine}
\usepackage{epigraph}
\usepackage{verbatim}
\usepackage{numprint}
\usepackage{classicthesis-ldpkg}
\usepackage[eulerchapternumbers,subfig,beramono,
eulermath,pdfspacing]{classicthesis}
\usepackage{xfrac}
\usepackage{mathtools}
\usepackage[greek,german,english,italian]{babel}
\usepackage{classicthesis-ita}
\let\amssquare\square
\usepackage{xymtex}
\let\xymsquare\square
\renewcommand{\square}{\amssquare}
\usepackage{eurosym}
\usepackage{guit}
\usepackage{multirow,dcolumn,ctable,footnote,colortbl}`
Se scrivo \show\figure subito dopo \begin{document} c’è questo messaggio:
`> \figure=\long macro:
->\let \caption \captionbelow \@float {figure}.
l.61 \show\figure?
`
Non ci capisco niente! 😳Grazie mille,
L.
-
23 Marzo 2008 alle 14:18 #18934::
Che probabilmente è \figure che ridefinisce \caption. Ovviamente non posso sapere il tuo preambolo eccetera; prova a dare \show\figure dopo \begin{document}; se c’è lì qualche riferimento a \caption (o comandi collegati) bisogna modificare la definizione di \figure (localmente).
Se scrivo \show\figure subito dopo \begin{document} c’è questo messaggio:
`> \figure=\long macro:
->\let \caption \captionbelow \@float {figure}.
l.61 \show\figure?
`
Non ci capisco niente! 😳Come sospettavo. Dovrebbe bastare il codice che avevo scritto prima, sostituendo ogni occorrenza di “caption” con “captionbelow”.
Ciao
Enrico
-
23 Marzo 2008 alle 15:51 #18935::
Dovrebbe bastare il codice che avevo scritto prima, sostituendo ogni occorrenza di “caption” con “captionbelow”.
Funziona!!
`\begingroup
\let\standardcaption\captionbelow
\def\captionbelow#1{\standardcaption{Didascalia breve.}}
\begin{sidebyside}
\begin{figure}[H]
\centering
\includegraphics[width=%
0.5\textwidth]{Formica}
\caption{Didascalia lunga.}
\label{fig:float}
\end{figure}
\end{sidebyside}
\endgroup
`
Il codice precedente (che riassumo per comodità) risolve egregiamente™ il problema.Alè! 😀
Grazie mille Enrico.
A presto,
Lorenzo
-
23 Marzo 2008 alle 17:02 #18936::
Dovrebbe bastare il codice che avevo scritto prima, sostituendo ogni occorrenza di “caption” con “captionbelow”.
Funziona!!
Avevi forse qualche dubbio? 😉
Quando non si sa che cosa fa la macro \xxx, \show\xxx è la prima cosa da provare; se il comando \xxx è reso robusto, cioè definito tramite \DeclareRobustCommand, la risposta è, apparentemente, deludente:
`> \xxx=macro:
->\protect \xxx .`
In questo caso si deve provare con
`\expandafter\show\csname xxx \endcsname`
dove il nome del comando (senza barra rovescia) va seguito da uno spazio. A questo punto si vedrà la definizione. Nel tuo caso non c’è questo problema; \show\figure ti dice che \caption viene reso uguale a \captionbelow e poi viene eseguito \@float{figure}. Et voilà.Ciao
Enrico
-
23 Marzo 2008 alle 17:06 #18937
-
23 Marzo 2008 alle 17:14 #18938
-
23 Marzo 2008 alle 17:26 #18939::
Scusate, ma succede solo a me o anche a voi la didascalia dell’output è quella breve?
A me nella lista delle figure c’è quella breve, nell’input c’è naturalmente il codice e nell’output (a destra) c’è quella breve. Non mi sembra che sia una buona cosa.
Questo era ciò che chiedeva Lorenzo. Uno scherzetto al lettore?
Ciao
Enrico
-
23 Marzo 2008 alle 17:26 #18940::
Scusate, ma succede solo a me o anche a voi la didascalia dell’output è quella breve?
A me nella lista delle figure c’è quella breve, nell’input c’è naturalmente il codice e nell’output (a destra) c’è quella breve. Non mi sembra che sia una buona cosa.
Santo cielo Andrea, è proprio così… 🙁 🙁 🙁
Io guardavo solo la “didascalia breve” nell’elenco delle figure (che ora va bene), non ero accorto che la “didascalia lunga” nel typeset dell’ambiente sidebyside fosse sparita!
Ahia, il problema è dunque ancora aperto…
Ma sono pronto a scommettere in un miracolo di Enrico. 😉
-
23 Marzo 2008 alle 17:31 #18941::
Questo era ciò che chiedeva Lorenzo. Uno scherzetto al lettore?
No, nessuno scherzo e io volevo fare un’altra cosa.
`\begin{sidebyside}
\begin{figure}[H]
\centering
\includegraphics[width=%
0.5\textwidth]{Formica}
\caption{Didascalia lunga.}
\label{fig:float}
\end{figure}
\end{sidebyside}
`
però vorrei che nell’elenco delle figure ci fosse una didascalia breve. Naturalmente, potre cavarmela così:
`\begin{sidebyside}
\begin{figure}[H]
\centering
\includegraphics[width=%
0.5\textwidth]{Formica}
\caption[Didascalia breve.]{Didascalia lunga.}
\label{fig:float}
\end{figure}
\end{sidebyside}
`
però non è quello che voglio, perché il lettore verrebbe “distratto” da quelle parentesi quadre, mentre lo voglio concentrato sul contenuto dell’esempio (che è tutt’altro, e non c’entra niente con le didascalie lunghe e corte, che ho già spiegato da un’altra parte).Quindi vorrei una didascalia breve nell’elenco, ma tenendo nascoste al lettore quelle quadre, che mi spezzano il filo.
Ecco, adesso spero di essere stato più chiaro!
L.
-
23 Marzo 2008 alle 17:32 #18942::
Scusate, ma succede solo a me o anche a voi la didascalia dell’output è quella breve?
A me nella lista delle figure c’è quella breve, nell’input c’è naturalmente il codice e nell’output (a destra) c’è quella breve. Non mi sembra che sia una buona cosa.
Santo cielo Andrea, è proprio così… 🙁 🙁 🙁
Io guardavo solo la “didascalia breve” nell’elenco delle figure (che ora va bene), non ero accorto che la “didascalia lunga” nel typeset dell’ambiente sidebyside fosse sparita!
Ahia, il problema è dunque ancora aperto…
Ma sono pronto a scommettere in un miracolo di Enrico. 😉
\begingroup
\let\standardcaption\captionbelow
\def\captionbelow{\standardcaption[Didascalia breve.]}
\begin{sidebyside}
\begin{figure}[H]
\centering
\includegraphics[width=%
0.5\textwidth]{Formica}
\caption{Didascalia lunga.}
\label{fig:float}
\end{figure}
\end{sidebyside}
\endgroup[/code]
Non ho provato, ma dovrebbe funzionare: le successive espansioni sono
`\caption{Didascalia lunga.}
\captionbelow{Didascalia lunga.}
\standardcaption[Didascalia breve.]{Didascalia lunga.}`
e tutto dovrebbe essere a posto perché \standardcaption è uguale a \captionbelow originalmente definita dal pacchetto caption e si aspetta un argomento opzionale e uno obbligatorio.Ciao
Enrico
-
23 Marzo 2008 alle 17:45 #18943::
`\begingroup
\let\standardcaption\captionbelow
\def\captionbelow{\standardcaption[Didascalia breve]}
\begin{sidebyside}
\begin{figure}[H]
\centering
\includegraphics[…]{…}
\caption{Didascalia lunga.}
\end{figure}
\endgroup
`
Ecco! Questa volta ci siamo proprio!Non so davvero come ringraziarvi, Enrico e Andrea! 😀
A presto,
L.
-
25 Marzo 2008 alle 19:30 #18944::
Carissimi, ormai ci siamo…Questa finezza è l‘ultimo dubbio che riguarda l’ambiente sidebyside.
Il problema è questo:
`\begin{sidebyside}
\begin{large}
In questo momento,
sto mentendo.\par
\end{large}
\end{sidebyside}
`Vorrei eliminare quel fastidioso, indesiderato rientro prima delle parole “In questo momento”.
Tanto più che se scrivo semplicemente
`\begin{large}
In questo momento,
sto mentendo.\par
\end{large}
`
non c’è alcun rientro.Grazie anticipate per l’aiuto!
Lorenzo
-
25 Marzo 2008 alle 20:31 #18945::
Carissimi, ormai ci siamo…
Questa finezza è l‘ultimo dubbio che riguarda l’ambiente sidebyside.
Il problema è questo:
`\begin{sidebyside}
\begin{large}
In questo momento,
sto mentendo.\par
\end{large}
\end{sidebyside}
`Vorrei eliminare quel fastidioso, indesiderato rientro prima delle parole “In questo momento”.
Tanto più che se scrivo semplicemente
`\begin{large}
In questo momento,
sto mentendo.\par
\end{large}
`
non c’è alcun rientro.Non propagandare l’uso di \begin{large}…\end{large}, c’est plus facile.
Ciao
Enrico
-
25 Marzo 2008 alle 21:03 #18946::
Non propagandare l’uso di \begin{large}…\end{large}, c’est plus facile.
Questa è senza dubbio una soluzione.
Tuttavia, mi piacerebbe comunque trovare la soluzione del problema ed eliminare il rientro!
Indipendentemente dal resto.
È davvero così difficile curare questo caso?
Grazie Enrico e scusami per la pervicace insistenza… 😳
-
25 Marzo 2008 alle 21:49 #18947::
Non propagandare l’uso di \begin{large}…\end{large}, c’est plus facile.
Questa è senza dubbio una soluzione.
Tuttavia, mi piacerebbe comunque trovare la soluzione del problema ed eliminare il rientro!
Indipendentemente dal resto.
È davvero così difficile curare questo caso?
Grazie Enrico e scusami per la pervicace insistenza… 😳
Sarebbe carino se mettessi la definizione attuale di sidebyside e un preambolo minimalissimo che mostri il problema. Con un filone così lungo non sono riuscito a capire quale sia la definizione che usi.
Ciao
Enrico
-
26 Marzo 2008 alle 5:16 #18948::
`\documentclass{scrreprt}\usepackage[writefile]{listings}
\usepackage{classicthesis-ldpkg}
\usepackage{classicthesis}\lstset{extendedchars}
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{columns=fullflexible,%
linewidth=0.45\linewidth,keepspaces=true,%
breaklines=true,%
breakindent=0pt,%
boxpos=t,%
basicstyle=\small\ttfamily
}%
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\begin{center}%
\begin{minipage}{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\qquad
\begin{minipage}{0.45\linewidth}%
\setkeys{lst}{frame=none}%
\leavevmode \catcode`\^^M=5\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\end{center}%
}
\makeatother\begin{document}
\begin{sidebyside}
\begin{large}
In questo momento,
sto mentendo.\par
\end{large}
\end{sidebyside}
\end{document}
`
Grazie mille,
L.
-
26 Marzo 2008 alle 9:31 #18949::
`\documentclass{scrreprt}
\usepackage[writefile]{listings}
\usepackage{classicthesis-ldpkg}
\usepackage{classicthesis}\lstset{extendedchars}
\makeatletter
\lstnewenvironment{sidebyside}{%
\global\let\lst@intname\@empty
\setbox\z@=\hbox\bgroup
\setkeys{lst}{columns=fullflexible,%
linewidth=0.45\linewidth,keepspaces=true,%
breaklines=true,%
breakindent=0pt,%
boxpos=t,%
basicstyle=\small\ttfamily
}%
\lst@BeginAlsoWriteFile{\jobname.tmp}%
}{%
\lst@EndWriteFile\egroup
\begin{center}%
\begin{minipage}{0.45\linewidth}%
\hbox to\linewidth{\box\z@\hss}
\end{minipage}%
\qquad
\begin{minipage}{0.45\linewidth}%
\setkeys{lst}{frame=none}%
\leavevmode \catcode`\^^M=5\relax
\small\input{\jobname.tmp}%
\end{minipage}%
\end{center}%
}
\makeatother\begin{document}
\begin{sidebyside}
\begin{large}
In questo momento,
sto mentendo.\par
\end{large}
\end{sidebyside}
\end{document}
`
Grazie mille,
L.Il problema è il \leavevmode prima di \catcode`\^^M=5. Puoi notare che
`aaa\par
\leavevmode\begin{large}Io dico la verità\end{large}`
presenta lo stesso problema (ho messo “aaa\par” per mostrare lo spazio in più). Ora vedi tu se cancellarlo oppure no: qui risolve il problema, in altri posti potrebbe dare guai.Se si è in modo verticale, lo spazio dopo \begin{large} è ignorato, il paragrafo comincia solo con il primo carattere. Dopo \leavevmode quello spazio non è ignorato.
Un ambiente che si usa anche in modo orizzontale deve avere sempre una definizione del tipo
`\newenvironment{xxx}{…\ignorespaces}{\unskip…}`
per togliere gli spazi spuri. Motivo in più per non propagandare gli pseudoambienti “large” e simili.Ciao
Enrico
-
26 Marzo 2008 alle 10:43 #18950
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.