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

Kopírování češtiny z PDF

640 views
Skip to first unread message

petr zemánek

unread,
Feb 15, 2012, 3:56:20 PM2/15/12
to
Dobrý den,
měl bych dotaz ohledně nastavení pro pdfLaTeX, aby bylo možné korektně
kopírovat text z PDF souboru. Používat toto nastavení

\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[czech]{babel}
\usepackage{mathptmx}

A když zkopíruji text "Plné jméno autora včetně titulů" (takto je i
zadán ve zdrojovém souboru; ale předpokládám, ze zadání pomocí \v{c}
apod., by ke změně nevedlo), tak dostanu toto

Plné jméno autora vˇcetnˇe titul°u

Je to možné docílit správného kopírování?

S pozdravem
Petr Zemánek

Robert Marik

unread,
Feb 15, 2012, 4:37:41 PM2/15/12
to Czech and Slovak TeX-related mailing list
Ahoj Petre, zkus http://tilia.wikidot.com/diakritika-v-pdf
Robert

2012/2/15 petr zemánek <petr.z...@gmail.com>:
> _______________________________________________
> csTeX mailing list
> cs...@cs.felk.cvut.cz
> http://lists.felk.cvut.cz/mailman/listinfo/cstex

Pavel Striz

unread,
Feb 15, 2012, 4:32:28 PM2/15/12
to Czech and Slovak TeX-related mailing list
Dobrý večer,
 
já používám IL2 kódování, XeLaTeX+fontspec balíček a volám si řezy \setmainfont{[csr10]}.
Pro kódování T1 by mohl být nápomocen balíček cmap.
V pdfLaTeXu či LuaLaTeXu jsem to při IL2 nevyřešil, ale užití rodiny Latin Modern při T1 by mělo zafungovat.
 
S pozdravy ps
 
 

Petr Sojka

unread,
Feb 15, 2012, 5:44:14 PM2/15/12
to Czech and Slovak TeX-related mailing list
Je to po porozumění mechanismu CMAP (Character mapping)
v PDF možné docílit.

Aby šlo text z PDF kopírovat, musí být informace
o Unicode pozicích vysázených znaků z fontů v PDF
použitých do PDF generující aplikací (pdftexem)
vložena. To stále pro mnohé fonty není splněno.
Některé virtuální fonty skládají znak z více glyfů
fontu (jak v případě mathptmx uváděném výše), některé
fonty zase mají pojmenování znaků takové, že
nelze z názvu znaku pozici Unicode (tj. jednoznačnou
identifikaci znaku) uhádnout, a dělat OCR je nespolehlivý
kanón na vrabce.

Autor resp. aplikace musí mapování znaků sdělit a do PDF
uložit. O to se stará balík cmap, viz `texdoc cmap`.
Ten zatím nepodporuje všechny druhy mapování,
například selhává v případech když by měl mapovat
víceglyfové znaky (ne vždy to může být žádoucí).
Proto pro docílení funcionality je pragmatické
použít osmibitové fonty v balíkem cmap podporovaných
kódováních (T1 ap.).

Pokud laskavý čtenář dočetl až sem, a chce si
ověřit porozumění principu, nemusí ostránkovávat
pro správné řešení otázky na konci tohoto emailu.

Pěkný zbytek dne
Petr Sojka



































































\documentclass{minimal}
\usepackage[utf8]{inputenc}
\usepackage{cmap} % <- zajistí vložení CMap
\usepackage[T1]{fontenc}
\usepackage[czech]{babel}
%\usepackage{mathptmx}
\usepackage{tgtermes} % osmibitový "Times"
\begin{document}
Plné jméno autora včetně titulů.
\end{document}

Tomas Davidek

unread,
Feb 15, 2012, 5:59:23 PM2/15/12
to cs...@cs.felk.cvut.cz
Dobrý večer,
já jsem narazil na možná trochu související problém. Mám dokument,
který překládám pomocí cslatex a vyrábím z něj pdf pomocí dvipdf (použít
přímo pdflatex neumím, protože z některých EPS obrázků potřebuji vyřezat
netriviální části, na což používám \psclip). Diakritika se mi v PDF
zobrazuje i kopíruje správně, ovšem acrobat zobrazuje v levé části
automaticky i obsah (bookmarks), kde je už diakritika neúplná. Písmenka
s háčky se zobrazují bez háčků, kupodivu se ale "ž" zobrazuje i v tomto
navigačmím obsahu správně. Čitelné to sice je, ale k dokonalosti trocha
chybí....

Hlavička vypadá standardně:
\usepackage[utf8]{inputenc}
\usepackage{czech}
(zkoušel jsem i použití \usepackage[T1]{fontenc}, ale 68dn7 efekt to
nemělo).

Nemáte s tím prosím někdo nějaké zkušenosti?

Zdraví
Tomáš Davídek

On 02/15/2012 10:37 PM, Robert Marik wrote:
> Ahoj Petre, zkus http://tilia.wikidot.com/diakritika-v-pdf
> Robert
>
> 2012/2/15 petr zemánek<petr.z...@gmail.com>:
>

Zdenek Wagner

unread,
Feb 15, 2012, 6:39:16 PM2/15/12
to Czech and Slovak TeX-related mailing list
2012/2/15 Tomas Davidek <Tomas....@cern.ch>:
> Dobrý večer,
>  já jsem narazil na možná trochu související problém. Mám dokument, který
> překládám pomocí cslatex a vyrábím z něj pdf pomocí dvipdf (použít přímo
> pdflatex neumím, protože z některých EPS obrázků potřebuji vyřezat
> netriviální části, na což používám \psclip). Diakritika se mi v PDF
> zobrazuje i kopíruje správně, ovšem acrobat zobrazuje v levé části
> automaticky i obsah (bookmarks), kde je už diakritika neúplná. Písmenka s
> háčky se zobrazují bez háčků, kupodivu se ale "ž" zobrazuje i v tomto
> navigačmím obsahu správně. Čitelné to sice je, ale k dokonalosti trocha
> chybí....
>
> Hlavička vypadá standardně:
> \usepackage[utf8]{inputenc}
> \usepackage{czech}
> (zkoušel jsem i použití \usepackage[T1]{fontenc}, ale 68dn7 efekt to
> nemělo).
>
> Nemáte s tím prosím někdo nějaké zkušenosti?
>
Bookmarks jsou defaultně kódovány v Adobe StandardEncoding, které
podporuje pouze západoevropské jazyky. Musel byste bookmarks vytvářet
přímo v Unicode a přidávat BOM (nejsem si jist, zda mají být v UTF-8,
UTF-16, nebo kódovány ještě jinak).

> Zdraví
>               Tomáš Davídek
>
>
> On 02/15/2012 10:37 PM, Robert Marik wrote:
>>
>> Ahoj Petre, zkus http://tilia.wikidot.com/diakritika-v-pdf
>> Robert
>>
>> 2012/2/15 petr zemánek<petr.z...@gmail.com>:
>>
>>>
>>> _______________________________________________
>>> csTeX mailing list
>>> cs...@cs.felk.cvut.cz
>>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>>
>>
>> _______________________________________________
>> csTeX mailing list
>> cs...@cs.felk.cvut.cz
>> http://lists.felk.cvut.cz/mailman/listinfo/cstex
>>
>
>
> _______________________________________________
> csTeX mailing list
> cs...@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

Petr Sojka

unread,
Feb 15, 2012, 7:02:46 PM2/15/12
to Czech and Slovak TeX-related mailing list
On Wed, Feb 15, 2012 at 11:59:23PM +0100, Tomas Davidek wrote:
Dobrý večer,
> já jsem narazil na možná trochu související problém. Mám dokument,
> který překládám pomocí cslatex a vyrábím z něj pdf pomocí dvipdf
> (použít přímo pdflatex neumím, protože z některých EPS obrázků
> potřebuji vyřezat netriviální části, na což používám \psclip).
> Diakritika se mi v PDF zobrazuje i kopíruje správně, ovšem acrobat
> zobrazuje v levé části automaticky i obsah (bookmarks), kde je už
> diakritika neúplná. Písmenka s háčky se zobrazují bez háčků,
> kupodivu se ale "ž" zobrazuje i v tomto navigačmím obsahu správně.
> Čitelné to sice je, ale k dokonalosti trocha chybí....

Záložky jsou technicky jiný problém: PDF formát je ukládá
jen jako textový řetězec, není možno určit font, kterým
je zobrazován ani ho do PDF vložit, a je to tedy
(u _portable_ document formátu) bohužel neportabilní
(zobrazení záložek je závislé na systémovém fontu daného OS).
Adobe tedy od jisté verze PDF specifikace aspoň umožňuje
záložkové řetězce ukládat jako Unicode string (začínající
dvoubytem FEFF). To podporuje hyperref v option unicode
a další makrobalíky.
Takže to začne fungovat když
-- třeba s pomocí balíku hyperref a příbuzných (od H. Oberdiek)
zajistíte, aby texty do záložek expandovaly do správných
Unicode řetězců
&&
-- čtenář bude mít na svém stroji pro zobrazení těchto řetězců
dostačující systémový font
Příklad LaTeXové hlavičky již ponechávám laskavému čtenáři jako
cvičení ;-).

Nic holt není dokonalé, ani portabilita portabilního formátu :-(.

S pozdravem
Petr Sojka

> Hlavička vypadá standardně:
> \usepackage[utf8]{inputenc}
> \usepackage{czech}
> (zkoušel jsem i použití \usepackage[T1]{fontenc}, ale 68dn7 efekt to
> nemělo).
>
> Nemáte s tím prosím někdo nějaké zkušenosti?
>
> Zdraví
> Tomáš Davídek
>
> On 02/15/2012 10:37 PM, Robert Marik wrote:
> >Ahoj Petre, zkus http://tilia.wikidot.com/diakritika-v-pdf
> >Robert
> >
> >2012/2/15 petr zemánek<petr.z...@gmail.com>:

Pavel Striz

unread,
Feb 16, 2012, 1:49:08 AM2/16/12
to Czech and Slovak TeX-related mailing list
Ještě jsem si vzpomněl, že XeLaTeX má též své mouchy i při některých TTF/OTF. Kolega Trušník z vedlejší fakulty podrobně zkoumal a nebyl schopen z PDF vykopírovat ligatury (th, ffi, ffl) a kapitálky, tedy přešel ve finále na LuaLaTeX a TeX Gyre Scholar, Linux Libertine a Biolinum. Pak byl naprosto spokojen.
 
hezký den od ps
 
 
----- Original Message -----
Sent: Wednesday, February 15, 2012 10:32 PM
Subject: Re: [cstex] Kopírování češtiny z PDF

Dobrý večer,
 
já používám IL2 kódování, XeLaTeX+fontspec balíček a volám si řezy \setmainfont{[csr10]}.
Pro kódování T1 by mohl být nápomocen balíček cmap.
V pdfLaTeXu či LuaLaTeXu jsem to při IL2 nevyřešil, ale užití rodiny Latin Modern při T1 by mělo zafungovat.
 
S pozdravy ps
 
 
----- Original Message -----
Newsgroups: cz.comp.cstex
Sent: Wednesday, February 15, 2012 9:56 PM
Subject: [cstex] Kopírování češtiny z PDF

_______________________________________________
csTeX mailing list
cs...@cs.felk.cvut.cz
http://lists.felk.cvut.cz/mailman/listinfo/cstex

petr zemánek

unread,
Feb 16, 2012, 2:31:47 AM2/16/12
to
Dobrý den,
děkuji za odpověď. Ještě bych měl jeden doplňující dotaz. Existuje
nějaký způsob, jak toho docílit i pro fonty typu mathptmx nebo je
nutné počkat, zda se to nevyřeší v nějaké aktualizaci cmap nebo
pdftexu?
PZ

Pavel Striz

unread,
Feb 16, 2012, 3:03:39 AM2/16/12
to Czech and Slovak TeX-related mailing list
Alternativně lze pracovat s volbou CJKbookmarks při balíčku hyperref.
 
Pro záložkové příznivce lze doporučit balíček bookmark, který umí na záložky barvu, řezy bold/italic i z nich udělat hyperlink. Je to poměrně příjemné oživení PDF. Ještě jsem experimentálně nevyzkoušel, ale podobně by na tom měl být i balíček navigator.
 
Hezký den od ps
 
 
 
----- Original Message -----
From: Petr Sojka
Sent: Thursday, February 16, 2012 1:02 AM
Subject: Re: [cstex] Kopírování češtiny z PDF

Petr Vokac

unread,
Feb 16, 2012, 3:24:19 AM2/16/12
to cs...@cs.felk.cvut.cz
Myslim, ze zachovani diakritiky pri kopirovani z pdf zajistuje
balicek cmap:

\documentclass[12pt,onecolumn,twoside,a4paper]{article}
% cmap zajistí správné kopírování textů v češtině
\usepackage{cmap}
\usepackage[czech,english]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
...

Diakritiku ze zalozek vyhazuji pomoci \texorpdfstring,
napriklad:

\section{
\texorpdfstring
{Závěry}
{Zavery}
}

Petr Vokac

On Wed, 2012-02-15 at 12:56 -0800, petr zemánek wrote:
> Dobrý den,
> měl bych dotaz ohledně nastavení pro pdfLaTeX, aby bylo možné korektně
> kopírovat text z PDF souboru. Používat toto nastavení
>
> \usepackage[utf8]{inputenc}
> \usepackage[T1]{fontenc}
> \usepackage[czech]{babel}
> \usepackage{mathptmx}
>
> A když zkopíruji text "Plné jméno autora včetně titulů" (takto je i
> zadán ve zdrojovém souboru; ale předpokládám, ze zadání pomocí \v{c}
> apod., by ke změně nevedlo), tak dostanu toto
>
> Plné jméno autora v*cetn*e titul°u

Zdenek Wagner

unread,
Feb 16, 2012, 5:18:36 AM2/16/12
to Czech and Slovak TeX-related mailing list
2012/2/16 Petr Vokac <v...@ujv.cz>:
> Myslim, ze zachovani diakritiky pri kopirovani z pdf zajistuje
> balicek cmap:
>
Tohle je pravda pouze částečná. Balíček cmap vloží do PDF tabulku
toUnicode. Tato tabulka obsahuje mapování byte (v kódování fontu) ->
string (unicode). Pokud font nemá příslušný glyf a je to řešeno jako
sekvence combining diacritical mark + character, pak to v principu
nejde, protože toUnicode nepovoluje zapsat mapování typu string ->
string. Problém by se dal vyřešit mapováním pomocí ActualString. V
popisu PDF je to demonstrováno na němčině, kde např. slovo Zucker
rozdělíte jako Zuk-/ker. Vložíte tedy mapování k- -> c. Na rozdíl od
toUnicode, což je tabulka vázaná na daný font, ActualString musíte
znovu uvést u každého výskytu. TeX má při sazbě pouze metrické
informace, ale neví, jak bude nakonec znak realizován. Tuto informaci
nezjistíte ani v pdftexu, ani v xetexu, jedinou možností je luatex,
kdy se dostanete programově k jakékéliv vlastnosti fontu. Musíte tedy
naprogramovat stejný algoritmus, který bude používán interně. Tím
zjistíte, jak bude slovo vloženo do PDF. K tomuto řetězci pak musíte
vygenerovat řetězec, který bude použit při kopírování a při
vyhledávání. Nezapomeňte vložit BOM (viz odpovědi Petra Sojky).

Závěr: Pokud jde o vytvoření PDF, který si (skoro) každý přečte a
vytiskne, pak máte hodně volnou ruku (ale je téměř nezbytné všechny
fonty vložit). Pokud je cílem PDF, z něhož jde i kopírovat, musíte
použít font, který to umožňuje.

Pavel Striz

unread,
Feb 24, 2014, 4:53:11 AM2/24/14
to
Pomohlo mi následující (pdflatex; při luainputenc s lualatexem):

\documentclass{article}
\usepackage[utf8]{inputenc} % luainputenc
\usepackage[czech]{babel}
\usepackage[IL2]{fontenc}
\input glyphtounicode
\pdfgentounicode=1
\begin{document}
ěščřžýáíéĚŠČŘŽÝÁÍÉ
\end{document}

Je to vysázené a z PDF vykopírovatelné, ale zlobí (snad si udělat konvertítko mimo TeXové prostředí?):
\newwrite\indexist
\immediate\openout\indexist=pokus.txt
\immediate\write\indexist{ěščřžýáíéĚŠČŘŽÝÁÍÉ}
\immediate\closeout\indexist

Při znacích, které nejsou v IL2 kódování (polské a jiné) se přepínám mezi T1 a IL2:
\usepackage[T1,IL2]{fontenc} % preambule
\def\polstina#1{\fontencoding{T1}\selectfont#1\fontencoding{IL2}\selectfont}

Asi nejrychlejší je přejít na Latin Modern, díky za rychlý tip panu Hajtmarovi (lualatex; tam se mi příkaz \setmainfont{[csr10]} jako v xelatexu nechytl -- omlouvám se, nehledám řešení; naopak \font\muj=csr10 \muj sice řeší zápis do souboru, ale nikoliv sazbu a vykopírovatelnost z PDF):

\documentclass{article}
\usepackage{luatextra}
\begin{document}
ěščřžýáíéĚŠČŘŽÝÁÍÉ
\newwrite\indexist
\immediate\openout\indexist=pokus.txt
\immediate\write\indexist{ěščřžýáíéĚŠČŘŽÝÁÍÉ}
\immediate\closeout\indexist
\end{document}

Hezký den od ps


Dne středa, 15. února 2012 22:32:28 UTC+1 Pavel Striz napsal(a):
0 new messages