[cstex] reference na vlastní seznamy

Zdenek Wagner zdenek.wagner at gmail.com
Mon Feb 11 00:39:26 CET 2013


Dobrý večer,

takhle to nemůže fungovat. Představte si následující případ:

\documentclass{article}
% definice
\begin{document}
\section{První}

Podrobnější vysvětlení bude v kapitole \ref{dva} na straně \pageref{dva}.

\section{Druhá}

Nějaký text

\ukazka{...}{...}

Zde začne vysvětlení\label{dva}

\pageref{dva} bude odkazovat na správné číslo strany, ale \ref{dva}
nebude mít očekávanou hodnotu 2, ale hodnotu 1. Co se stalo? Makro
\ukazka obsahuje makro \refstepcounter, které inkrementuje čítač, ale
současně určí, že od tohoto okamžiku se (lokálně) tanto čítač používá
pro všechna následující makra \label. Proto \label{dva} neodkazuje na
kapitolu, ale na ukázku, i když bude třeba o několik stran za ukázkou.
Napraví to až další \section.

Musíte proto udělat následující:

1. Makro \refstepcounter musí být voláno uvnitř skupiny a \label musí
být až po \refstepcounter, ale uvnitř téže skupiny.
2. Makro \theukazka musí být korektně definováno, např:
\newcommand\theukazka{\thesection.\arabic{ukazka}}.

Standardní LaTeXová prostředí jsou definována jako prostředí právě
proto, že prostředí je skupina. \refstepcounter se provede při expanzi
\caption, proto musí být \label až za \caption, jinak odkazuje na
kapitolu.

Dne 10. února 2013 21:57 nonsense <nonsense at volny.cz> napsal(a):
> Přeji pěkný pozdní večer,
>
> dle návodu ze zpravodaje CSTUG 3/1997  (kapitola 15) jsem si vytvořil
> vlastní seznam.
> Konkrétně seznam ukázek.
> Všechno pěkně funguje, jen bych docela rád mohl odkazovat v textu na
> jednotlivé ukázky pomocí makra \ref.
> A to tak, aby ve výsledku makro \ref vysázelo tvar čísla tak jak je uveden u
> příslušné ukázky, případně v seznamu ukázek.
> V tomto konkrétním příkladu ve tvaru např (1.1.1).
>
> Věděl by prosím někdo jak NATO ?
>
> Zmiňované seznamy tvořím makry:
>
> \newcounter{ukazka}[section]% definice čítače resetovaného změnou sekce
> \newcommand*\ukazka[2]{%
>     \refstepcounter{ukazka}% posun čítač na další hodnotu
> \addcontentsline{ukz}{ukazka}{\protect\numberline{\thesection\theukazka} #1}
>       #2\\%
>       Ukázka \thesection\theukazka: #1% pod ukázku napiš její číslo
> }%
> %
> \makeatletter
> \newcommand*\l at ukazka{\@dottedtocline{2}{0mm}{12mm}}
> \newcommand*\listofukazka{\chapter*{Seznam ukázek\@starttoc{ukz}}
> \makeatother
>
>
> L.Vlček
>
>
>
> _______________________________________________
> csTeX mailing list
> csTeX at cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex



-- 
Zdeněk Wagner
http://hroch486.icpf.cas.cz/wagner/
http://icebearsoft.euweb.cz




More information about the csTeX mailing list