Thread View: pl.comp.dtp.tex
7 messages
7 total messages
Started by Cezary Grądys
Fri, 14 Mar 2014 11:12
LaTeX wyrazenie regularne do zamiany znaków specjalnych
Author: Cezary Grądys
Date: Fri, 14 Mar 2014 11:12
Date: Fri, 14 Mar 2014 11:12
20 lines
1807 bytes
1807 bytes
Potrzeguję w tekscie zamienić znaki specjalne typu '\ & # %'
na odpowiedniki możliwe do wydruku. To chyba typowy problem, może ktoś
ma gotowe wyrazenie regularne?
Na razie próbuję tak (perl):
$opis_problemu =~ s/\\/\$\\backslash\$/g ;
$opis_problemu =~ s/([\&\$\%\#\_\{\}])/\\$1/g ;
$opis_problemu =~ s/~/\\~{}/g ;
Było by OK gdyby nie ten '$' dodawany w 1 linijce, w drugiej jest
zamieniany i lipa ):
A może jest inna metoda na wydruk '\' niż $\backslas$ ?
--
Cezary Grądys
czarekgr@wa.onet.pl
Re: LaTeX wyrazenie regularne do zamiany znaków specjalnych
Author: Jarosław Sokołowski
Date: Fri, 14 Mar 2014 12:10
Date: Fri, 14 Mar 2014 12:10
53 lines
2674 bytes
2674 bytes
Pan Cezary Grądys potrzebuje w tekscie zamienić znaki specjalne
typu '\ & # %' na odpowiedniki możliwe do wydruku:
> To chyba typowy problem, może ktoś ma gotowe wyrazenie regularne?
>
> Na razie próbuję tak (perl):
>
> $opis_problemu =~ s/\\/\$\\backslash\$/g ;
> $opis_problemu =~ s/([\&\$\%\#\_\{\}])/\\$1/g ;
> $opis_problemu =~ s/~/\\~{}/g ;
>
> Było by OK gdyby nie ten '$' dodawany w 1 linijce, w drugiej jest
> zamieniany i lipa ):
>
> A może jest inna metoda na wydruk '\' niż $\backslas$ ?
Zacznijmy od tego, że nie są to 'znaki specjalne' jakiegoś jednego typu,
tylko znaki, które należą do różnych *kategorii*. I tak # ma kategorię 6
(parameter character), znak % kategorię 14 (comment character), znak &
kategorię 4 (alignment tab), a znak \ kategorię 0, czyli 'active", co
oznacza, że tworzy on sekwencje bądź znaki sterujące.
Z tymi trzema pierwszymi poradzić sobie można łatwo nadając im kategorię
11 (other), do której należą na przykład znaki interpunkcyjne. Piszemy:
\catcode`\&=11
\catcode`\#=11
\catcode`\%=11
i od tej pory nie możemy przy ich pomocy tworzyć tabel, makr i komentarzy,
ale za to drukują się takie, jakie są.
Można też zaryzykować polecenie
\catcode`\\=11
co sprawi, że niczego już więcej nie zdefiniujemy. Czasem nie trzeba
więcej definicji, i to się sprawdza. Jeśli nie, to można wcześniej
nadać zerową kategorię innemu znakowi, o którym wiemy, że nie będzie
nigdy drukowany. Na przykład:
\catcode`\|=0
sprawi, że będzie można (i trzeba) pisać:
|def|foo{bar}
zamiast:
\def\foo{bar}
--
Jarek
Re: LaTeX wyrazenie regularne do zamiany znaków specjalnych
Author: Cezary Grądys
Date: Fri, 14 Mar 2014 16:06
Date: Fri, 14 Mar 2014 16:06
30 lines
2284 bytes
2284 bytes
W dniu 14.03.2014 13:10, Jarosław Sokołowski pisze: > Zacznijmy od tego, że nie są to 'znaki specjalne' jakiegoś jednego typu, > tylko znaki, które należą do różnych *kategorii*. I tak # ma kategorię 6 > (parameter character), znak % kategorię 14 (comment character), znak & > kategorię 4 (alignment tab), a znak \ kategorię 0, czyli 'active", co > oznacza, że tworzy on sekwencje bądź znaki sterujące. > > Z tymi trzema pierwszymi poradzić sobie można łatwo nadając im kategorię > 11 (other), do której należą na przykład znaki interpunkcyjne. Piszemy: > > \catcode`\&=11 > \catcode`\#=11 > \catcode`\%=11 > > i od tej pory nie możemy przy ich pomocy tworzyć tabel, makr i komentarzy, > ale za to drukują się takie, jakie są. > Dzięki serdeczne, to się może przyda, ale tu akurat mam to w tabeli. Wpadłem na taki pomysł, że zamienię ten $ na tabulację i nie bedzie przeszkadzał, a potem z powrotem tabulację na $. Trochę to nieelegancko, ale powinno zadziałać. Tabulacji raczej w tym tekscie nie będzie, bo jest to czytane z pliku csv gdzie pola rozdzielone są tabulacją. Więc jakby co problem wystąpi wcześniej. -- Cezary Grądys czarekgr@wa.onet.pl
Re: LaTeX wyrazenie regularne do zamiany znaków specjalnych
Author: Jarosław Sokołowski
Date: Fri, 14 Mar 2014 17:27
Date: Fri, 14 Mar 2014 17:27
45 lines
3468 bytes
3468 bytes
Pan Cezary Grądys napisał: >> Zacznijmy od tego, że nie są to 'znaki specjalne' jakiegoś jednego typu, >> tylko znaki, które należą do różnych *kategorii*. I tak # ma kategorię 6 >> (parameter character), znak % kategorię 14 (comment character), znak & >> kategorię 4 (alignment tab), a znak \ kategorię 0, czyli 'active", co >> oznacza, że tworzy on sekwencje bądź znaki sterujące. >> >> Z tymi trzema pierwszymi poradzić sobie można łatwo nadając im kategorię >> 11 (other), do której należą na przykład znaki interpunkcyjne. Piszemy: >> >> \catcode`\&=11 >> \catcode`\#=11 >> \catcode`\%=11 >> >> i od tej pory nie możemy przy ich pomocy tworzyć tabel, makr i komentarzy, >> ale za to drukują się takie, jakie są. > > Dzięki serdeczne, to się może przyda, ale tu akurat mam to w tabeli. > Wpadłem na taki pomysł, że zamienię ten $ na tabulację i nie bedzie > przeszkadzał, a potem z powrotem tabulację na $. Trochę to nieelegancko, > ale powinno zadziałać. Tabulacji raczej w tym tekscie nie będzie, bo > jest to czytane z pliku csv gdzie pola rozdzielone są tabulacją. Więc > jakby co problem wystąpi wcześniej. Rolę tabulatora niekoniecznie musi pełnić ampersand (&), kategorię 4 można nadać również innemu znakowi, na przykład "|" i łykać tabele, w których kolumny oddzielane są oldskulowo znakiem kreski pionowej. TeX nie jest systemem, w którym znaki alfabetu wejściowego pełnią z góry określoną funkcję. To można zmieniać, można określić co jest, a co nie jest literą, co jest tabulatorem, co zaznacza komentarz itd. Jak komuś żal znaków ASCII na te specjalne zastosowania, może użyć znaków z drugiej połówki tabeli ośmiobitowyej i na przykład komentarze oznaczać przez §, a uwalniając % jako normalnie drukowany znak. Teraz dopiero zauważyłem, że w opisywanej sytuacji czytanie inputu ze znakami o niedrukowalnych kategoriach, to tylko część problemu. Zdaje się, że problemem jest również drukowanie tych znaków. Napisanie $\backslash$, gdy chcemy po prostu uzyskać "\", to chyba najgorsze rozwiązanie. Lepiej napisać \char92. W przypadku użycia $$, otrzymamy znak z zupełnie innego fontu, przeznaczonego do składu wyrażeń matematycznych. -- Jarek
Re: LaTeX wyrazenie regularne do zamiany znaków specjalnych
Author: Cezary Grądys
Date: Tue, 18 Mar 2014 14:22
Date: Tue, 18 Mar 2014 14:22
38 lines
3451 bytes
3451 bytes
W dniu 14.03.2014 18:27, Jarosław Sokołowski pisze: > Rolę tabulatora niekoniecznie musi pełnić ampersand (&), kategorię 4 > można nadać również innemu znakowi, na przykład "|" i łykać tabele, > w których kolumny oddzielane są oldskulowo znakiem kreski pionowej. > TeX nie jest systemem, w którym znaki alfabetu wejściowego pełnią > z góry określoną funkcję. To można zmieniać, można określić co jest, > a co nie jest literą, co jest tabulatorem, co zaznacza komentarz itd. > Jak komuś żal znaków ASCII na te specjalne zastosowania, może użyć > znaków z drugiej połówki tabeli ośmiobitowyej i na przykład komentarze > oznaczać przez §, a uwalniając % jako normalnie drukowany znak. > > Teraz dopiero zauważyłem, że w opisywanej sytuacji czytanie inputu > ze znakami o niedrukowalnych kategoriach, to tylko część problemu. > Zdaje się, że problemem jest również drukowanie tych znaków. > Napisanie $\backslash$, gdy chcemy po prostu uzyskać "\", to chyba > najgorsze rozwiązanie. Lepiej napisać \char92. W przypadku użycia > $$, otrzymamy znak z zupełnie innego fontu, przeznaczonego do składu > wyrażeń matematycznych. > Prawdziwym problemem jest to, że jest to wydruk raportu z bazy danych i tak naprawdę nie wiem co tam może zostać wpisane przez użytkownika. Zakładam, że tabulacji nie będzie, bo te dane wpisuja przez przeglądarkę i tam tabulacja powoduje tylko przeskok do innego pola. Pomysł z wpisywaniem \char92 jest chyba tym co potrzebuję. A na marginesie, oryginalne wydruki z tego systemu nie zawierają praktycznie polskich znaków (zamiast ą jest spacja, tylko ł koślawo wychodzi), więc to że coś bedzie trochę nie taką czcionką to naprawdę mały problem. To bedzie połozone w szafie i leżeć pewnie przez 10 lat, albo i dłużej, nikt tego czytał nie będzie. Może w razie kontroli. Jeszcze raz dzięki. -- Cezary Grądys czarekgr@wa.onet.pl
Re: LaTeX wyrazenie regularne do zamiany znaków specjalnych
Author: Jarosław Sokołowski
Date: Tue, 18 Mar 2014 16:47
Date: Tue, 18 Mar 2014 16:47
36 lines
3238 bytes
3238 bytes
Pan Cezary Grądys napisał: > Prawdziwym problemem jest to, że jest to wydruk raportu z bazy danych i > tak naprawdę nie wiem co tam może zostać wpisane przez użytkownika. > Zakładam, że tabulacji nie będzie, bo te dane wpisuja przez przeglądarkę > i tam tabulacja powoduje tylko przeskok do innego pola. Trochę się gubię w tym, kiedy o jaką tabulację chodzi. Czy o TeXową (&), czy o znaki tabulacji ASCII (\t). Znaki tabulacji TeX zazwyczaj traktuje jak spacje, choć i to można zmienić. > Pomysł z wpisywaniem \char92 jest chyba tym co potrzebuję. Ale ja bym to zrobił inaczej. Jak się tworzy system, który ma drukować coś z baz danych, to najlepiej zrobić tak, że wszystkie znaki stamtąd pochodzące kopiowane są na wyjście jeden-do-jednego. Czyli należą do kategorii 11 (letter) lub 12 (other). Należy zacząć od sporządzenia listy legalnych znaków i filtrować na wyjściu bazy wszystko, co do tej listy nie należy. Czasem tylko może okazać się konieczny dodatkowy znak 'active', ale nie musi to wcale być standardowy "\", zerową kategorię można nadać czemuś uznanemu za 'nielegalne' -- np. jakiś ÷ lub ostatecznie litera spoza alfabetu polskiego. > A na marginesie, oryginalne wydruki z tego systemu nie zawierają > praktycznie polskich znaków (zamiast ą jest spacja, tylko ł koślawo > wychodzi), więc to że coś bedzie trochę nie taką czcionką to naprawdę > mały problem. To bedzie połozone w szafie i leżeć pewnie przez 10 lat, > albo i dłużej, nikt tego czytał nie będzie. Może w razie kontroli. Pewnie użyty jest domyślny font CMR, w którym akurat ogonków nie ma. Lepiej załadować coś innego -- najlepiej font obecny w drukarkach i w acrobet readerze (Times, Helvetica). Poza tym LaTeX w takich automatach przeważnie jest zbędny -- wystarczy plain TeX. -- Jarek
Re: LaTeX wyrazenie regularne do zamiany znaków specjalnych
Author: Przyjazny
Date: Thu, 20 Mar 2014 22:20
Date: Thu, 20 Mar 2014 22:20
42 lines
3538 bytes
3538 bytes
On 2014-03-18 14:22, Cezary Grądys <czarekgr@wa.onet.pl> wrote: > W dniu 14.03.2014 18:27, Jarosław Sokołowski pisze: > >> Rolę tabulatora niekoniecznie musi pełnić ampersand (&), kategorię 4 >> można nadać również innemu znakowi, na przykład "|" i łykać tabele, >> w których kolumny oddzielane są oldskulowo znakiem kreski pionowej. >> TeX nie jest systemem, w którym znaki alfabetu wejściowego pełnią >> z góry określoną funkcję. To można zmieniać, można określić co jest, >> a co nie jest literą, co jest tabulatorem, co zaznacza komentarz itd. >> Jak komuś żal znaków ASCII na te specjalne zastosowania, może użyć >> znaków z drugiej połówki tabeli ośmiobitowyej i na przykład komentarze >> oznaczać przez §, a uwalniając % jako normalnie drukowany znak. >> >> Teraz dopiero zauważyłem, że w opisywanej sytuacji czytanie inputu >> ze znakami o niedrukowalnych kategoriach, to tylko część problemu. >> Zdaje się, że problemem jest również drukowanie tych znaków. >> Napisanie $\backslash$, gdy chcemy po prostu uzyskać "\", to chyba >> najgorsze rozwiązanie. Lepiej napisać \char92. W przypadku użycia >> $$, otrzymamy znak z zupełnie innego fontu, przeznaczonego do składu >> wyrażeń matematycznych. >> > > > Prawdziwym problemem jest to, że jest to wydruk raportu z bazy danych i > tak naprawdę nie wiem co tam może zostać wpisane przez użytkownika. > Zakładam, że tabulacji nie będzie, bo te dane wpisuja przez przeglądarkę > i tam tabulacja powoduje tylko przeskok do innego pola. > Pomysł z wpisywaniem \char92 jest chyba tym co potrzebuję. > A na marginesie, oryginalne wydruki z tego systemu nie zawierają > praktycznie polskich znaków (zamiast ą jest spacja, tylko ł koślawo > wychodzi), więc to że coś bedzie trochę nie taką czcionką to naprawdę > mały problem. To bedzie połozone w szafie i leżeć pewnie przez 10 lat, > albo i dłużej, nikt tego czytał nie będzie. Może w razie kontroli. > Jeszcze raz dzięki. Właściwie czy są jakieś przeciwwskazania do użycia \verbatim z pakietu verbatim? Jeżeli potrzeba, żeby to było zwykłym krojem to można przedefiniować \verbatim@font. Działa w polach typu "p", w zwykłych da się niestety tylko skorzystać z \verb. Ewentualnie jeżeli to nie jest możliwe, to w dokumentacji tegoż pakietu jest dość dokładnie napisane co jak jest zrobione i dlaczego.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads