Avatar billede nemezis_aalborg Nybegynder
29. november 2006 - 16:05 Der er 12 kommentarer og
1 løsning

Latex og counter samt flere passes

Hejsa,

jeg har forsøgt at lave counters for hver part i et latex document. Jeg kan godt få counterne til at tælle op, men problemet er at jeg vil skrive dem ud på titelbladet, som er først i dokumentet. Counteren bliver først talt op efterfølgende. Ved at Latex parser dokumentet flere gange, så det jeg er ude efter er egentlig en måde at skrive værdien af counterne ud på i parse nummer 2.

indtil videre ser det ud på følgende måde:
--------------------------------------------------
\newcounter{front_matter_counter}
\newcounter{report_counter}
\newcounter{total_counter}

\begin{document}

% udskriv sidetal
Front matter: \roman{front_matter_counter}\\
Report: \arabic{report_counter}\\
Total: \arabic{total_counter}

\setcounter{page} 1
% front matter tekst...
\setcounter{front_matter_counter}{\value{page}}
\addtocounter{total_counter}{\value{page}}

\setcounter{page} 1
% report tekst...
\setcounter{report_counter}{\value{page}}
\addtocounter{total_counter}{\value{page}}

\end{document}
--------------------------------------------------
Avatar billede Slettet bruger
29. november 2006 - 16:18 #1
ideen er at skrive den værdi du ønsker at referere til, til aux-filen. Det er sådan memoir klassen stiller visse værdier tilrådighed.

Men det er lidt tricky, idet floats kan forstyrre tingene. Så du kan f.eks. ikke bare gemme værdien af 'page' på siden hvor din tekst slutter.

Før vi begynder at kode os ud af problemerne vil jeg gerne have noget mere information om hvilken dokument klasse der er tale om (idet memoir kan hjælpe en hel del, men det  hjælper jo ikke hvis du anvneder noget andet).

/daleif
Avatar billede Slettet bruger
29. november 2006 - 16:30 #2
Her er noget som i hvertfald virker sammen med book. Dog ikke gennemtestet.

\documentclass[a4paper]{book}

\newcounter{totalpages}
\newcounter{reportpages}
\newcounter{frontmatterpages}
\makeatletter
\newcommand\WriteValueToAux[2][page]{%
\addtocounter{#1}{-1}%
    \immediate\write\@auxout%
      {\string\setcounter{#2}{\the\@nameuse{c@#1}}}%
    \stepcounter{#1}%
}
\newcounter{sheetsequence}
  \setcounter{sheetsequence}{1}
  \renewcommand{\thesheetsequence}{\@arabic\c@sheetsequence}
\g@addto@macro{\@outputpage}{\stepcounter{sheetsequence}}
\AtBeginDocument{\AtEndDocument{%
    \clearpage\WriteValueToAux{reportpages}%
    \WriteValueToAux[sheetsequence]{totalpages}%
  }}
\makeatother
\begin{document}

\begin{titlepage}
  Total pages: \thetotalpages
 
  Report pages consists of: \thereportpages

  Front matter consists of: \thefrontmatterpages
\end{titlepage}

\cleardoublepage

\frontmatter

\input{tufte} % some text

\newpage

test

\clearpage
\WriteValueToAux{frontmatterpages}
\cleardoublepage

\mainmatter

\input{tufte}

\newpage

\input{tufte}

\end{document}

/daleif
Avatar billede nemezis_aalborg Nybegynder
29. november 2006 - 17:50 #3
Det er:
\documentclass[a4paper,11pt,twoside]{report}
Avatar billede nemezis_aalborg Nybegynder
29. november 2006 - 17:50 #4
Men prøver lige at se om jeg kan få noget fornuftigt ud af det du har skrevet :D
Avatar billede Slettet bruger
29. november 2006 - 18:10 #5
report mangler så vidt jeg husker \frontmatter og \mainmatter. Hvilket er en af grundene til at jeg altid anbefaler at man anvender noget andet end standardklasserne. Det akn simpelthen ikke betale sig.

/daleif
Avatar billede nemezis_aalborg Nybegynder
29. november 2006 - 18:26 #6
Jeg har også flere counters.. kan ikke rigtig få det til at virke med flere :(

Indtil videre har jeg:
\newcounter{totalpages}
\newcounter{reportpages}
\newcounter{frontmatterpages}
\newcounter{backmatterpages}
\newcounter{appendicespages}
Avatar billede nemezis_aalborg Nybegynder
29. november 2006 - 18:32 #7
Sådan ser det ud nu:
% hack under full / over full boxes
\typeout{:?0000}
%GATHER{bibtex.bib}
\input{preamble}

\begin{document}

    % Front page
    \input{frontpage}

    % Title page
    \input{titlepage}

    % Signatures
    \input{signatures}

    % Front matter
    \setcounter{page}{1}
    \renewcommand{\thepage}{\roman{page}}
    \input{frontmatter/main.tex}
    \WriteValueToAux{frontmatterpages}

    % Report
    \setcounter{page}{1}
    \renewcommand{\thepage}{\arabic{page}}
    \input{report/main.tex}
    \WriteValueToAux{reportpages}

    % Back matter
    \renewcommand{\thepage}{\roman{page}}
    \input{backmatter/main.tex}
    \WriteValueToAux{backmatterpages}

    % Appendices
    \renewcommand{\thepage}{\roman{page}} \renewcommand{\thechapter}{\Alph{chapter}}
    \input{appendices/main.tex}
    \WriteValueToAux{appendicespages}

\end{document}
Avatar billede nemezis_aalborg Nybegynder
29. november 2006 - 18:39 #8
Tror jeg har fundet ud af det.. men af en eller anden grund virker det ikke hvis counteren hedder "reportpages".. hvis jeg omdøber den til noget andet, så virker det fint?? :)
Avatar billede Slettet bruger
29. november 2006 - 18:39 #9
Jeg kan ikke gøre noget ved det idet jeg ikke har din preamble. Du bør i stedete poste et minimalt eksempel som man bare kan copy'n'paste. Det gør det noget nemmere at arbejde med.

Bemærk at jeg altid inkluderer en \clearpage før \Write... Det sikret mod floats. Desuden gemmer du ikke de rigtige værdier ved back matter og appendices (forresten så er appendices en del af back matter).

Det havde  været en fordel hvis du havde været noget mere konkret til at begynde med.

Umiddelbart tror jeg det måske er nemmere at arbejde med labels og så lave nogle beregninger på dem. Det er dog ikke helt lige til.

Måske er det nemmere at se om der skulle være en pakke på ctan som kan klare dette. Søg evt. på google groups arkivet af comp.text.tex

/daleif
Avatar billede nemezis_aalborg Nybegynder
29. november 2006 - 18:42 #10
Det her virker top nice:
---------------------------
\newcounter{tempcounter}
\newcounter{totalpages}
\newcounter{mainpages}
\newcounter{frontmatterpages}
\newcounter{backmatterpages}
\newcounter{appendicespages}
\makeatletter
\newcommand\WriteValueToAux[2][page]{%
\addtocounter{#1}{-1}%
    \immediate\write\@auxout%
      {\string\setcounter{#2}{\the\@nameuse{c@#1}}}%
    \stepcounter{#1}%
}
\newcounter{sheetsequence}
  \setcounter{sheetsequence}{1}
  \renewcommand{\thesheetsequence}{\@arabic\c@sheetsequence}
\g@addto@macro{\@outputpage}{\stepcounter{sheetsequence}}
\AtBeginDocument{\AtEndDocument{%
    \clearpage\WriteValueToAux{tempcounter}%
    \WriteValueToAux[sheetsequence]{totalpages}%
  }}
\makeatother
---------------------------
tak for hjælpen!
Avatar billede nemezis_aalborg Nybegynder
29. november 2006 - 18:43 #11
Skriver ud sådan:
--------------------
            \item {\bf Front matter:} \thefrontmatterpages\\
            \hspace{2cm}
            \vspace{-0.4cm}
            \item {\bf Report:} \themainpages\\
            \hspace{2cm}
            \vspace{-0.4cm}
            \item {\bf Back matter:} \thebackmatterpages\\
            \hspace{2cm}
            \vspace{-0.4cm}
            \item {\bf Appendices:} \theappendicespages\\
            \hspace{2cm}
            \vspace{-0.4cm}
            \item {\bf Total:} \thetotalpages\\
--------------------
Avatar billede nemezis_aalborg Nybegynder
29. november 2006 - 18:44 #12
og document kan i da også lige få:
-------------
\begin{document}

    % Front page
    \input{frontpage}

    % Title page
    \input{titlepage}

    % Signatures
    \input{signatures}

    % Front matter
    \setcounter{page}{1}
    \renewcommand{\thepage}{\roman{page}}
    \input{frontmatter/main.tex}
    \WriteValueToAux{frontmatterpages}

    % Report
    \setcounter{page}{1}
    \renewcommand{\thepage}{\arabic{page}}
    \input{report/main.tex}
    \WriteValueToAux{mainpages}

    % Back matter
    \setcounter{page}{1}
    \renewcommand{\thepage}{\roman{page}}
    \input{backmatter/main.tex}
    \WriteValueToAux{backmatterpages}

    % Appendices
    \setcounter{page}{1}
    \renewcommand{\thepage}{\roman{page}} \renewcommand{\thechapter}{\Alph{chapter}}
    \input{appendices/main.tex}
    \WriteValueToAux{appendicespages}

\end{document}
-------------
Avatar billede Slettet bruger
29. november 2006 - 18:46 #13
Som kommentar vil jeg lige anbefale at du undlader at anvende \bf, denne makro anses for at være forældet.

Anvend \textbf{Report:} i stedet.

/daleif
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester