Portál AbcLinuxu, 10. května 2025 12:11

Dotaz: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline

drc avatar 1.11.2008 20:15 drc | skóre: 5
LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Přečteno: 3250×
Odpovědět | Admin
Ahoj,

mám problém. Píšu práci v documentclass book a generuju si do něj literaturu pomocí BibTeXu.

Vypadá to takhle:
\def\refname{Literatura}
\bibliographystyle{csplainnat}
\bibliography{literatura}\addcontentsline{toc}{chapter}{Literatura}

Problém je v tom, že takhle obsah odkazuje na stránku kde seznam literatury končí. Pokud upravím kód:

\def\refname{Literatura}
\addcontentsline{toc}{chapter}{Literatura}
\bibliographystyle{csplainnat}
\bibliography{literatura}

Tak se problém opět nevyřeší. Tentokrát obsah odkazuje na 2 stránky dopředu. (Místo správneho čísla (třeba) 10 udává 8.) Při změně z ...{chapter}... na section se chování nezmění.

Myslím, že to je irelevantní, ale používám balík natbib.

Děkuji za každou radu :-)

P.S. Pokud někdo máte styl pro BibTeX, který odpovídá ČSN tak se prosím podělte. Ještě jsem žádný takový na netu nenašel :-(

Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.11.2008 22:43 cronin | skóre: 49
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ako to kompilujes? Na spravne generovanie krizovych odkazov treba zvycajne dve, niekedy aj tri kompilacie texom za sebou.

Je to kvoli tomu, ze napr. ak mas obsah na zaciatku, tak pri prvej kopmpilacii obsah "nezabera ziadne miesto", az po prvej kompilacii sa vygeneruju pomocne subory, ktore obsahuju vstup pre obsah; pri druhej kompilacci sa vlozi tento obsah, a az vtedy "sa zisti", ze obsah zabera 3 strany, a teda vsetky nasledujuce referencie na strany je potrebne posunut.
drc avatar 1.11.2008 23:37 drc | skóre: 5
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
To vím, ale na počtu kompilací to vůbec nijak nezávisí. Fakt. Podle mě je problém v documentclass book, která je nastavená tak, že novou kapitolu (respektive objekt na její úrovni) musí umístit na první volnou lichou stranu.

V případě, že \addcontentsline{toc}{chapter}{Literatura} se nachází před voláním \bibliography{literatura} se do souboru .toc uloží číslo strany na které skončil text. Nicméně podle nastavení book může LaTeX vypsat Literaturu až na první "nepopsanou" lichou stranu -- tím vzniká ten posun o jednu nebo dvě stránky.

Z toho plyne jedno prasácké řešení a to, že se před \addcontentsline vloží \clearpage nebo \cleardoublepage a to podle toho jestli text končí na sudé nebo liché stránce. Ve zkratce: No fuj! (Ale funguje to.) Stejně odporné řešení je manuální editace .toc.

Dalším podobným řešením je editace souboru .bbl a přidáním \addcontentsline za \begin{thebibliography}. To také funguje, ale musí se to provádět po každém spuštění BibTeXu (ten přepisuje celý .bbl). Řešením by bylo přimět BibTeX, aby tam \addcontentsline doplňoval sám, ale to neumím :-( (Popřípadě napsat takový makefile, který to pokaždé udělá.)
1.11.2008 22:46 cronin | skóre: 49
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Odpovědět | | Sbalit | Link | Blokovat | Admin
P.S. CSN pre bibliograficke odkazy definuje nasledovanianehodny paskvil.
drc avatar 1.11.2008 23:44 drc | skóre: 5
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Souhlasím. Leč norma je norma a má tu špatnou vlastnost, že ji občas někdo vyžaduje a s tím bohužel nic nenadělám.

Na netu jsem našel 2 co by měly být CSN kompatibilní a tenhle ( http://kraken.pedf.cuni.cz/texing/ ) byl přeci jenom o něco lepší.
2.11.2008 10:42 Devil ;o)
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkus dat na zacatek souboru literatura.bib @PREAMBLE{"\addcontentsline{toc}{chapter}{Literatura}"}.
drc avatar 2.11.2008 11:27 drc | skóre: 5
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
To bohužel nefunguje. V souboru .bbl to vytvoří tohle:
\addcontentsline{toc}{chapter}{Literatura}
\begin{thebibliography}{16}


Což je ekvivalentní s původním zápisem v .tex
\addcontentsline{toc}{chapter}{Literatura}
\bibliographystyle{csplainnat}
\bibliography{literatura}


Fungovalo by to pokud by .bbl vypadal takhle:
\begin{thebibliography}{16}
\addcontentsline{toc}{chapter}{Literatura}


Každopádně díky za radu :-) O příkazu @PREAMBLE jsem nevedel ;-)
2.11.2008 12:08 Devil ;o)
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Pravda, me to fungovalo jenom z toho duvodu, ze jsem pred vlozenim seznamu literatury volal jedno makro. To obsahuje \if@twoside\cleardoublepage\else\clearpage\fi coz je presne to, co si nazval prasackym resenim.

Dalsi co me napada je predefinovat prostredi thebibliography.
drc avatar 2.11.2008 14:03 drc | skóre: 5
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Čisté to sice není ;-), ale alespoň je to automatické -- zkusím to použít. Díky.
drc avatar 3.11.2008 11:34 drc | skóre: 5
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Tak jsem to vyzkoušel a zdá se, že to problém vyřeší. Číslo strany je teď správně. Nicméně vynořil se jiný problém. Používám balíček hyperref, který dělá klikací odkazy v obsahu a ten stále míří na špatnou stranu. V porovnání s původním problém je to prkotina, ale stejně to zamrzí.

Navíc v tomhle případě prostě netuším jak to vyřešit.

3.11.2008 14:28 Devil ;o)
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Muzes me sem vlozit Tvoje predefinovany makro thebibliography.
6.11.2008 12:12 x
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nejlepším řešením asi je nadefinovat \@openbib@code, např.
\makeatletter
\def\@openbib@code{\addcontentsline{toc}{chapter}{Literatura}}
\makeatother
5.5.2012 11:05 vklidu
Rozbalit Rozbalit vše Re: LaTeX: Odkazování na správnou stranu pomocí \addcontentsline
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pred vlozeni seznamu literatury nebo obrazku apod. je potreba vlozit phantom sekci. Fiktivne to zacne novou sekci, ale realne se nikde nezobrazi. Slouzi to prave pro tyto typy problemu.
\phantomsection 
\addcontentsline{toc}{chapter}{List of Figures} 
\listoffigures
V pripade nove kapitoly je potreba jeste vlozit \cleardoublepage
\cleardoublepage
\phantomsection 
\addcontentsline{toc}{chapter}{Literatura} 
\bibliography{literatura}
Je to ciste a doporucovane reseni.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.