Risposte nei forum create
-
AutoreRisposte
-
29 Gennaio 2008 alle 23:19 in risposta a: Codifiche di inputenc con WinEdt, TeXnicCenter e Kile #21174::
La terza ambiguità è il termine WYSIWYG, che può indicare due concetti diversi:
1. Quello che appare a video è uguale a quello che appare a stampa (in questo caso, LaTeX è WYSIWYG):
2. Si può direttamente modificare a video un testo già composto (in questo caso, LaTeX non è WYSIWYG).Attenzione il termine WYSISWYG indica tutti i programmi che mostrano i cambiamenti i tempo reale senza dover interpretare, compilare il file. Latex quindi non è WYSIWYG.
::
Ho risolto ridefinendo e semplificando i comandi di latex standard per la gestione dei vari sommari. Ho dovuto però definire due nuovi counter.
ecco il codice `
\documentclass[a4paper]{article}
\usepackage{lipsum}
\makeatletter
\def\contenutotoc{%
\begingroup
\makeatletter
\@input{\jobname.abc}%
\if@filesw
\expandafter\newwrite\csname tf@abc\endcsname
\immediate\openout \csname tf@abc\endcsname \jobname.abc\relax
\fi
\@nobreakfalse
\endgroup}
\def\chiudiscrittura{\closeout\csname tf@abc\endcsname}
\def\cambiasezionetoc{
\def\oldesection{\relax}
\let\oldsection=\section
\def\seziones##1{\oldsection*{##1}}
\def\sezione##1{\oldsection{##1}
\relax
aggiungilinea{section}{##1} %%%%
}\def\section{\@ifstar\seziones\sezione}
\def\oldsubsection{\relax}
\let\oldsubsection=\subsection
\def\subsection##1{\oldsubsection{##1}
\aggiungilinea{subsection}{##1} %%%%
}
}
\def\ripristinasezione{
\let\section=\oldsection%
\let\subsection=\oldsubsection%
}
\def\minisommario{
\cambiasezionetoc
\hrule
\vskip 5pt
\textsc{Table of Contents}\par
\contenutotoc\par
\vskip 7pt
\hrule
\vskip 15pt plus 5pt minus 3pt
}
\newcounter{articolosezione} %%%%
\newcounter {articolosottosezione}[articolosezione] %%%%
\renewcommand \thearticolosezione {\@arabic\c@articolosezione.} %%%%
\renewcommand\thearticolosottosezione {\thearticolosezione\@arabic\c@articolosottosezione.} %%%%
\newcommand*\envname[1]{\textsf{#1}}
\def\aggiungilinea#1#2{%%%%%
\aggiungicontenuti{\protect\contenuti{#1}{#2}{\thepage}}} %%%%
\long\def\aggiungicontenuti#1{%%%%
\def\@out{\csname tf@abc\endcsname}%%%%
\protected@write\@out %%%%
{\let\label\@gobble \let\index\@gobble \let\glossary\@gobble}%%%%%
{\string\mbox{}{#1}}}%%%%
\def\contenuti#1{\csname s@#1\endcsname}%%%%
\def\s@section#1#2{%%%%
\stepcounter{articolosezione}%%%%
\thearticolosezione\ #1 \hfill #2\par}%%%%
\def\s@subsection#1#2{%%%
\stepcounter{articolosottosezione}%%%%
\hskip 15pt \thearticolosottosezione\ #1 \hfill #2\par}%%%%
\makeatother\begin{document}
\minisommario
\section{Una \envname{Prova}}
\lipsum[3]\lipsum[4]
\subsection{Questa \`{e} una sottosezione}
\lipsum[2]\lipsum[2]\lipsum[2]
\section{prova ancora}
\chiudiscrittura
\end{document}`Ho indicato con %%% i cambiamenti rispetto alla prima versione. So di aver scoperto l’acqua calda, ma ho capito finalmente come funziona. E ho risolto usando write al posto di immediate\write il problema delle pagine.
::
Grazie Enrico, stavo provando varie soluzioni e questa funziona egregiamente.
Stavo pensando qualcosa che facesse espandere thesection subito in un comando tipo
\edef\testo{\thesection} per costringere l’espansione, ma non funziona.Rimane il fatto che usando immediate i numeri di pagina possono essere sballati. Probabilmente l’unica soluzione è quella di definirsi un comando tipo contentsline.
Devo dire che mi sto divertendo a giocare con i meccanismi di latex.
::
Questo è l’esempio minimo che genera l’errore.
`
\documentclass[a4paper]{article}
\makeatletter
\def\contenutotoc{%
\begingroup
\makeatletter
\@input{\jobname.abc}%
\if@filesw
\expandafter\newwrite\csname tf@abc\endcsname
\immediate\openout \csname tf@abc\endcsname \jobname.abc\relax
\fi
\@nobreakfalse
\endgroup}
\def\chiudiscrittura{\closeout\csname tf@abc\endcsname}
\def\cambiasezionetoc{
\def\oldesection{\relax}
\let\oldsection=\section
\def\seziones##1{\oldsection*{##1}}
\def\sezione##1{\oldsection{##1}
\relax
\immediate\write \csname tf@abc\endcsname{\hskip 7pt \thesection. ##1\hfill \thepage\mbox{\quad}\par
}}\def\section{\@ifstar\seziones\sezione}
\def\oldsubsection{\relax}
\let\oldsubsection=\subsection
\def\subsection##1{\oldsubsection{##1}
\immediate\write \csname tf@abc\endcsname{\hskip 13pt \thesubsection. ##1\hfill\thepage\mbox{\quad}\par}
}
}
\def\ripristinasezione{
\let\section=\oldsection%
\let\subsection=\oldsubsection%
}
\def\minisommario{
\cambiasezionetoc
\hrule
\vskip 5pt
\textsc{Table of Contents}\par
\contenutotoc\par
\vskip 7pt
\hrule
\vskip 15pt plus 5pt minus 3pt
}
\makeatother
\newcommand*\envname[1]{\textsf{#1}}
\begin{document}
\minisommario
\section{\envname{Prova}}
\section{prova ancora}
\end{document}`
Se elimino \immediate funziona, ma sbaglia i numeri delle sezioni
-
AutoreRisposte