Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[gust-l] [Q] zawartość środowiska, parametrem makra

9 views
Skip to first unread message

Jacek Kmiecik

unread,
Mar 8, 2012, 4:22:04 PM3/8/12
to

Witam,
mam drobny problem z przypisaniem zawartości środowiska... na taka modłę:

\begin{xxx}
abc...xyz
\end{xxx}

i chciałbym mieć możliwość wykorzystannia zawartości, np. wywołując
polecenie \xxx.


Jak tego dokonać? Bo jest to pewnie tak proste, że moje poszukiwania
zaprowadziły mnie w ślepy zaułek.


--jk

- Jacek Kmiecik <j...@agh.edu.pl> ------------ http://www.kmiecik.pl --
Uczelniane Centrum Informatyki, tel. (+48-12) 617.34.77
Akademia Górniczo-Hutnicza, Kraków C-1, IVp., pok. 415
--------------------------------------------------[+48 501.494.601]--

tomasz przechlewski

unread,
Mar 8, 2012, 4:28:16 PM3/8/12
to
W dniu 08.03.2012 22:22, Jacek Kmiecik pisze:
>
> Witam,
> mam drobny problem z przypisaniem zawartości środowiska... na taka modłę:
>
> \begin{xxx}
> abc...xyz
> \end{xxx}
>
> i chciałbym mieć możliwość wykorzystannia zawartości, np. wywołując
> polecenie \xxx.
>
>
> Jak tego dokonać? Bo jest to pewnie tak proste, że moje poszukiwania
> zaprowadziły mnie w ślepy zaułek.

\newenvironment{qqq}{1}{2}

\begin{document}

\qqq \endqqq


--t

Marcin Borkowski

unread,
Mar 8, 2012, 4:44:52 PM3/8/12
to
Dnia 2012-03-08, o godz. 22:22:04
Jacek Kmiecik <j...@agh.edu.pl> napisał(a):

>
> Witam,
> mam drobny problem z przypisaniem zawartości środowiska... na taka
> modłę:
>
> \begin{xxx}
> abc...xyz
> \end{xxx}
>
> i chciałbym mieć możliwość wykorzystannia zawartości, np. wywołując
> polecenie \xxx.

Nie jestem pewien, czy dobrze zrozumiałem pytanie, ale czy chodzi Ci o
pakiet environ?

> Jak tego dokonać? Bo jest to pewnie tak proste, że moje poszukiwania
> zaprowadziły mnie w ślepy zaułek.

Pozdrawiam

--
Marcin Borkowski
http://mbork.pl

Jacek Kmiecik

unread,
Mar 8, 2012, 5:26:20 PM3/8/12
to
On Thu, 8 Mar 2012, tomasz przechlewski wrote:

> \newenvironment{qqq}{1}{2}
> \begin{document}
> \qqq \endqqq

Nie, to chyba nie o to chodzi!

\begin{xxx}
abc...xyz
\end{xxx}

mam użyć poza preambułą, czyli w treści dokumentu, a później w dowolnym
miejscu użyć tej zawartości \yyy. (pomyliłem poprzednio - \xxx nie może
być, jeśli mam środowisko {xxx})

Potrzeba to zrobić w koszernym LaTeX-u... więc kombinowałem tak:

\renewenvironment{xxx}{%
\gdef\yyy\begingroup
}
{\endgroup}

Ale to nie działa!

Jacek Kmiecik

unread,
Mar 8, 2012, 5:28:53 PM3/8/12
to
On Thu, 8 Mar 2012, Marcin Borkowski wrote:

> Nie jestem pewien, czy dobrze zrozumiałem pytanie, ale czy chodzi Ci o
> pakiet environ?

Chcę to koszernie, poleceniami LaTeX-a... bo chyba można względnie
prosto?!

tomasz przechlewski

unread,
Mar 8, 2012, 5:42:17 PM3/8/12
to
W dniu 08.03.2012 23:26, Jacek Kmiecik pisze:
> On Thu, 8 Mar 2012, tomasz przechlewski wrote:
>
>> \newenvironment{qqq}{1}{2}
>> \begin{document}
>> \qqq \endqqq
>
> Nie, to chyba nie o to chodzi!
>
> \begin{xxx}
> abc...xyz
> \end{xxx}
>
> mam użyć poza preambułą, czyli w treści dokumentu, a później w dowolnym
> miejscu użyć tej zawartości \yyy. (pomyliłem poprzednio - \xxx nie może
> być, jeśli mam środowisko {xxx})
>

treść środowiska ma zostać zapamiętana ?

--t

Jacek Kmiecik

unread,
Mar 8, 2012, 6:00:06 PM3/8/12
to
On Thu, 8 Mar 2012, tomasz przechlewski wrote:

> treść środowiska ma zostać zapamiętana ?

Tak! Taki kaprys... to zwykle będzie 1--3 zdania, czyli akapity.

Chodzi o łatwość użycia, przez średnio rozgarniętego użytkownika.

Marcin Borkowski

unread,
Mar 8, 2012, 7:10:23 PM3/8/12
to
Dnia 2012-03-08, o godz. 23:28:53
Jacek Kmiecik <j...@agh.edu.pl> napisał(a):

> On Thu, 8 Mar 2012, Marcin Borkowski wrote:
>
> > Nie jestem pewien, czy dobrze zrozumiałem pytanie, ale czy chodzi
> > Ci o pakiet environ?
>
> Chcę to koszernie, poleceniami LaTeX-a... bo chyba można względnie
> prosto?!

Hm - raczej wątpię. Jedyne znane mi rozwiązanie (poza trikami z
lualatexem, gdzie pewnie to się też daje zrobić) to właśnie environ (no
i narzędzia verbatimopodobne, ale to odrobinę - ale chyba tylko
odrobinę;) - inna bajka). I nie jest to zadanie trywialne.

Jeśli wiesz, że wewnątrz nie będzie innego środowiska, to pewnie da się
to zrobić przy użyciu delimited arguments - ale to jest imho dalekie od
koszerności (i podatne na błędy).

A co Ci się nie podoba w pakiecie environ? Jest w każdej rozsądnej
dystrybucji, ostatnia wersja jest z 2008 roku, więc nie wymaga
"krwawiącego ostrza", autorem jest nie byle kto, bo Will Robertson z
LaTeX3 teamu...

> --jk

Jacek Kmiecik

unread,
Mar 9, 2012, 3:41:13 AM3/9/12
to
On Fri, 9 Mar 2012, Marcin Borkowski wrote:

>> Chcę to koszernie, poleceniami LaTeX-a... bo chyba można względnie
>> prosto?!
>
> Hm - raczej wątpię. Jedyne znane mi rozwiązanie (poza trikami z
> lualatexem, gdzie pewnie to się też daje zrobić) to właśnie environ (no
> i narzędzia verbatimopodobne, ale to odrobinę - ale chyba tylko
> odrobinę;) - inna bajka). I nie jest to zadanie trywialne.
>
> Jeśli wiesz, że wewnątrz nie będzie innego środowiska, to pewnie da się
> to zrobić przy użyciu delimited arguments - ale to jest imho dalekie od
> koszerności (i podatne na błędy).

No to mnie nieco zaskoczyłeś... wydawało mi sie to proste, a tylko moja
niewiedza lansuje kiepskie rozwiązania. Wychodz na to, ze jeednak trzeba
sięgnąć do czegoś zewnątrz.

> A co Ci się nie podoba w pakiecie environ? Jest w każdej rozsądnej
> dystrybucji, ostatnia wersja jest z 2008 roku, więc nie wymaga
> "krwawiącego ostrza", autorem jest nie byle kto, bo Will Robertson z
> LaTeX3 teamu...

OK! przyglądnę się temu... Liczę wszelako na trywialne rozwiązanie
plain/latexem ;)

Marcin Borkowski

unread,
Mar 9, 2012, 12:25:39 PM3/9/12
to
Dnia 2012-03-09, o godz. 09:41:13
Jacek Kmiecik <j...@agh.edu.pl> napisał(a):

> On Fri, 9 Mar 2012, Marcin Borkowski wrote:
>
> >> Chcę to koszernie, poleceniami LaTeX-a... bo chyba można względnie
> >> prosto?!
> >
> > Hm - raczej wątpię. Jedyne znane mi rozwiązanie (poza trikami z
> > lualatexem, gdzie pewnie to się też daje zrobić) to właśnie environ
> > (no i narzędzia verbatimopodobne, ale to odrobinę - ale chyba tylko
> > odrobinę;) - inna bajka). I nie jest to zadanie trywialne.
> >
> > Jeśli wiesz, że wewnątrz nie będzie innego środowiska, to pewnie da
> > się to zrobić przy użyciu delimited arguments - ale to jest imho
> > dalekie od koszerności (i podatne na błędy).
>
> No to mnie nieco zaskoczyłeś... wydawało mi sie to proste, a tylko
> moja niewiedza lansuje kiepskie rozwiązania. Wychodz na to, ze
> jeednak trzeba sięgnąć do czegoś zewnątrz.
>
> > A co Ci się nie podoba w pakiecie environ? Jest w każdej rozsądnej
> > dystrybucji, ostatnia wersja jest z 2008 roku, więc nie wymaga
> > "krwawiącego ostrza", autorem jest nie byle kto, bo Will Robertson z
> > LaTeX3 teamu...
>
> OK! przyglądnę się temu... Liczę wszelako na trywialne rozwiązanie
> plain/latexem ;)

No oczywiście mógłbyś zrobić coś takiego jak
\def\env#1\end{...}
Szybkie zerknięcie na source2e.pdf pokazuje, że to mogłoby działać.
Tyle, że:
* nie miałbyś kontroli, czy zostało zamknięte właściwe środowisko -
musiałbyś robić to sam w makrze \env;
* gdybyś w \begin{env} ... \end{env} chciał móc zawierać inne
środowiska, miałbyś problem: trzeba by np. sprawdzać, co jest po
\end, i ewentualnie pociągnąć dalej zabieranie tokenów (do następnego
\end);
* tak więc - jakkolwiek pewnie dałoby się to zrobić - byłoby to dalekie
zarówno od trywialności, jak i koszerności.

Pakiet environ, mimo, że też można uznać, że niekoszerny (zdaje mi
się, że stosuje metody verbatimowate), jednak jest w jakimś sensie (jak
pisałem) standardowy, no i ktoś już za nas odwalił ciężką robotę
napisania go;).

Nadal jestem ciekaw, jak by to wyglądało w luatexu/ConTeXcie.

Last but not least: pytałeś na TeX.SE?

Jacek Kmiecik

unread,
Mar 11, 2012, 11:41:36 AM3/11/12
to
On Fri, 9 Mar 2012, Marcin Borkowski wrote:

> Pakiet environ, mimo, że też można uznać, że niekoszerny (zdaje mi
> się, że stosuje metody verbatimowate), jednak jest w jakimś sensie (jak
> pisałem) standardowy, no i ktoś już za nas odwalił ciężką robotę
> napisania go;).

Nie wiem co stosuje, ale w moim zastosowaniu się nie sprawdza -- oto
miminal-sampl:

%&pdflatex
\documentclass{book}

\usepackage{environ}
\NewEnviron{test}{\let\xxxx\BODY}

\begin{document}

\begin{test}
ABCDEFGHIJKLmnopqrstuvwxyz
\end{test}

\fbox{\xxxx}

\end{document}


i dostaję:

! Undefined control sequence.
<argument> \xxxx

l.10 \fbox{\xxxx}

?


Czy to nadal pozostaje awykonalne?

Paweł Wlaź

unread,
Mar 11, 2012, 4:29:21 PM3/11/12
to


On Sun, 11 Mar 2012, Jacek Kmiecik wrote:

> \NewEnviron{test}{\let\xxxx\BODY}

Wszystko fajnie, tylko dorzuć jeszcze

\global

bezpośrednio przed \let

(czyli \global\let\xxxx\BODY)

i ma działać

Paweł

Jacek Kmiecik

unread,
Mar 11, 2012, 4:51:56 PM3/11/12
to
On Sun, 11 Mar 2012, Paweł Wlaź wrote:

> Wszystko fajnie, tylko dorzuć jeszcze
> \global
> bezpośrednio przed \let
> (czyli \global\let\xxxx\BODY)
> i ma działać

Rzeczywiście. Fakt oczywisty...

Czy można jeszcze wiedzieć do czego praktycznie wykorzysytać \collect@body
(\Collect@Body), bo z tego co wyrozumiałem to synonim \BODY, jeno do nieco
innych konstrukcji... Przykłady z dokumentacji raczej mało intuicyjne.

Jacek Kmiecik

unread,
Mar 11, 2012, 7:19:12 PM3/11/12
to


>> \NewEnviron{test}{\global\let\xxxx\BODY}

No i kolejna katarakta -- po testach, zaimplementowano w æyciowy przykład
z następującym efektem:

pdftex cgw2011_habala.tex
This is pdfTeX, Version 3.1415926-1.40.11 (Web2C 2010)
restricted \write18 enabled.
(c:/texlive/2010/texmf/web2c/cp1250pl.tcx)
entering extended mode
(./cgw2011_habala.tex
LaTeX2e <2009/09/24>
Babel <v3.8l> and hyphenation patterns for english, dumylang,
nohyphenation, po
lish, loaded.
(c:/texlive/2010/texmf-dist/tex/latex/base/article.cls
Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
(c:/texlive/2010/texmf-dist/tex/latex/base/size10.clo))
(../lofo/environ.sty)
(c:/texlive/2010/texmf-dist/tex/latex/base/ifthen.sty)
(c:/texlive/2010/texmf-dist/tex/latex/base/exscale.sty)
(c:/texlive/2010/texmf-dist/tex/latex/tools/array.sty)
(c:/texlive/2010/texmf-dist/tex/latex/tools/tabularx.sty)

! LaTeX Error: \env@abstract@save@env undefined.

See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...

l.342

? x


Zmieniono kolejność wywołania pakietów, miejsca definiowania makra
\NewEnviron czy \RenewEnviron -- i kicha!

Chyba latex mnie przerósł...
0 new messages