calibre Användarhandbok

Storlek: px
Starta visningen från sidan:

Download "calibre Användarhandbok"

Transkript

1 calibre Användarhandbok Utgåva Kovid Goyal January 15, 2016

2

3 Innehåll 1 Avsnitten 3 Python Modulindex 285 Index 287 i

4 ii

5 calibre är en e-bokbibliotekshanterare. Den kan visa, konvertera, och katalogisera e-böcker i de flesta e-bokformaten. Den kan också kommunicera med många e-bokläsarenheter. Den kan gå ut på internet och hämta metadata för dina böcker. Den kan ladda ner nyhetstidningar och omvandla dem till e-böcker för bekvämare läsning. Den är plattformsoberoende, kör på Linux, Windows och OS X. Du har just startat calibre. Vad ska du göra nu? Innan calibre kan göra något med dina e-böcker, måste den veta något om dem. Dra och släpp några e-böcker på calibre, eller klicka Lägg till böcker -knappen och se över vilka e-böcker du vill arbeta med. När du har lagt till böcker, kommer de dyka upp i huvudvyn och se ut i stil med detta: När du har beundrat listan över böcker som du just lagt till i ditt favoritinnehåll, kommer du antagligen att vilja läsa en. För att göra att du måste konvertera boken till ett format som din läsaren förstår. När du först kör calibre kommer Välkomstinstallationsguiden starta upp och ställa in Calibre för dina läsenheter. Konvertering är en småsak. Välj bara den bok du vill konvertera och klicka sedan på Konvertera böcker -knappen. Ignorera alla alternativ för nu och klicka på OK. Den lilla ikonen i det nedre högra hörnet kommer att börja snurra. När den är klar spinning, är din konverterade boken klar. Klicka på Visa för att läsa boken. Om du vill läsa boken på din läsenhet, anslut den till datorn, vänta tills Calibre upptäcker den (10-20 sekunder) och sedan klicka på Skicka till enhet -knappen. När ikonen slutar rotera igen, koppla bort din läsenhet och börja läsa! Om du inte konverterar boken i tidigare steg, calibre kommer automatiskt konvertera den till formatet som din läsenhet kan hantera. To get started with more advanced usage, you should read about Grafiska användargränssnittet (sida 3). For even more power and versatility, learn the Kommandoradsgränssnitt (sida 229). You will find the list of Vanliga frågor och svar (sida 104) useful as well. Innehåll 1

6 2 Innehåll

7 KAPITEL 1 Avsnitten 1.1 Grafiska användargränssnittet Det grafiska användargränssnittet (GUI) erbjuder tillgång till all bibliotekshantering och e-bokkonverteringsfunktioner. Det grundläggande arbetsflöde för att använda calibre är först att lägga till böcker till biblioteket från din hårddisk. calibre kommer automatiskt försöka läsa metadata från böckerna och lägga till dem i sin interna databas. När de är i databasen, kan du utföra olika Åtgärder (sida 3) på dem som ingår konvertering från ett format till ett annat, överföra till avläsningsanordningen, titta på datorn och redigera metadata. Det senare innefattar modifiering av omslag, beskrivning och etiketter bland andra detaljer. Observera att calibre skapar kopior av de filer som du lägger till. Dina originalfiler lämnas orörda. Gränssnittet är uppdelat i olika sektioner: Åtgärder (sida 3) Inställningar (sida 10) Kataloger (sida 10) Sök & sortera (sida 11) Sökgränssnittet (sida 11) Sparade sökningar (sida 15) Virtuella bibliotek (sida 15) Gissa metadata från filnamn (sida 15) Bokinformation (sida 16) Etikettbläddrare (sida 18) Omslagsrutnät (sida 20) Omslagsbläddrare (sida 21) Snabbvisning (sida 21) Jobb (sida 22) Kortkommandon (sida 22) Åtgärder I åtgärdsverktygsfältet finns praktiska genvägar till vanliga åtgärder. Om du högerklickar på knapparna, kan du utföra varianter på standardåtgärden. Observera att de åtgärdsverktygsfält kommer se lite olika ut beroende på om du har en e-bokläsare ansluten till datorn. 3

8 Lägg till böcker (sida 4) Redigera metadata (sida 5) Konvertera böcker (sida 5) Visa (sida 6) Skicka till enhet (sida 6) Hämta nyheter (sida 7) Bibliotek (sida 7) Enhet (sida 8) Spara till disk (sida 8) Anslut/dela ut (sida 9) Ta bort böcker (sida 9) Lägg till böcker Lägg till böcker åtgärd har sju variationer, som nås genom att göra ett högerklick på knappen. 1. Lägg böcker från en enda katalog: Öppnar en filvalsdialog och låter dig ange vilka böcker i en katalog bör tilläggas. Denna åtgärd är kontextkänslig, det vill säga det beror på vilken katalog (sida 10) som du har valt. Om du har valt biblioteket, kommer böcker att läggas till i biblioteket. Om du har valt e-boksläsarenheten kommer böckerna laddas upp till enheten och så vidare. 2. Lägg böcker från kataloger, inklusive underkataloger (En bok per katalog, antar varje e-bokfil är samma bok i ett annat format): Låter dig välja en katalog. Katalogen och alla dess underkataloger skannas rekursivt, och alla e-böcker som hittas läggs till i biblioteket. calibre förutsätter att varje katalog innehåller en enda bok. Alla e-bokfiler i en katalog antas vara samma bok i olika format. Denna åtgärd är inversen av Spara till disk (sida 8) handling, dvs du kan Spara till disk, ta bort böckerna och lägga tillbaka dem utan någon förlorad information utom för dagen (detta förutsätter att du inte har ändrat någon av inställningarna för Spara till disk åtgärd). 3. Lägg böcker från kataloger, inklusive underkataloger (Flera böcker per katalog, antar varje e-bokfil är en annan bok) : Låter dig välja en katalog. Katalogen och alla dess underkataloger skannas rekursivt och eventuella e-böcker som hittas läggs till i biblioteket. calibre förutsätter att varje katalog innehåller många böcker. Alla e- bokfiler med samma namn i en katalog antas vara samma bok i olika format. E-böcker med olika namn läggs till som olika böcker. 4. Lägg till flera böcker från arkivet (ZIP/RAR): Gör att du kan lägga till flera e-böcker som finns lagrade inuti det markerade ZIP eller RAR-filer. Det är en praktisk genväg som innebär att man slipper att först packa upp arkivet och sedan lägga till böckerna via ett av de två ovanstående alternativen. 5. Lägg tom bok. (Värdeandels utan format): Används för att skapa en tom bok rekord. Detta kan användas för att sedan manuellt fylla i information om en bok som du kanske inte har ännu i din samling. 6. Lägg från ISBN: Låter dig lägga till en eller flera böcker genom att skriva in deras ISBN. 7. Lägg till filer till utvalda boken poster: Gör att du kan lägga till eller uppdatera filer som hör till en befintlig bok i biblioteket. Med Lägg till böcker åtgärden kan läsa metadata från en bred variation av e-boksformat. Dessutom försöker den gissa metadata från filnamnet. Se Gissa metadata från filnamn (sida 15) sektion, för att lära sig att konfigurera denna. 4 Kapitel 1. Avsnitten

9 För att lägga till ett extra format för en befintlig bok du kan göra något av tre saker: 1. Dra och släpp filen på bokens informationspanelen på höger sida i huvudfönstret 2. Högerklicka på knappen Lägg till böcker och välj Lägg till filer till valda bokens poster. 3. Klicka på den röda lägg till böcker -knappen i övre högra delen av Edit Metadata dialog, nås av Redigera metadata (sida 5) åtgärd. Redigera metadata knappen. Redigera metadata åtgärder har fyra variationer, som kan nås genom att göra ett högerklick på 1. Redigera metadata individuellt: Gör att du kan redigera metadata för böcker en efter en med möjlighet att hämta metadata, inklusive omslag, från Internet. Det gör också att du kan lägga till eller ta bort vissa e-bokformat från en bok. 2. Redigera metadata i grupp: Gör det möjligt att redigera vanliga metadatafält för ett stort antal böcker samtidigt. Den fungerar på alla böcker som du har valt i Biblioteksvy (sida 11). 3. Hämta metadata och omslag: Laddar ner metadata och omslag (om möjligt) för de böcker som är markerade i boklistan. 4. Sammanfoga bokuppgifter: Ger dig möjlighet att slå samman metadata och format av två eller flera bokposter. Du kan välja att antingen ta bort eller behålla de register som inte klickade först. För mer detaljer se Redigera e-boks metadata (sida 101). Konvertera böcker E-böcker kan omvandlas från ett antal format till det format din eboksläsare föredrar. Många e-böcker som finns att köpa kommer att skyddas av Digital Rights Management 1 (DRM) teknik. calibre kommer inte konvertera dessa e-böcker. Det är lätt att ta bort DRM från många format, men eftersom det kan vara olagligt, du måste hitta verktyg för att frigöra dina böcker själv och sedan använda calibre för att konvertera dem. För de flesta människor, bör konverteringen vara en enkel en-klicks-uppgift. Om du vill lära dig mer om konverteringsprocessen, se E-bokkonvertering (sida 54). Kovertera böcker åtgärden har tre varianter, som nås genom att göra ett högerklick på knappen. 1. Konvertera individuellt: Här kan du ange konverteringsalternativ för att anpassa konverteringen av varje vald e-bok. 2. Masskonvertering: Här kan du ange alternativ endast en gång för att omvandla ett antal e-böcker i grupp Grafiska användargränssnittet 5

10 3. Skapa en katalog av böckerna i ditt calibre-bibliotek: Gör att du kan skapa en fullständig lista över de böcker i biblioteket, inklusive all metadata, i flera format som XML, CSV, BiBTeX, EPUB och MOBI. Katalogen kommer att innehålla alla böcker nu visas i biblioteksvyn. Detta gör att du kan använda sökfunktioner för att begränsa de böcker som ska katalogiserade. Dessutom, om du väljer flera böcker med musen, kommer bara dessa böcker att läggas till katalogen. Om du skapar katalogen i ett e-bokformat som EPUB, MOBI eller AZW3, nästa gång du ansluter e-boksläsare kommer katalogen skickas automatiskt till enheten. För mer information om hur kataloger fungerar, läs Skapa AZW3 EPUB MOBI kataloger (sida 186). Visa Visa åtgärden visar boken i ett e-bokläsarprogram. calibre har en inbyggd läsare för många e- bokformat. För andra format använder den operativsystemets standardapplikation. Du kan konfigurera vilka format ska öppnas med den interna läsaren via Inställningar->Beteende. Om en bok har fler än ett format, kan du visa ett visst format genom att göra ett högerklick på knappen. Skicka till enhet Skicka till enhet åtgärden har åtta variationer, som nås genom att göra ett högerklick på knappen. 1. Skicka till huvudminne: De utvalda böckerna överförs till huvudminnet av e-bokläsaren. 2. Skicka till minneskortet (A): De utvalda böckerna överförs till minneskortet (A) på e-bokläsaren. 3. Skicka till minneskortet (B): De utvalda böckerna överförs till minneskortet (B) på e-bokläsaren. 4. Skicka specifikt format till: De utvalda böckerna överförs till vald plats på enheten, i det format som du anger. 5. Mata ut enhet: Kopplar bort enheten från calibre. 6. Sätt som standard att skicka till enhet: Här kan du ange vilket av alternativen, 1 till 5 ovan eller 7 nedan, kommer att vara standardåtgärd när du klickar på huvudknappen. 7. Skicka och radera från biblioteket: De utvalda böckerna överförs till vald plats på enheten och sedan raderas från biblioteket. 8. Hämta anteckningar (experimentellt): Överför anteckningar du kan ha gjort på en e-bok på din enhet till kommentarsmetadata av boken i calibre-biblioteket. Du kan kontrollera filnamnet och mappstruktur med filer som skickas till enheten genom att sätta upp en mall i Inställningar->Import/Export->Skickar böcker till enheter. Se också calibre språkmall (sida 133). 6 Kapitel 1. Avsnitten

11 Hämta nyheter Hämta nyheter åtgärden hämtar nyheter från olika webbplatser och omvandlar de till en e-bok som kan läsas på din e-bokläsare. Normalt är att den nyskapade e-boken läggs till ditt e-bokbibliotek, men om en e-bokläsare är ansluten vid den tidpunkt då nedladdningen är klar, laddas nyheten också upp till läsaren automatiskt. Hämta nyheter åtgärden använder enkla recept (10-15 rader kod) för varje nyhetsplats. Om du vill veta hur du skapar recept för dina egna nyhetskällor, se Lägga till din favorit nyhetswebbplats (sida 23). Hämta nyheter åtgärden har tre varianter, som nås genom att göra ett högerklick på knappen. 1. Schemalägg nyhetshämtning: Låter dig schemalägga nedladdningen av dina utvalda nyhetskällor från en lista med hundratals tillgängliga. Schemaläggning kan ställas in individuellt för varje nyhetskälla du väljer och schemaläggning är flexibel så att du kan välja specifika veckodagar eller en frekvens av dagar mellan hämtningar. 2. Lägg till en anpassad nyhetskälla: Gör att du kan skapa ett enkelt recept för nedladdning av nyheter från en egen nyhetsplats som du vill komma åt. Skapa recept kan vara så enkelt som att ange en RSS-flödes-URL, eller så kan du vara mer normativ genom att skapa Python-baserad kod för uppgiften. För mer information se Lägga till din favorit nyhetswebbplats (sida 23). 3. Ladda ner alla schemalagda nyhetskällor: Får calibre att omedelbart börja ladda ner alla nyhetskällor som du har schemalagt. Bibliotek BIbliotek åtgärden låter dig skapa, växla mellan, byta namn på eller ta bort ett bibliotek. calibre ger dig möjlighet att skapa så många bibliotek som du vill. Du kan till exempel skapa ett skönlitterärtbibliotek, ett faktabibliotek, ett bibliotek för främmande språk, ett projektbibliotek, eller någon struktur som passar dina behov. Biblioteken är den högsta organisationsstrukturen inom calibre. Varje bibliotek har sin egen uppsättning av böcker, etiketter, kategorier och lagringsplatsbas. 1. Byt/skapa bibliotek...: Låter dig; a) ansluta till ett befintligt calibre-bibliotek på en annan plats, b) skapa ett tomt biblioteket på en ny plats eller, c) flytta nuvarande biblioteket till en nyligen angiven plats. 2. Snabb växling: Låter dig växla mellan bibliotek som har registrerats eller skapats inom calibre. 3. Byt namn på bibliotek: Låter dig byta namn på ett bibliotek. 4. Ta bort bibliotek: Låter dig avregistrera ett bibliotek från calibre. 5. <biblioteksnamn>: Åtgärder 5, 6 osv... ger dig omedelbar övergång tillgång mellan flera bibliotek som du har skapat eller bifogas. Denna lista innehåller endast de fem mest använda bibliotek. För den kompletta listan, använd Snabb växling -menyn. 6. Biblioteksunderhåll: Låter dig kontrollera det aktuella biblioteket för datakonsistens och återställa den nuvarande bibliotekets databas från säkerhetskopior Grafiska användargränssnittet 7

12 Observera: Metadata för dina e-böcker, t.ex. titel, författare, och etiketter, lagras i en enda fil i din calibrebiblioteksmapp som heter metadata.db. Om filen blir korrupt (mycket ovanligt), kan du förlora metadata. Lyckligtvis säkerhetskopierar calibre automatiskt metadata för varje enskild bok i bokens mapp som en OPF-fil. Genom att använda Återställ databas -åtgärden enligt Biblioteksunderhåll som beskrivs ovan, kan du låta calibre återskapa metadata.db filen från de enskilda OPF-filer åt dig. Du kan kopiera eller flytta böcker mellan olika bibliotek (när du har mer än ett bibliotek uppsatt) genom att högerklicka på boken och välja åtgärd Kopiera till bibliotek. Enhet Enhet åtgärden låter dig visa böckerna i huvudminnet eller minneskort för enheten, eller att mata ut enheten (ta bort den från calibre). Denna ikon visas automatiskt upp på calibres huvudverktygsfält när du ansluter en enhet som stöds. Du kan klicka på den för att se böckerna på enheten. Du kan också dra och släppa böcker från ditt calibre-biblioteket till ikonen för att överföra dem till enheten. Omvänt kan du dra och släppa böcker från din enhet till symbolbiblioteket i verktygsfältet för att överföra böcker från din enhet till calibre-biblioteket Spara till disk Spara till disk åtgärden har fem varianter, som nås genom att göra ett högerklick på knappen. 1. Spara till disk: Sparar de markerade böckerna organiserade i kataloger till disk. Katalogstrukturen ser ut som: Author_(sort) Title Book Files Du kan kontrollera filnamnet och mappstruktur med filer som sparas till disk genom att sätta upp en mall i Inställningar->Import/Export->Spara böcker till disk. Se också calibre språkmall (sida 133). 2. Spara till disk i en enda katalog: Sparar de markerade böckerna till disk i en enda katalog. För 1. och 2., alla tillgängliga format, samt metadata lagras på disk för varje vald bok. Metadata lagras i en OPF-fil. Sparade böcker kan återimporteras till biblioteket utan förlust av information genom att använda Lägg till böcker (sida 4) åtgärd. 3. Spara bara *<ditt önskade>*-format på disk: Sparar de markerade böckerna till disk i katalogstrukturen som visas i (1) men bara i önskat e-bokformat. Du kan ställa din favorit format i Inställningar->Beteende->Önskat utformat 8 Kapitel 1. Avsnitten

13 4. Spara bara *<ditt önskade>* format till disk i en enda katalog: Sparar de markerade böckerna till din hårddisk i en enda katalog men bara på ditt önskade e-bokformat. Du kan ställa din favorit format i Inställningar->Beteende->Önskat utformat 5. Spara ett enstaka format till disk...: Sparar de markerade böckerna till disk i katalogstrukturen som visas i (1) men bara i det format du väljer från rullgardinlistan. Anslut/dela ut Anslut/dela ut åtgärden låter dig ansluta manuellt till en enhet eller mapp på datorn. Det gör också att du kan ställa in ditt calibre-bibliotek för åtkomst via en webbläsare eller e-post. Anslut/dela ut åtgärden har fyra variationer, som nås genom att göra ett högerklick på knappen. 1. Anslut till mapp: Låter dig ansluta till valfri mapp på din dator som om den vore en enhet och använda alla faciliteter calibre har för enheter med den mappen. Användbart om enheten inte kan stödjas av calibre, men finns som en USB-disk. 2. Anslut till itunes: Låter dig ansluta till itunes-böckers databas som om det vore en enhet. När böckerna skickas till itunes kan du använda itunes för att göra dem tillgängliga för dina olika idevices. 3. Starta mediaserver: Startar calibres inbyggda webbserver. Vid start kommer ditt calibre-biblioteket vara tillgänglig via en webbläsare från Internet (om du väljer). Du kan konfigurera hur webbservern nås genom att ställa in preferenser på Inställningar->Dela->Dela på nätet 4. Ställ in epostbaserad delning av böcker: Tillåter delning av böcker och nyhetsflöden via e-post. När du konfigurerat e-postadresser för detta alternativ kommer calibre skicka nyhetsuppdateringar och boka uppdateringar till de angivna e-postadresser. Du kan konfigurera hur calibre skickar e-post genom att ange inställningar på Inställningar->Dela->Dela Böcker via e-post. När du har ställt in en eller flera e-postadresser, kommer menyalternativet ersättas av menyposter för att skicka böcker till de konfigurerade e-postadresser. Ta bort böcker Med Ta bort böcker åtgärden raderas böcker permanent, så använd den med omsorg. Det är kontextkänslig, det vill säga att det beror på vilken katalog (sida 10) du har valt. Om du har valt Bibliotek, kommer böcker att tas bort från biblioteket. Om du har valt eboksläsarenheten kommer böcker att tas bort från enheten. För att ta bort endast ett visst format för en given bok använd Redigera metadata (sida 5) åtgärd. Ta bort böcker har också fem variationer som kan nås genom att göra en högerklicka på knappen. 1. Ta bort valda böcker: Tillåter dig att permanent ta bort alla böcker som är valda i boklistan. 2. Ta bort filer av specifikt format från valda böcker...: Tillåter dig att permanent ta bort e-böcker med ett specifikt format från böcker som är valda i boklistan Grafiska användargränssnittet 9

14 3. Ta bort alla format från valda böcker, utom...: Tillåter dig att permanent ta bort filer av godtyckligt format förutom ett angivet specifikt format från böcker som är valda i boklistan. 4. Ta bort alla format från valda böcker: Tillåter dig att permanent ta bort filer från böcker som är valda i boklistan. Bara metadata kommer återstå. 5. Ta bort omslag från valda böcker: Tillåter dig att permanent ta bort omslagsbildfiler från böcker som är valda i boklistan. 6. Ta bort passande böcker från enheten: Tillåter dig att permanent ta bort e-bokfiler från anslutna enheter som passar böcker som är valda i boklistan. Observera: Observera att när du använder Ta bort böcker för att ta bort böcker från ditt calibre-biblioteket, tas bokposten bort permanent, men på Windows och OS X placeras filerna i papperskorgen. Detta gör att du kan återställa dem om du ångrar dig Inställningar Inställningar åtgärden tillåter dig ändra hur olika aspekter av calibres arbete. Den har fyra variationer, som nås genom att göra ett högerklick på knappen. 1. Inställningar: Tillåter dig ändra hur olika aspekter av calibres arbete. Genom att klicka på knappen utförs också denna åtgärd. 2. Kör välkomstguide: Tillåter dig att starta välkomstguiden som dyker upp första gången du startar calibre. 3. Hämta tillägg för att förbättra calibre: Öppnar ett nytt fönster som visar tillägg för calibre. Dessa tillägg är utvecklade av tredje part för att utöka calibres funktionalitet. 4. Starta om i felsökningsläge: Tillåter dig att aktivera felsökningsläge som kan hjälpa calibres utvecklarna att lösa problem som du stöter på med programmet. För de flesta användare bör det förbli inaktiverad om inte instrueras av en utvecklare att aktivera det Kataloger En Katalog är en samling av böcker. calibre kan hantera två typer av olika kataloger: 1. Bibliotek: Detta är en samling böcker som lagras i ditt calibre-biblioteket på din dator. 2. Enhet: Detta är en samling böcker som lagras i din eboksläsare. Det kommer att vara tillgängliga när du ansluter läsaren till datorn. 10 Kapitel 1. Avsnitten

15 Många operationer, som att lägga böcker, ta bort, visa, etc., är beroende av kontext. Så, till exempel, om du klickar på knappen Visa när du har Enhet-katalog vald, kommer calibre att öppna filerna på enheten för att visa. Om du har Bibliotek-katalog vald, kommer filer i ditt calibre-bibliotek öppnas i stället Sök & sortera Sök & sortera avsnittet tillåter dig utföra flera kraftfulla åtgärder på dina boksamlingar. Du kan sortera dem efter titel, författare, datum, betyg, etc. genom att klicka på kolumnrubrikerna. Du kan också göra undersortering, dvs sortera på flera kolumner. Till exempel, om du klickar på titelkolumnen och sedan författarkolumnen, kommer boken att sorteras efter författare och sedan alla poster för samma författare sorteras efter titel. Du kan söka efter en viss bok eller en uppsättning böcker med hjälp av sökfältet. Mer om detta nedan. Du kan snabbt och bekvämt redigera metadata genom att dubbelklicka på posten som du vill ändra i listan. Du kan utföra Åtgärder (sida 3) på uppsättningar av böcker. För att välja flera böcker kan du antingen: Håll Ctrl-tangenten nedtryckt och klicka på de böcker du vill markera. Håll Skift-tangenten nedtryckt och klicka på start- och slutbok av en rad böcker som du vill markera. Du kan konfigurera vilka fält som ska visas med hjälp av Inställningar (sida 10) dialogen Sökgränssnittet Du kan söka allt metadata genom att skriva in sökord i sökfältet. Sökningar är skiftlägesokänsliga. Exempelvis: Asimov Foundation format:lrf Detta kommer att passas mot alla böcker i biblioteket som har Asimov och Foundation i sitt metadata och finns i LRF-format. Några fler exempel: author:asimov and not series:foundation title:"the Ring" or "This book is about a ring" format:epub publisher:feedbooks.com 1.1. Grafiska användargränssnittet 11

16 Sökningar är som standard innehåller. Ett objekt passar om söksträngen visas någonstans i den angivna metadata. Två andra typer av sökningar finns: likhetssökning och sök hjälp av reguljära uttryck 2. Likhetssökningar indikeras genom att inleda söksträngen med ett likhetstecken (=). Till exempel frågan tag: - vetenskap" kommer att passa "vetenskap", men inte science fiction"eller "hård vetenskap". Sök med reguljärt uttryck indikeras genom att inleda söksträngen med tilde (~). Varje python-kompatibla reguljära uttryck < _ kan användas. Observera att omvända snedstreck som används för att undkomma specialtecken i reguljära uttryck måste fördubblas, eftersom enskilda snedstreck kommer att tas bort under frågeanalys. Till exempel, för att matcha en bokstavlig parentes måste du ange \\(. Reguljära uttryckssökningar är innehåller sökningar om inte uttrycket innehåller ankare. Om du behöver söka efter en sträng med inledande likhet- eller tilde-tecken, prefixa strängen med ett omvänt snedstreck. Bifoga söksträngar med citationstecken ( ) om strängen innehåller parentes eller utrymmen till exempel vill söka efter etiketten Science Fiction du skulle behöva söka efter etikett:-science fiction" Om du sök efter etikett:=science fiction hittar du alla böcker med etiketten science och som innehåller ordet fiction av vilket metadata. Du kan bygga avancerade sökfrågor enkelt med hjälp av Avancerad sökdialog som nås genom att klicka på knappen. Tillgängliga fält för att söka är: etikett, titel, författare, förlag, serier, series_index, betyg, omslag, kommentarer, format identifierare, datum, pubdate, sök, storlek och anpassade kolumner. Om en enhet är ansluten, blir ondevice fält tillgängliga, när du söker calibre biblioteksvyn. För att hitta sökningen namnet (egentligen kallad lookup name) för en anpassad kolumn håller du musen över kolumnrubriken i biblioteksvyn. Syntaxen för att söka efter datum är: pubdate:> Will find all books published after Jan, 2000 date:<= Will find all books added to calibre before 3 Jan, 2000 pubdate:=2009 Will find all books published in 2009 Om datumet är tvetydig, är den aktuella används platsinformation för datumjämförelse. Till exempel i en mm/dd/åååå platsinformation 2009/02/01 tolkas det som 1 Feb I en åååå/mm/dd platsinformation tolkas det som 2 januari Vissa speciella datumsträngar är tillgängliga. Strängen today översätter till dagens datum, vad det än är. Strängarna yesterday och thismonth (eller översatta motsvarande i det aktuella språket) fungerar också. Dessutom kan strängen daysago (även översatt) användas för att jämföra med ett datum ett visst antal dagar sedan. Exempelvis: date:>10daysago date:<=45daysago För att undvika eventuella problem med översatta strängar när du använder en icke-engelsk version av calibre, är strängarna _today, _yesterday, _thismonth och _daysago alltid tillgängliga. De översätts inte. Du kan söka efter böcker som har ett format av en viss storlek så här: size:>1.1m Will find books with a format larger than 1.1MB size:<=1k Will find books with a format smaller than 1KB Datum och numeriska fält stöder relationsoperatorer = (lika med), > (större än), >= (större än eller lika med), < (mindre än), <= (mindre än eller lika med), and!= (inte lika med). Betygsfälten anses vara numeriska. Exempelvis sökandet rating:>=3 hittar alla böcker med betyg 3 eller högre Kapitel 1. Avsnitten

17 Du kan söka efter det antal poster i flervärda områden som etiketter. Dessa sökningar börjar med tecknet #, sedan använda samma syntax som för numeriska fält. Till exempel, för att hitta alla böcker med mer än 4 etiketter använder tags:#>4. För att hitta alla böcker med exakt 10 etiketter använder tags:#=10. Indexserien är sökbara. För standardserien, är söknamnet series_index. För anpassade seriekolumner, använd kolumnsökningsnamn följt av _index. Om du exempelvis vill söka indexen för en anpassad seriekolumn som heter #my_series, skulle du använda sökfunktionsnamnet #my_series_index. Indexserien är tal, så att du kan använda relationsoperatorer som beskrivs ovan. Det speciella fältet search används för sparade sökningar. Så om du sparar en sökning med namnet Min makes böcker kan du skriva search:min makes böcker" i sökfältet för att återanvända den sparade sökningen. Mer om att spara sökningar nedan. Du kan söka efter frånvaron eller närvaron av ett fält med hjälp av de speciella sanna och falska värden. Exempelvis: cover:false will give you all books without a cover series:true will give you all books that belong to a series comments:false will give you all books with an empty comment format:false will give you all books with no actual files (empty records) Ja/nej anpassade kolumner är sökbara. Söka efter false, empty, eller blank hittar alla böcker med odefinierade värden i kolumnen. Söka efter true hittar alla böcker som inte har odefinierade värden i kolumnen. Söka efter yes eller checked hittar alla böcker med Yes i kolumnen. Söka efter no eller unchecked hittar alla böcker med No i kolumnen. Observera att orden yes, no, blank, empty, checked och unchecked sätts; Du kan antingen använda det aktuella språket motsvariga ord eller det engelska ordet. Orden true och false och de särskilda värden _yes, _no och _empty översätts inte. Hierarkiska objekt (t.ex. A.B.C) använder en utökad syntax för att passa de första delarna av hierarkin. Detta görs genom att lägga till en punkt mellan den exakta indikatorn passningen (=) och texten. Till exempel frågan tags:=a hittar etiketterna A och AB, men hittar inte etiketterna AA eller AA.B. Sökning tags:=.a.b hittar etiketterna A.B och A.B.C, men inte den etiketten A. Identifierare (t.ex. isbn, doi, LCCN etc) också använda en utökad syntax. Först, notera att en identifierare har formen typ:value, som i ISBN: Den utökade syntaxen tillåter dig att specificera självständigt vilken typ och värde för att söka efter. Både typ och värde delarna av frågan kan använda lika med, innehåller eller reguljära uttryck sökningar. Exempel: identifierare:true hittar böcker med någon identifierare. identifierare:false hittar böcker utan identifierare. identifierare:123 kommer att söka efter böcker av någon typ som har ett värde som innehåller 123. identifierare:= kommer att söka efter böcker av någon typ som har ett värde som är lika med identifierare:=isbn: och identifierare: isbn: true hittar böcker med en typ lika med isbn har något värde identifierare:=isbn:false hittar böcker med någon typ lika med isbn. identifierare:=isbn:123 hittar böcker med en typ som motsvarar isbn med ett värde som innehåller 123. identifierare:=isbn:= hittar böcker med en typ som motsvarar isbn med ett värde som är lika med identifierare:i:1 hittar böcker med en typ som innehåller ett i har ett värde som innehåller en Grafiska användargränssnittet 13

18 Fig. 1.1: Advancerad sökdialog 14 Kapitel 1. Avsnitten

19 1.1.6 Sparade sökningar calibre tillåter dig spara en ofta använd sökning under ett särskilt namn och sedan återanvända den sökningen med ett enda klick. Det gör du genom att skapa din sökning, antingen genom att skriva in det i sökfältet eller använda etikettbläddraren. Skriv sedan det namn du vill ge till sökningen i rutan Sparade sökningar bredvid sökfältet. Klicka på plusikonen bredvid rutan sparade sökningar för att spara sökningen. Nu kan du komma åt din sparade sökning i etikettbläddraren under sökningar. Ett enda klick gör att du kan återanvända en godtyckligt komplex sökning enkelt, utan att behöva återskapa den Virtuella bibliotek Ett Virtuellt bibliotek är ett sätt att låtsas att ditt calibre-biblioteket bara har ett fåtal böcker i stället för dess fullständiga samling. Detta är ett utmärkt sätt att partitionera din stora samling av böcker i mindre, hanterbara bitar. Om du vill veta hur du skapar och använder virtuella bibliotek, se handledningen: Virtuella bibliotek (sida 190) Gissa metadata från filnamn Normalt läser calibre metadata från bokfilen. Emellertid kan den konfigureras för att läsa metadata från filnamnet i stället, via Inställningar->Lägga till böcker->läs metadata från filens innehåll i stället för filnamn. Du kan också styra hur metadata läses från filnamnet med reguljära uttryck (se Allt om att använda reguljära uttryck i calibre (sida 162)). I Lägg till böcker avsnittet av inställningsdialogrutan kan du ange ett reguljärt uttryck som calibre kommer att använda för att försöka gissa metadata från namnen på e-bokfiler som du lägger till i biblioteket. Standard för reguljära uttrycket är: title - author et vill säga, det förutsätts att alla tecken fram till den första - är titeln på boken och efterföljande tecken är författare till boken. Till exempel, filnamnet: Foundation and Earth - Isaac Asimov.txt kommer att tolkas ha titeln: Foundation and Earth och författare: Isaac Asimov Tips: Om filnamnet inte innehåller bindestrecket, kommer ovanstående reguljära uttryck misslyckas Grafiska användargränssnittet 15

20 1.1.9 Bokinformation Bokdetaljer visar omslag och allt metadata för den valda boken. Det kan döljas via knappen i det nedre högra hörnet 16 Kapitel 1. Avsnitten

21 av huvudfönstret i calibre. De författarnamn som visas i panelen bokdetaljer är klickbara, de kommer som standard att ta dig till Wikipedia-sidan för författaren. Detta kan anpassas genom att högerklicka på författarens namn och välja Hantera denna författare. Likaså om du hämtar metadata för boken, visar panelen bokdetaljer automatiskt dig länkar som pekar på webbsidor för boken på Amazon, WorldCat, etc. från där metadata hämtades. Du kan högerklicka på enskilda e-bokformat i bokdetaljpanelen för att ta bort dem, jämföra dem med sina originalversioner, spara dem till disk, öppna dem med ett externt program, osv. Du kan ändra omslaget till boken genom att helt enkelt dra och släppa en bild på bokdetaljpanelen. Du vill redigera omslagsbild i ett extern program, högerklicka på den och välj Öppna med. Du kan också lägga e-bokfiler till den aktuella boken genom att dra och släppa filerna på bokdetaljpanelen. Dubbelklicka på information om boken så öppnas panelen upp i ett separat fönster. Slutligen kan du skräddarsy exakt vilken information som visas i bokdetaljspanelen via Inställningar->Utseende & Beteende>Bokinformation Grafiska användargränssnittet 17

22 Etikettbläddrare Etikettbläddaren tillåter dig enkelt bläddra i din samling Författare/Etiketter/Serier/etc. Om du klickar på ett objekt i Etikettbläddaren, till exempel författarens namn Isaac Asimov, då begränsas listan över böcker till höger till att visa böcker av denna författare. Du kan klicka på kategorinamn också. Till exempel, klicka på Serier kommer att visa dig alla böcker i någon serie. Det första klicket på ett objekt kommer att begränsa listan över böcker till de som innehåller eller passar objektet. Fortsätt exemplet ovan, att klicka på Isaac Asimov kommer visa böcker av denna författare. Klicka igen på objektet kommer att ändra vad som visas, beroende på om objektet har barn (se underkategorier och hierarkiska artiklar nedan). Fortsätt Isaac Asimov exemplet klicka igen på Isaac Asimov kommer begränsa listan över böcker till dem som inte är av Isaac Asimov. Ett tredje klick tar bort begränsningen, visar alla böcker. Om du håller ned Ctrl eller Skift och klickar på flera objekt, så skapas restriktioner baserade på flera objekt. Till exempel kan du hålla Ctrl och klicka på etiketterna Historia och Europa för att hitta böcker om Europas historia. Etikettbläddraren fungerar genom att bygga sökuttryck som automatiskt förs in i sökfältet. Om man tittar på vad Etikettbläddraren genererar är ett bra sätt att lära sig hur man konstruerar grundläggande sökuttryck. Poster i etikettbläddraren har sina ikoner delvis färgad. Mängden färg beror på den genomsnittliga betyget av böckerna 18 Kapitel 1. Avsnitten

23 i den kategorin. Så till exempel om böcker av Isaac Asimov har i genomsnitt fyra stjärnor, visas ikonen för Isaac Asimov i etikettbläddraren vara 4/5: e färgad. Du kan hålla musen över ikonen för att se det genomsnittliga betyget. Objekten i yttre nivå av etikettbläddraren, till exempel författare och serien, kallas kategorier. Du kan skapa egna kategorier, så kallade användarkategorier, som är användbara för att organisera objekt. Till exempel kan du använda användarkategoriredigering (klicka Etikettbläddrarmeny-> Hantera författare, serier, etc-> Hantera användarkategorier) för att skapa en användarkategori som kallas favoritförfattare, sedan lägg objekten på dina favoriter i kategorin. Användarkategorier kan ha underkategorier. Till exempel är de användarkategori Favorites.Authors en underkategori av favoriter. Du kanske också har Favorites.Series, i vilket fall kommer det att finnas två underkategorier under favoriter. Underkategorier kan skapas genom att högerklicka på en användarkategori och att välja Lägg till underkategori till..., och går in i underkategorin namn; eller genom att använda användarkategoriredigering genom att ange namn som favoriter i exemplet ovan. Du kan söka användarkategorier på samma sätt som inbyggda kategorier, genom att klicka på dem. Det finns fyra olika sökning 1. allt som passar en post i kategorin anges med ett enda gröna plustecknet. 2. allt som passar en post i den kategori eller dess underkategorier anges med två gröna plustecknet. 3. allt som inte passar en post i kategorin visas med ett enda röd minustecken. 4. allt som inte passar en post i den kategori eller dess underkategorier visas av två röda minustecken. Det är också möjligt att skapa hierarkier inom några av kategorierna text såsom etiketter, serier och anpassade kolumner. Dessa hierarkier visar den lilla triangeln, medger delposter att vara dolda. För att använda hierarkier av objekt i en kategori, måste du först gå till Inställningar->Utseende och beteende och ange kategorinamn (s) in i Kategorier med hierarkisk objekt rutan. När detta är gjort, kommer poster i den kategorin som innehåller punkter visas med hjälp av den lilla triangeln. Till exempel, anta att du skapar en egen kolumn som heter Genre och pekar på att den innehåller hierarkiska objekt. När detta är gjort, sådant som Mystery.Thriller och Mystery.English visas som Mystery med den lilla triangeln bredvid den. Genom att klicka på triangeln visas Thriller och engelska som delposter. Se Hantera undergrupper av böcker, till exempel genre (sida 126) för mer information. Hierarkiska objekt (objekt med barn) använder samma fyra klicka-på sökningar som användarkategorier. Poster som inte har barn använder två av de sökningar: allt som passar och allt som inte passar. Du kan dra och släppa objekt i etikettbläddraren på användarkategorier för att lägga till dem i den kategorin. Om källan är en användarkategori, hålla Skift-tangenten medan du drar flyttar objektet till den nya kategorin. Du kan också dra och släppa böcker från boklistan på objekt i etikettbläddraren; släppa en bok om ett objekt medför att objekt som ska tillämpas automatiskt på de släppta böckerna. Till exempel kommer dra en bok på Isaac Asimov sätter författaren till denna bok till Isaac Asimov. Att släppa den på etiketten Historik kommer att lägga till etiketten Historik till bokens etiketter. Det finns ett sökfält längst upp Etikettbläddaren som gör att du enkelt hitta ett objekt i Etikettbläddaren. Dessutom kan du högerklicka på ett objekt och välja en av flera operationer. Några exempel är att dölja det, byta namn på det, eller öppna en Hantera x dialogruta som låter dig hantera objekt av detta slag. Till exempel med Hantera Författare - dialogrutan kan du byta namn på författare och kontrollera hur deras namn sorteras. Du kan styra hur objekt sorteras i etikettbläddraren via Alter Tag Browser knappen längst ner på Tag Browser. Du kan välja att sortera efter namn, genomsnittliga betyget eller popularitet (popularitet är antalet böcker med ett objekt i biblioteket, till exempel, är populariteten av Isaac Asimov antalet böcker i biblioteket av Isaac Asimov) Grafiska användargränssnittet 19

24 Omslagsrutnät Du kan låta calibre visa ett rutnät av bokomslag stället för en lista med böcker, om du föredrar att bläddra i din samling av omslag istället. Den Omslagsrutnät aktiveras genom att klicka på knappen nätet i det nedre högra hörnet av huvudfönstret calibre. Du kan anpassa omslagsstorlekar och bakgrunden till omslagsrutnät via Inställningar->Utseende & Beteende>Omslagsrutnät. Du kan även låta calibre visa någon angivna fältet under omslaget, t.ex. titel eller författare eller betyg eller en egen kolumn som du själva har utformat. 20 Kapitel 1. Avsnitten

25 Omslagsbläddrare Förutom omslag som beskrivs ovan, kan du också låta calibre visa omslag på en enda rad. Detta aktiveras via en knapp i det nedre högra hörnet av huvudfönstret. I Inställningar->Utseende & Beteende->Omslagsbläddrare kan du ändra antalet omslag visas, och även låta omslagen visas i ett separat fönster Snabbvisning Ibland vill du välja en bok och snabbt få en lista av böcker med samma värde i någon kategori (författare, etiketter, förläggare, serie, etc.) som den valda boken, men utan att ändra den aktuella vyn av biblioteket. Du kan göra detta med snabbvisning. Snabbvisning öppnar ett andra fönster som visar listan över böcker som passar mot värdet av intresse. Antag till exempel att du vill se en lista med alla böcker med samma författare till den för tillfället valda boken. Klicka i författarens cell du är intresserad av och tryck på Q -tangenten. Ett fönster öppnas med alla författare för det verket till vänster, och alla böcker av den valda författaren till höger. Några exempel på snabbvisningsanvändning: snabbt se vad andra böcker: har någon etikett som tillämpas på den markerade boken, är i samma serie som aktuell bok har samma värden i en anpassad kolumn som den aktuella boken är skriven av en av samma författare till den aktuella boken utan att ändra innehållet i biblioteksvyn. Snabbvisningsfönstret öppnas ovanpå calibre och håller öppet tills du explicit stänger det. Du kan använda snabbvisning och calibres biblioteksvy samtidigt. Till exempel, om du i calibres biblioteksvy klickar på en kategorikolumn (etiketter, serier, utgivare, författare, etc.) för en bok, kommer fönsterinnehållet snabbvisningen ändras till att visa dig i den vänstra sidopanelen objekten i den kategori för den valda boken (t.ex. etiketter för det verket). Den första posten i denna lista kommer att väljas ut, och snabbvisning kommer att visa dig på den högra sidopanelen alla böcker i biblioteket som refererar den posten. Klicka på en annan post i den vänstra rutan för att se böckerna med att olika objekt. Dubbelklicka på en bok i snabbvisningsfönstret för att välja den bok i biblioteksvyn. Detta kommer också ändra poster som visas i snabbvisningsfönstret (det vänstra fönstret) för att visa objekten i den nyligen valda boken Grafiska användargränssnittet 21

26 Skift- (eller Ctrl-) dubbelklicka på en bok i snabbvisningsfönstret för att öppna dialogrutan för att redigera metadata för boken i calibre-fönstret. Du kan se om en kolumn kan snabbvisas genom att hålla musen över kolumnrubriken och tittar på verktygstips för denna rubrik. Du kan också veta genom att högerklicka på kolumnrubriken för att se om Snabbvisnings alternativet visas i menyn, i vilket fall välja att snabbvisningsalternativet motsvarar att trycka Q i den aktuella cellen. Snabbvisning respekterar det virtuella bibliotekets inställning, visar bara böcker i den aktuella virtuella biblioteket Jobb Panelen jobb visar antalet jobb som körs. Jobb är uppgifter som körs i en separat process. De omfattar konvertera e-böcker och prata med din läsenhet. Du kan klicka på jobbpanelen för att komma åt listan över jobb. När ett jobb har slutförts kan du se en detaljerad logg från det jobbet genom att dubbelklicka på den i listan. Detta är användbart för att felsöka jobb som kanske inte har slutförts Kortkommandon calibre har flera kortkommandon för att spara tid och musrörelser. Dessa kortkommandon är aktiva i boklistvyn (när du inte redigerar detaljerna i en viss bok), och de flesta av dem påverkar den titel du har valt. calibres e-bokläsare har sina egna kortkommandon som kan skräddarsys, genom att klicka på knappen Inställningar i läsaren. Observera: Observera: calibres kortkommandon inte kräver en specialtangent (kommando, alternativ, kontroll, etc.), om inte särskilt anges. Du behöver bara trycka på bokstavsknappen, t.ex. E för att redigera. Table 1.1: Kortkommandon Kortkommando F2 (Enter i OS X) A Skift+A C D Del E G I K M Alt+M O P S T V Alt+V/Cmd+V i OS X Alt+Skift+J Utför Redigera metadata för det valda fältet i boklistan. Lägg till böcker Lägg format till de utvalda böckerna Konvertera valda böcker Skicka till enhet Ta bort valda böcker Redigera metadata av valda böcker Hämta böcker Visa bokdetaljer Redigera Innehållsförteckning Slå samman valda poster Slå samman poster, behåll originalen Öppna mapp Polera böcker Spara till disk Redigera Bok Visa Visa specifikt format Växla jobblista Fortsätter p 22 Kapitel 1. Avsnitten

27 Table 1.1 fortsättning från föregående sida Kortkommando Utför Alt+Skift+B Växla omslagsvisning Alt+Skift+D Växla bokdetaljspanel Alt+Skift+T Växla etikett visning Alt+Skift+G Växla omslagsrutnät Alt+A Visa böcker med samma författare som aktuell bok Alt+T Visa böcker med samma etiketter som aktuell bok Alt+P Visa böcker av samma förlag som aktuell bok Alt+Skift+S Visa böcker i samma serie som aktuell bok /, Ctrl+F Fokusera sökfältet Skift+Ctrl+F Öppna den avancerade sökdialogen Esc Rensa sökning Skift+Esc Fokusera boklista Ctrl+Esc Rensa det virtuella biblioteket Alt+Esc Rensa den ytterligare begränsningen Ctrl+* Skapa ett temporärt virtuellt bibliotek baserat på den aktuella sökningen Ctrl+Höger Välj fliken nästa virtuella bibliotek Ctrl+Vänster Välj fliken föregående virtuella bibliotek N or F3 Hitta nästa bok som passar den aktuella sökningen (fungerar bara om sökmarkering är aktiverad i Skift+N eller Skift+F3 Söka tidigare bok som passar mot aktuell sökning (fungerar bara om sökmarkering är aktiverad i s Ctrl+D Ladda ner metadata och omslag Ctrl+R Starta om calibre Ctrl+Skift+R Starta om calibre i felsökningsläge Skift+Ctrl+E Lägg till tomma böcker till calibre Ctrl+M Växla markeringsstatus för valda böcker Q Öppna snabbsökningsfönstret för visa böcker med relaterade serier/etiketter/etc. Skift+Q Fokusera den öppnade snabbsökningspanelen Skift+S Utför en sökning i snabbsökningspanelen Ctrl+Q Avsluta Calibre 1.2 Lägga till din favorit nyhetswebbplats calibre har en kraftfull, flexibel och lätt att använda ramverk för att hämta nyheter från Internet och omvandla dem till en e-bok. Följande kommer att visa dig, med hjälp av exempel, hur man får nyheter från olika webbplatser. För att få en förståelse för hur man använder ramverket, följ exemplen i den ordning som anges nedan: Helt automatisk hämtning (sida 24) calibre blogg (sida 24) bbc.co.uk (sida 25) Anpassa hämta processen (sida 25) Använda den tryckta versionen av bbc.co.uk (sida 25) Byte av artikelstilar (sida 26) Skivning och tärning (sida 27) Exempel i verkligheten (sida 39) Tips för att utveckla nya recept (sida 41) Ytterligare läsning (sida 42) API dokumentation (sida 42) 1.2. Lägga till din favorit nyhetswebbplats 23

28 1.2.1 Helt automatisk hämtning Om din nyhetskälla är enkel nog, skulle calibre mycket väl kunna hämta det helt automatiskt, allt du behöver göra att ge webbadressen. calibre samlar all information som behövs för att ladda ner en nyhetskälla i ett recept. För att berätta för calibre om en nyhetskälla, måste du skapa ett recept för det. Låt oss se några exempel: calibre blogg calibre blogg är en blogg av inlägg som beskriver många användbara calibre-funktioner på ett enkelt och lättillgängligt sätt för nya calibre-användare. För att ladda ner den här bloggen till en e-bok, förlitar vi oss på RSS-flödet av bloggen: Jag fick RSS URL genom att titta under Prenumerera längst ner på bloggsidan och välja Posts->Atom. För att få calibre hämta flöden och omvandla dem till en e-bok, ska du högerklicka på Hämta nyheter knappen och sedan på Lägg till en anpassad nyhetskälla menyalternativet och sedan Nytt recept knappen. En dialogruta liknande den som visas nedan bör öppna sig. 24 Kapitel 1. Avsnitten

29 Ange först calibre Blog i Recepttitel fält. Detta kommer att vara namnet på den e-bok som kommer att skapas från artiklarna i de ovanstående flöden. De nästa två fälten (Äldsta artikel och Max. number of articles) tillåter dig viss kontroll över hur många artiklar som ska hämtas från varje flöde, och de är ganska självförklarande. För att lägga till flöde till receptet, mata in flödestitel och flödes-url och klicka på Lägg till flöde knappen. När du har lagt till flöde, klicka på Spara knappen och du är klar! Stäng dialogrutan. Så här testar du nya recept klicka på Anpassad nyhetskälla undermenyn klicka calibre blogg nyhetsknapp. Efter ett par minuter, kommer den nyligen nedladdade e-boken av blogginlägget visas i huvudbiblioteksvyn (om du har dina läsare ansluten kommer den att läggas ut på läsaren i stället för in i biblioteket). Välj det och tryck på Visa knappen för att läsa! Anledningen till att detta fungerat så bra, med så liten ansträngning är att bloggen ger fullt innehåll RSS flöden, det vill säga, artikelns innehåll är inbäddat i själva flödet. För de flesta nyhetskällor som tillhandahåller nyheter på detta sätt, med fullt innehåll flöden, du behöver inte någon mer ansträngning för att omvandla dem till e-böcker. Nu ska vi titta på en nyhetskälla som inte ger fullständigt innehållsflöde. I sådana flöden är hela artikeln en webbsida och flödet innehåller bara en länk till webbsidan med en kort sammanfattning av artikeln. bbc.co.uk Låt oss prova följande två flöden från BBC: 1. Nyheter framsida: 2. Vetenskap/Natur: Följ proceduren som beskrivs i calibre blogg (sida 24) ovan för att skapa ett recept på BBC (med hjälp av flöde ovan). Om man tittar på den nedladdade e-boken, ser vi att claibre har gjort ett förtjänstfullt arbete för att utvinna bara innehållet som du bryr dig om från varje artikel hemsida. Emellertid är extraktionsprocessen inte perfekt. Ibland lämnar oönskade innehåll som menyer och navigeringshjälpmedel, eller det tar bort innehåll som borde lämnas i fred, som artikelrubriker. För att få perfekt innehållsutvinning, måste vi anpassa hämta processen, som beskrivs i nästa avsnitt Anpassa hämta processen När du vill att fullända hämtningen, eller hämta innehåll från en särskilt komplicerad webbplats kan du använda dig av all den kraft och flexibilitet i ramen av recept. För att kunna göra det, i Lägg till anpassad nyhetskälla dialog, genom att klicka på Växla till avancerat läge knappen. Det enklaste och ofta mest produktiva anpassning är att använda den tryckta versionen av uppkopplade-artiklar. Den tryckta versionen är oftast mycket mindre hantverk och översätter mycket smidigare till en e-bok. Låt oss försöka använda den tryckta versionen av artiklarna från BBC. Använda den tryckta versionen av bbc.co.uk Det första steget är att titta på e-boken som vi hämtat tidigare från bbc.co.uk (sida 25). Vid slutet av varje artikel, i e-boken finns en liten baksidetext som talar om när artikeln hämtats från. Kopiera och klistra in denna webbadress i en webbläsare. Nu på artikelwebbsidan leta efter en länk som pekar på Utskrift. Klicka på den för att se den tryckta versionen av artikeln. Det ser mycket snyggare! Jämför nu de två webbadresser. För mig var de: Artikel URL Utskriftsversion URL Så det ser ut att få den tryckta versionen måste vi prefix varje artikel URL med: 1.2. Lägga till din favorit nyhetswebbplats 25

30 newsvote.bbc.co.uk/mpapps/pagetools/print/ Nu i Avancerat läge för Anpassad nyhetskällor dialogrutan ska du se något liknande (kom ihåg att välja BBC receptet innan du växlar till avancerat läge): Du kan se att fälten från Grundläge har omräknats med python-kod på ett enkelt sätt. Vi måste lägga till instruktioner för att detta recept för att använda den tryckta versionen av artiklarna. Allt som behövs är att lägga till följande två rader: def print_version(self, url): return url.replace(' ' Detta är python, så indenteringen(indrag) är viktigt. När du har lagt raderna ska det se ut: I ovanstående, def print_version(self, url) definieras en metod som anropas av calibre för varje artikel. url är webbadressen till den ursprungliga artikeln. Vad print_version gör är att den tar URL:n och ersätter den med den nya URL:n som pekar på den tryckta versionen av artikeln. Om du vill veta om python 3 se tutorial 4. Nu klickar du på Lägg till/uppdatera recept-knappen och dina ändringar sparas. Hämta e-boken igen. Du bör nu ha en mycket förbättrad e-bok. Ett av problemen med den nya versionen är att typsnitten på utskriftsversion är för små. Detta är automatiskt justerat vid konvertering till en e-bok, men även efter justeringsprocessen, blir teckenstorleken för menyer och navigeringsfältet för stora i förhållande till artikeltexten. För att åtgärda detta, kommer vi att göra lite mer anpassning, i nästa avsnitt. Byte av artikelstilar I föregående avsnitt såg vi att teckenstorleken efter artiklar från den tryckta versionen av BBC var för liten. I de flesta webbplatser, ingår BBC, är detta textstorlek in med hjälp av CSS stilmallar. Vi kan inaktivera hämtning av sådana Kapitel 1. Avsnitten

31 mallar genom att lägga till raden: no_stylesheets = True Receptet ser nu ut: Den nya versionen ser ganska bra ut. Om du är en perfektionist, vill du nog läsa nästa avsnitt, som handlar faktiskt om att modifiera nedladdat material. Skivning och tärning calibre innehåller mycket kraftfulla och flexibla färdigheter när det gäller att manipulera nedladdat material. För att visa upp ett par av dessa, låt oss titta på vår gamle vän för BBC (sida 27) receptet igen. Om man tittar på källkoden (HTML) i ett par artiklar (utskriftsversion), ser vi att de har en sidfot som innehåller någon användbar information, som finns i <div class="footer">... </div> Detta kan tas bort genom att lägga till: remove_tags = [dict(name='div', attrs={'class':'footer'})] till receptet. Slutligen kan ersätta en del av CSS som vi tidigare inaktiverad, med vår egen :term: CSS om är lämplig för omvandling till en e-bok: extra_css = '.headline {font-size: x-large;} \n.fact { padding-top: 10pt }' Med dessa tillägg har vårt recept blivit produktionskvalitet, ja det är mycket nära till den faktiska receptet används av calibre för BBC, som visas nedan: ## ## Title: BBC News, Sport, and Blog Calibre Recipe ## Contact: mattst - jmstanfield@gmail.com ## ## License: GNU General Public License v3 - ## Copyright: mattst - jmstanfield@gmail.com ## ## Written: November 2011 ## Last Edited: ## 1.2. Lägga till din favorit nyhetswebbplats 27

32 license copyright = 'GNU General Public License v3 - = 'mattst - jmstanfield@gmail.com' ''' BBC News, Sport, and Blog Calibre Recipe ''' # Import the regular expressions module. import re # Import the BasicNewsRecipe class which this class extends. from calibre.web.feeds.recipes import BasicNewsRecipe class BBCNewsSportBlog(BasicNewsRecipe): # # **** IMPORTANT USERS READ ME **** # # First select the feeds you want then scroll down below the feeds list # and select the values you want for the other user preferences, like # oldest_article and such like. # # # Select the BBC rss feeds which you want in your ebook. # Selected feed have NO '#' at their start, de-selected feeds begin with a '#'. # # Eg. ("News Home", " - include feed. # Eg. #("News Home", " - do not include feed. # # There are 68 feeds below which constitute the bulk of the available rss # feeds on the BBC web site. These include 5 blogs by editors and # correspondants, 16 sports feeds, 15 'sub' regional feeds (Eg. North West # Wales, Scotland Business), and 7 Welsh language feeds. # # Some of the feeds are low volume (Eg. blogs), or very low volume (Eg. Click) # so if "oldest_article = 1.5" (only articles published in the last 36 hours) # you may get some 'empty feeds' which will not then be included in the ebook. # # The 15 feeds currently selected below are simply my default ones. # # Note: With all 68 feeds selected, oldest_article set to 2, # max_articles_per_feed set to 100, and simultaneous_downloads set to 10, # the ebook creation took 29 minutes on my speedy 100 mbps net connection, # fairly high-end desktop PC running Linux (Ubuntu Lucid-Lynx). # More realistically with 15 feeds selected, oldest_article set to 1.5, # max_articles_per_feed set to 100, and simultaneous_downloads set to 20, # it took 6 minutes. If that's too slow increase 'simultaneous_downloads'. # # Select / de-select the feeds you want in your ebook. # feeds = [ ("News Home", " ("UK", " ("World", " #("England", " #("Scotland", " #("Wales", " 28 Kapitel 1. Avsnitten

33 #("N. Ireland", " #("Africa", " #("Asia", " #("Europe", " #("Latin America", " #("Middle East", " ("US & Canada", " ("Politics", " ("Science/Environment", " ("Technology", " ("Magazine", " ("Entertainment/Arts", " #("Health", " #("Education/Family", " ("Business", " ("Special Reports", " ("Also in the News", " #("Newsbeat", " #("Click", " ("Blog: Nick Robinson (Political Editor)", " #("Blog: Mark D'Arcy (Parliamentary Correspondent)", " #("Blog: Robert Peston (Business Editor)", " #("Blog: Stephanie Flanders (Economics Editor)", " ("Blog: Rory Cellan-Jones (Technology correspondent)", " ("Sport Front Page", " #("Football", " #("Cricket", " #("Rugby Union", " #("Rugby League", " #("Tennis", " #("Golf", " #("Motorsport", " #("Boxing", " #("Athletics", " #("Snooker", " #("Horse Racing", " #("Cycling", " #("Disability Sport", " #("Other Sport", " #("Olympics 2012", " #("N. Ireland Politics", " #("Scotland Politics", " #("Scotland Business", " #("E. Scotland, Edinburgh & Fife", " #("W. Scotland & Glasgow", " #("Highlands & Islands", " #("NE. Scotland, Orkney & Shetland", " #("South Scotland", " #("Central Scotland & Tayside", " #("Wales Politics", " #("NW. Wales", " #("NE. Wales", " #("Mid. Wales", " #("SW. Wales", " #("SE. Wales", " #("Newyddion - News in Welsh", " #("Gwleidyddiaeth", " #("Gogledd-Ddwyrain", " Lägga till din favorit nyhetswebbplats 29

34 ] #("Gogledd-Orllewin", " #("Canolbarth", " #("De-Ddwyrain", " #("De-Orllewin", " # **** SELECT YOUR USER PREFERENCES **** # Title to use for the ebook. # title = 'BBC News' # A brief description for the ebook. # description = u'bbc web site ebook created using rss feeds.' # The max number of articles which may be downloaded from each feed. # I've never seen more than about 70 articles in a single feed in the # BBC feeds. # max_articles_per_feed = 100 # The max age of articles which may be downloaded from each feed. This is # specified in days - note fractions of days are allowed, Eg. 2.5 (2 and a # half days). My default of 1.5 days is the last 36 hours, the point at # which I've decided 'news' becomes 'old news', but be warned this is not # so good for the blogs, technology, magazine, etc., and sports feeds. # You may wish to extend this to 2-5 but watch out ebook creation time will # increase as well. Setting this to 30 will get everything (AFAICT) as long # as max_articles_per_feed remains set high (except for 'Click' which is # v. low volume and its currently oldest article is 4th Feb 2011). # oldest_article = 1.5 # Number of simultaneous downloads. 20 is consistantly working fine on the # BBC News feeds with no problems. Speeds things up from the defualt of 5. # If you have a lot of feeds and/or have increased oldest_article above 2 # then you may wish to try increasing simultaneous_downloads to 25-30, # Or, of course, if you are in a hurry. [I've not tried beyond 20.] # simultaneous_downloads = 20 # Timeout for fetching files from the server in seconds. The default of # 120 seconds, seems somewhat excessive. # timeout = 30 # The format string for the date shown on the ebook's first page. # List of all values: # Default in news.py has a leading space so that's mirrored here. # As with 'feeds' select/de-select by adding/removing the initial '#', # only one timefmt should be selected, here's a few to choose from. # timefmt = ' [%a, %d %b %Y]' # [Fri, 14 Nov 2011] (Calibre default) #timefmt = ' [%a, %d %b %Y %H:%M]' # [Fri, 14 Nov :30] #timefmt = ' [%a, %d %b %Y %I:%M %p]' # [Fri, 14 Nov :30 PM] #timefmt = ' [%d %b %Y]' # [14 Nov 2011] 30 Kapitel 1. Avsnitten

35 #timefmt = ' [%d %b %Y %H:%M]' # [14 Nov ] #timefmt = ' [%Y-%m-%d]' # [ ] #timefmt = ' [%Y-%m-%d-%H-%M]' # [ ] # # **** IMPORTANT **** # # DO NOT EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING. # # DO NOT EDIT BELOW HERE UNLESS YOU KNOW WHAT YOU ARE DOING. # # I MEAN IT, YES I DO, ABSOLUTELY, AT YOU OWN RISK. :) # # **** IMPORTANT **** # # Author of this recipe. author = 'mattst' # Specify English as the language of the RSS feeds (ISO-639 code). language = 'en_gb' # Set tags. tags = 'news, sport, blog' # Set publisher and publication type. publisher = 'BBC' publication_type = 'newspaper' # Disable stylesheets from site. no_stylesheets = True # Specifies an override encoding for sites that have an incorrect charset # specified. Default of 'None' says to auto-detect. Some other BBC recipes # use 'utf8', which works fine (so use that if necessary) but auto-detecting # with None is working fine, so stick with that for robustness. encoding = None # Sets whether a feed has full articles embedded in it. The BBC feeds do not. use_embedded_content = False # Removes empty feeds - why keep them!? remove_empty_feeds = True # Create a custom title which fits nicely in the Kindle title list. # Requires "import time" above class declaration, and replacing # title with custom_title in conversion_options (right column only). # Example of string below: "BBC News - 14 Nov 2011" # # custom_title = "BBC News - " + time.strftime('%d %b %Y') ''' # Conversion options for advanced users, but don't forget to comment out the # current conversion_options below. Avoid setting 'linearize_tables' as that 1.2. Lägga till din favorit nyhetswebbplats 31

36 # plays havoc with the 'old style' table based pages. # conversion_options = { 'title' : title, 'comments' : description, 'tags' : tags, 'language' : language, 'publisher' : publisher, 'authors' : publisher, 'smarten_punctuation' : True } ''' conversion_options = { 'smarten_punctuation' : True } # Specify extra CSS - overrides ALL other CSS (IE. Added last). extra_css = 'body { font-family: verdana, helvetica, sans-serif; } \.introduction,.first { font-weight: bold; } \.cross-head { font-weight: bold; font-size: 125%; } \.cap,.caption { display: block; font-size: 80%; font-style: italic; } \.cap,.caption,.caption img,.caption span { display: block; text-align: center; ma.byl,.byd,.byline img,.byline-name,.byline-title,.author-name,.author-position.correspondent-portrait img,.byline-lead-in,.name,.bbc-role { display: block; text-align: center; font-size: 80%; font-style: italic; margin: 1px auto; } \.story-date,.published { font-size: 80%; } \ table { width: 100%; } \ td img { display: block; margin: 5px auto; } \ ul { padding-top: 10px; } \ ol { padding-top: 10px; } \ li { padding-top: 5px; padding-bottom: 5px; } \ h1 { text-align: center; font-size: 175%; font-weight: bold; } \ h2 { text-align: center; font-size: 150%; font-weight: bold; } \ h3 { text-align: center; font-size: 125%; font-weight: bold; } \ h4, h5, h6 { text-align: center; font-size: 100%; font-weight: bold; }' # Remove various tag attributes to improve the look of the ebook pages. remove_attributes = [ 'border', 'cellspacing', 'align', 'cellpadding', 'colspan', 'valign', 'vspace', 'hspace', 'alt', 'width', 'height' ] # Remove the (admittedly rarely used) line breaks, "<br />", which sometimes # cause a section of the ebook to start in an unsightly fashion or, more # frequently, a "<br />" will muck up the formatting of a correspondant's byline. # "<br />" and "<br clear/>" are far more frequently used on the table formatted # style of pages, and really spoil the look of the ebook pages. preprocess_regexps = [(re.compile(r'<br[ ]*/>', re.ignorecase), lambda m: ''), (re.compile(r'<br[ ]*clear.*/>', re.ignorecase), lambda m: '')] # Create regular expressions for tag keeping and removal to make the matches more # robust against minor changes and errors in the HTML, Eg. double spaces, leading # and trailing spaces, missing hyphens, and such like. # Python regular expression ('re' class) page: # *************************************** # Regular expressions for keep_only_tags: # *************************************** # The BBC News HTML pages use variants of 'storybody' to denote the section of a HTML # page which contains the main text of the article. Match storybody variants: 'storybody', 32 Kapitel 1. Avsnitten

37 # 'story-body', 'story body','storybody ', etc. storybody_reg_exp = '^.*story[_ -]*body.*$' # The BBC sport and 'newsbeat' (features) HTML pages use 'blq_content' to hold the title # and published date. This is one level above the usual news pages which have the title # and date within 'story-body'. This is annoying since 'blq_content' must also be kept, # resulting in a lot of extra things to be removed by remove_tags. blq_content_reg_exp = '^.*blq[_ -]*content.*$' # The BBC has an alternative page design structure, which I suspect is an out-of-date # design but which is still used in some articles, Eg. 'Click' (technology), 'FastTrack' # (travel), and in some sport pages. These alternative pages are table based (which is # why I think they are an out-of-date design) and account for -I'm guesstimaking- less # than 1% of all articles. They use a table class 'storycontent' to hold the article # and like blq_content (above) have required lots of extra removal by remove_tags. story_content_reg_exp = '^.*story[_ -]*content.*$' # Keep the sections of the HTML which match the list below. The HTML page created by # Calibre will fill <body> with those sections which are matched. Note that the # blq_content_reg_exp must be listed before storybody_reg_exp in keep_only_tags due to # it being the parent of storybody_reg_exp, that is to say the div class/id 'story-body' # will be inside div class/id 'blq_content' in the HTML (if 'blq_content' is there at # all). If they are the other way around in keep_only_tags then blq_content_reg_exp # will end up being discarded. keep_only_tags = [ dict(name='table', attrs={'class':re.compile(story_content_reg_exp, re.ignorec dict(name='div', attrs={'class':re.compile(blq_content_reg_exp, re.ignorecas dict(name='div', attrs={'id':re.compile(blq_content_reg_exp, re.ignorecase)} dict(name='div', attrs={'class':re.compile(storybody_reg_exp, re.ignorecase) dict(name='div', attrs={'id':re.compile(storybody_reg_exp, re.ignorecase)}) # ************************************ # Regular expressions for remove_tags: # ************************************ # Regular expression to remove share-help and variant tags. The share-help class # is used by the site for a variety of 'sharing' type links, Eg. Facebook, delicious, # twitter, . Removed to avoid page clutter. share_help_reg_exp = '^.*share[_ -]*help.*$' # Regular expression to remove embedded-hyper and variant tags. This class is used to # display links to other BBC News articles on the same/similar subject. embedded_hyper_reg_exp = '^.*embed*ed[_ -]*hyper.*$' # Regular expression to remove hypertabs and variant tags. This class is used to # display a tab bar at the top of an article which allows the user to switch to # an article (viewed on the same page) providing further info., 'in depth' analysis, # an editorial, a correspondant's blog entry, and such like. The ability to handle # a tab bar of this nature is currently beyond the scope of this recipe and # possibly of Calibre itself (not sure about that - TO DO - check!). hypertabs_reg_exp = '^.*hyper[_ -]*tabs.*$' # Regular expression to remove story-feature and variant tags. Eg. 'story-feature', # 'story-feature related narrow', 'story-feature wide', 'story-feature narrow'. # This class is used to add additional info. boxes, or small lists, outside of # the main story. TO DO: Work out a way to incorporate these neatly. story_feature_reg_exp = '^.*story[_ -]*feature.*$' # Regular expression to remove video and variant tags, Eg. 'videoinstoryb', 1.2. Lägga till din favorit nyhetswebbplats 33

38 # 'videoinstoryc'. This class is used to embed video. video_reg_exp = '^.*video.*$' # Regular expression to remove audio and variant tags, Eg. 'audioinstoryd'. # This class is used to embed audio. audio_reg_exp = '^.*audio.*$' # Regular expression to remove picturegallery and variant tags, Eg. 'picturegallery'. # This class is used to embed a photo slideshow. See also 'slideshow' below. picture_gallery_reg_exp = '^.*picture.*$' # Regular expression to remove slideshow and variant tags, Eg. 'dslideshow-enclosure'. # This class is used to embed a slideshow (not necessarily photo) but both # 'slideshow' and 'picturegallery' are used for slideshows. slideshow_reg_exp = '^.*slide[_ -]*show.*$' # Regular expression to remove social-links and variant tags. This class is used to # display links to a BBC bloggers main page, used in various columnist's blogs # (Eg. Nick Robinson, Robert Preston). social_links_reg_exp = '^.*social[_ -]*links.*$' # Regular expression to remove quote and (multi) variant tags, Eg. 'quote', # 'endquote', 'quote-credit', 'quote-credit-title', etc. These are usually # removed by 'story-feature' removal (as they are usually within them), but # not always. The quotation removed is always (AFAICT) in the article text # as well but a 2nd copy is placed in a quote tag to draw attention to it. # The quote class tags may or may not appear in div's. quote_reg_exp = '^.*quote.*$' # Regular expression to remove hidden and variant tags, Eg. 'hidden'. # The purpose of these is unclear, they seem to be an internal link to a # section within the article, but the text of the link (Eg. 'Continue reading # the main story') never seems to be displayed anyway. Removed to avoid clutter. # The hidden class tags may or may not appear in div's. hidden_reg_exp = '^.*hidden.*$' # Regular expression to remove comment and variant tags, Eg. 'comment-introduction'. # Used on the site to display text about registered users entering comments. comment_reg_exp = '^.*comment.*$' # Regular expression to remove form and variant tags, Eg. 'comment-form'. # Used on the site to allow registered BBC users to fill in forms, typically # for entering comments about an article. form_reg_exp = '^.*form.*$' # Extra things to remove due to the addition of 'blq_content' in keep_only_tags. #<div class="story-actions"> Used on sports pages for ' ' and 'print'. story_actions_reg_exp = '^.*story[_ -]*actions.*$' #<div class="bookmark-list"> Used on sports pages instead of 'share-help' (for # social networking links). bookmark_list_reg_exp = '^.*bookmark[_ -]*list.*$' #<div id="secondary-content" class="content-group"> # NOTE: Don't remove class="content-group" that is needed. # Used on sports pages to link to 'similar stories'. secondary_content_reg_exp = '^.*secondary[_ -]*content.*$' 34 Kapitel 1. Avsnitten

39 #<div id="featured-content" class="content-group"> # NOTE: Don't remove class="content-group" that is needed. # Used on sports pages to link to pages like 'tables', 'fixtures', etc. featured_content_reg_exp = '^.*featured[_ -]*content.*$' #<div id="navigation"> # Used on sports pages to link to pages like 'tables', 'fixtures', etc. # Used sometimes instead of "featured-content" above. navigation_reg_exp = '^.*navigation.*$' #<a class="skip" href="#blq-container-inner">skip to top</a> # Used on sports pages to link to the top of the page. skip_reg_exp = '^.*skip.*$' # Extra things to remove due to the addition of 'storycontent' in keep_only_tags, # which are the alterative table design based pages. The purpose of some of these # is not entirely clear from the pages (which are a total mess!). # Remove mapping based tags, Eg. <map id="world_map"> # The dynamic maps don't seem to work during ebook creation. TO DO: Investigate. map_reg_exp = '^.*map.*$' # Remove social bookmarking variation, called 'socialbookmarks'. social_bookmarks_reg_exp = '^.*social[_ -]*bookmarks.*$' # Remove page navigation tools, like 'search', ' ', 'print', called 'blq-mast'. blq_mast_reg_exp = '^.*blq[_ -]*mast.*$' # Remove 'sharesb', I think this is a generic 'sharing' class. It seems to appear # alongside 'socialbookmarks' whenever that appears. I am removing it as well # under the assumption that it can appear alone as well. sharesb_reg_exp = '^.*sharesb.*$' # Remove class 'o'. The worst named user created css class of all time. The creator # should immediately be fired. I've seen it used to hold nothing at all but with # 20 or so empty lines in it. Also to hold a single link to another article. # Whatever it was designed to do it is not wanted by this recipe. Exact match only. o_reg_exp = '^o$' # Remove 'promotopbg' and 'promobottombg', link lists. Have decided to # use two reg expressions to make removing this (and variants) robust. promo_top_reg_exp = '^.*promotopbg.*$' promo_bottom_reg_exp = '^.*promobottombg.*$' # Remove 'nlp', provides heading for link lists. Requires an exact match due to # risk of matching those letters in something needed, unless I see a variation # of 'nlp' used at a later date. nlp_reg_exp = '^nlp$' # Remove 'mva', provides embedded floating content of various types. Variant 'mvb' # has also now been seen. Requires an exact match of 'mva' or 'mvb' due to risk of # matching those letters in something needed. mva_or_mvb_reg_exp = '^mv[ab]$' # Remove 'mvtb', seems to be page navigation tools, like 'blq-mast'. mvtb_reg_exp = '^mvtb$' # Remove 'blq-toplink', class to provide a link to the top of the page Lägga till din favorit nyhetswebbplats 35

40 blq_toplink_reg_exp = '^.*blq[_ -]*top[_ -]*link.*$' # Remove 'products and services' links, Eg. desktop tools, alerts, and so on. # Eg. Class="servicev4 ukfs_services" - what a mess of a name. Have decided to # use two reg expressions to make removing this (and variants) robust. prods_services_01_reg_exp = '^.*servicev4.*$' prods_services_02_reg_exp = '^.*ukfs[_ -]*services.*$' # Remove -what I think is- some kind of navigation tools helper class, though I am # not sure, it's called: 'blq-rst blq-new-nav'. What I do know is it pops up # frequently and it is not wanted. Have decided to use two reg expressions to make # removing this (and variants) robust. blq_misc_01_reg_exp = '^.*blq[_ -]*rst.*$' blq_misc_02_reg_exp = '^.*blq[_ -]*new[_ -]*nav.*$' # Remove 'puffbox' - this may only appear inside 'storyextra', so it may not # need removing - I have no clue what it does other than it contains links. # Whatever it is - it is not part of the article and is not wanted. puffbox_reg_exp = '^.*puffbox.*$' # Remove 'sibtbg' and 'sibtbgf' - some kind of table formatting classes. sibtbg_reg_exp = '^.*sibtbg.*$' # Remove 'storyextra' - links to relevant articles and external sites. storyextra_reg_exp = '^.*story[_ -]*extra.*$' dict(name='div', attrs={'id':re.compile(social_bookmarks_reg_exp, re.ignorecase)} remove_tags = [ dict(name='div', attrs={'class':re.compile(story_feature_reg_exp, re.ignorecase) dict(name='div', attrs={'class':re.compile(share_help_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(embedded_hyper_reg_exp, re.ignorecase dict(name='div', attrs={'class':re.compile(hypertabs_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(video_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(audio_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(picture_gallery_reg_exp, re.ignorecas dict(name='div', attrs={'class':re.compile(slideshow_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(quote_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(hidden_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(comment_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(story_actions_reg_exp, re.ignorecase) dict(name='div', attrs={'class':re.compile(bookmark_list_reg_exp, re.ignorecase) dict(name='div', attrs={'id':re.compile(secondary_content_reg_exp, re.ignorecase dict(name='div', attrs={'id':re.compile(featured_content_reg_exp, re.ignorecase) dict(name='div', attrs={'id':re.compile(navigation_reg_exp, re.ignorecase)}), dict(name='form', attrs={'id':re.compile(form_reg_exp, re.ignorecase)}), dict(attrs={'class':re.compile(quote_reg_exp, re.ignorecase)}), dict(attrs={'class':re.compile(hidden_reg_exp, re.ignorecase)}), dict(attrs={'class':re.compile(social_links_reg_exp, re.ignorecase)}), dict(attrs={'class':re.compile(comment_reg_exp, re.ignorecase)}), dict(attrs={'class':re.compile(skip_reg_exp, re.ignorecase)}), dict(name='map', attrs={'id':re.compile(map_reg_exp, re.ignorecase)}), dict(name='map', attrs={'name':re.compile(map_reg_exp, re.ignorecase)}), dict(name='div', attrs={'id':re.compile(blq_mast_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(sharesb_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(o_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(promo_top_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(promo_bottom_reg_exp, re.ignorecase)} dict(name='div', attrs={'class':re.compile(nlp_reg_exp, re.ignorecase)}), 36 Kapitel 1. Avsnitten

41 dict(name='div', attrs={'class':re.compile(mva_or_mvb_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(mvtb_reg_exp, re.ignorecase)}), dict(name='div', attrs={'class':re.compile(blq_toplink_reg_exp, re.ignorecase)}) dict(name='div', attrs={'class':re.compile(prods_services_01_reg_exp, re.ignorec dict(name='div', attrs={'class':re.compile(prods_services_02_reg_exp, re.ignorec dict(name='div', attrs={'class':re.compile(blq_misc_01_reg_exp, re.ignorecase)}) dict(name='div', attrs={'class':re.compile(blq_misc_02_reg_exp, re.ignorecase)}) dict(name='div', attrs={'class':re.compile(puffbox_reg_exp, re.ignorecase)}), dict(attrs={'class':re.compile(sibtbg_reg_exp, re.ignorecase)}), dict(attrs={'class':re.compile(storyextra_reg_exp, re.ignorecase)}) ] # Uses url to create and return the 'printer friendly' version of the url. # In other words the 'print this page' address of the page. # # There are 3 types of urls used in the BBC site's rss feeds. There is just # 1 type for the standard news while there are 2 used for sports feed urls. # Note: Sports urls are linked from regular news feeds (Eg. 'News Home') when # there is a major story of interest to 'everyone'. So even if no BBC sports # feeds are added to 'feeds' the logic of this method is still needed to avoid # blank / missing / empty articles which have an index title and then no body. def print_version(self, url): # Handle sports page urls type 01: if (url.find("go/rss/-/sport1/")!= -1): temp_url = url.replace("go/rss/-/", "") # Handle sports page urls type 02: elif (url.find("go/rss/int/news/-/sport1/")!= -1): temp_url = url.replace("go/rss/int/news/-/", "") # Handle regular news page urls: else: temp_url = url.replace("go/rss/int/news/-/", "") # Always add "?print=true" to the end of the url. print_url = temp_url + "?print=true" return print_url # Remove articles in feeds based on a string in the article title or url. # # Code logic written by: Starson17 - posted in: "Recipes - Re-usable code" # thread, in post with title: "Remove articles from feed", see url: # # Many thanks and all credit to Starson17. # # Starson17's code has obviously been altered to suite my requirements. def parse_feeds(self): # Call parent's method. feeds = BasicNewsRecipe.parse_feeds(self) # Loop through all feeds. for feed in feeds: # Loop through all articles in feed Lägga till din favorit nyhetswebbplats 37

42 for article in feed.articles[:]: return feeds # End of class and file. # Match key words and remove article if there's a match. # Most BBC rss feed video only 'articles' use upper case 'VIDEO' # as a title prefix. Just match upper case 'VIDEO', so that # articles like 'Video game banned' won't be matched and removed. if 'VIDEO' in article.title: feed.articles.remove(article) # Most BBC rss feed audio only 'articles' use upper case 'AUDIO' # as a title prefix. Just match upper case 'AUDIO', so that # articles like 'Hi-Def audio...' won't be matched and removed. elif 'AUDIO' in article.title: feed.articles.remove(article) # Most BBC rss feed photo slideshow 'articles' use 'In Pictures', # 'In pictures', and 'in pictures', somewhere in their title. # Match any case of that phrase. elif 'IN PICTURES' in article.title.upper(): feed.articles.remove(article) # As above, but user contributed pictures. Match any case. elif 'YOUR PICTURES' in article.title.upper(): feed.articles.remove(article) # 'Sportsday Live' are articles which contain a constantly and # dynamically updated 'running commentary' during a live sporting # event. Match any case. elif 'SPORTSDAY LIVE' in article.title.upper(): feed.articles.remove(article) # Sometimes 'Sportsday Live' (above) becomes 'Live - Sport Name'. # These are being matched below using 'Live - ' because removing all # articles with 'live' in their titles would remove some articles # that are in fact not live sports pages. Match any case. elif 'LIVE - ' in article.title.upper(): feed.articles.remove(article) # 'Quiz of the week' is a Flash player weekly news quiz. Match only # the 'Quiz of the' part in anticipation of monthly and yearly # variants. Match any case. elif 'QUIZ OF THE' in article.title.upper(): feed.articles.remove(article) # Remove articles with 'scorecards' in the url. These are BBC sports # pages which just display a cricket scorecard. The pages have a mass # of table and css entries to display the scorecards nicely. Probably # could make them work with this recipe, but might take a whole day # of work to sort out all the css - basically a formatting nightmare. elif 'scorecards' in article.url: feed.articles.remove(article) Detta recept utforskar bara toppen av isberget när det kommer till makten av calibre. För att utforska mer av förmågan 38 Kapitel 1. Avsnitten

43 hos calibre så undersöker vi en mer komplex verkliga livet exempel i nästa avsnitt. Exempel i verkligheten Ett tämligen komplicerat exempel från verkligheten som exponerar mer av API för BasicNewsRecipe är recept för New York Times import string, re from calibre import strftime from calibre.web.feeds.recipes import BasicNewsRecipe from calibre.ebooks.beautifulsoup import BeautifulSoup class NYTimes(BasicNewsRecipe): title = 'The New York Times' author = 'Kovid Goyal' description = 'Daily news from the New York Times' timefmt = ' [%a, %d %b, %Y]' needs_subscription = True remove_tags_before = dict(id='article') remove_tags_after = dict(id='article') remove_tags = [dict(attrs={'class':['articletools', 'post-tools', 'side_tool', 'nextarticlelink c dict(id=['footer', 'toolsright', 'articleinline', 'navigation', 'archive', 'side_sear dict(name=['script', 'noscript', 'style'])] encoding = 'cp1252' no_stylesheets = True extra_css = 'h1 {font: sans-serif large;}\n.byline {font:monospace;}' def get_browser(self): br = BasicNewsRecipe.get_browser() if self.username is not None and self.password is not None: br.open(' br.select_form(name='login') br['userid'] = self.username br['password'] = self.password br.submit() return br def parse_index(self): soup = self.index_to_soup(' def feed_title(div): return ''.join(div.findall(text=true, recursive=false)).strip() articles = {} key = None ans = [] for div in soup.findall(true, attrs={'class':['section-headline', 'story', 'story headline']}): if div['class'] == 'section-headline': key = string.capwords(feed_title(div)) articles[key] = [] ans.append(key) elif div['class'] in ['story', 'story headline']: a = div.find('a', href=true) if not a: 1.2. Lägga till din favorit nyhetswebbplats 39

44 continue url = re.sub(r'\?.*', '', a['href']) url += '?pagewanted=all' title = self.tag_to_string(a, use_alt=true).strip() description = '' pubdate = strftime('%a, %d %b') summary = div.find(true, attrs={'class':'summary'}) if summary: description = self.tag_to_string(summary, use_alt=false) feed = key if key is not None else 'Uncategorized' if not articles.has_key(feed): articles[feed] = [] if not 'podcasts' in url: articles[feed].append( dict(title=title, url=url, date=pubdate, description=description, content='')) ans = self.sort_index_by(ans, {'The Front Page':-1, 'Dining In, Dining Out':1, 'Obituaries':2 ans = [(key, articles[key]) for key in ans if articles.has_key(key)] return ans def preprocess_html(self, soup): refresh = soup.find('meta', {'http-equiv':'refresh'}) if refresh is None: return soup content = refresh.get('content').partition('=')[2] raw = self.browser.open(' return BeautifulSoup(raw.decode('cp1252', 'replace')) Vi ser flera nya funktioner i detta recept. recept. Först har vi: timefmt = ' [%a, %d %b, %Y]' Detta ställer den visade tiden på förstasidan av den skapade e-boken att vara i formatet, Dag, Dag_Nummer Månad, År. Se timefmt (sida 50). Sedan ser vi en grupp av direktiv till sanering den nedladdade HTML: remove_tags_before = dict(name='h1') remove_tags_after = dict(id='footer') remove_tags =... Dessa tar bort allt innan den första <h1> etiketten och allt efter den första etiketten vars id är footer. Se remove_tags (sida 49), remove_tags_before (sida 50), remove_tags_after (sida 50). Nästa intressant funktion är: needs_subscription = True... def get_browser(self):... needs_subscription = True berättar för calibre att detta recept behöver användarnamn och lösenord för att kunna åt innehållet. Detta medför att, calibre frågar efter användarnamn och lösenord när du försöker använda det här receptet. Koden i calibre.web.feeds.news.basicnewsrecipe.get_browser() (sida 43) loggar faktiskt in på NYT webbsida. När du loggat in, kommer calibre använda samma webbinstans för att hämta allt innehåll. Se mechanize 5 to understand the code in get_browser Kapitel 1. Avsnitten

45 Nästa nyhet är calibre.web.feeds.news.basicnewsrecipe.parse_index() (sida 44) metoden. Dess uppgift är att gå till och hämta listan över artiklar som visas i dagens tidning. Medan mer komplex än att bara använda RSS, skapar receptet en e-bok som motsvarar mycket nära dagens tidning. parse_index använder mycket BeautifulSoup 6 för att tolka dagens tidningswebbsida. Du kan också använda andra, mer moderna parsers om du ogillar BeatifulSoup. calibre comes with lxml 7 och html5lib 8, vilka är de rekommenderade parsers. För att använda dem, byt ut anropet till index_to_soup() med följande: raw = self.index_to_soup(url, raw=true) # For html5lib import html5lib root = html5lib.parse(raw, namespacehtmlelements=false, treebuilder='lxml') # For the lxml html 4 parser from lxml import html root = html.fromstring(raw) Den sista nyheten är calibre.web.feeds.news.basicnewsrecipe.preprocess_html() (sida 45) metoden. Den kan användas för att utföra godtyckliga transformationer på varje nedladdad HTML-sida. Här används det för att kringgå de annonser som de NYTimes visar dig innan varje artikel Tips för att utveckla nya recept Det bästa sättet att utveckla nya recept är att använda kommandoraden. Skapa receptet med din favorit python editor och spara den till en fil låt säga myrecipe.recipe. Den.recipe -tillägget krävs. Du kan hämta innehåll med detta recept med kommandot: ebook-convert myrecipe.recipe.epub --test -vv --debug-pipeline debug Kommandot ebook-convert kommer att ladda ner alla webbsidor och spara dem till EPUB-filen myrecipe.epub. Alternativet -vv får ebook-convert mata ut en hel del information om vad den gör. Alternativet --test begränsar nerladdning till bara ett par artiklar från högst två flöden. Dessutom kommer ebook-convert placera HTML i debug/input-katalogen, där debug är katalogen du angav i --debug-pipeline-alternativet. När nedladdningen är klar kan du titta på den nedladdade HTML genom att öppna filen debug/input/index.html i en webbläsare. När du är nöjd med nedladdningen och förbehandling sker på rätt sätt, kan du skapa e-böcker i olika format enligt nedan: ebook-convert myrecipe.recipe myrecipe.epub ebook-convert myrecipe.recipe myrecipe.mobi... Om du är nöjd med ditt recept, och du känner att det finns tillräcklig efterfrågan för att motivera dess införande i uppsättningen av inbyggda recept, lägg upp receptet på calibres receptforum 9 för att dela den med andra calibreanvändare. Observera: På OS X, kommandoradverktyget är inne i calibre paketet, till exempel om du installerar Calibre i /Applications är kommandoradverktyget i /Applications/calibre.app/Contents/console.app/Contents/MacOS/. Se även: ebook-convert (sida 245) Kommandoradsgränssnittet för all e-bokkonvertering Lägga till din favorit nyhetswebbplats 41

46 1.2.4 Ytterligare läsning Om du vill veta mer om att skriva avancerade recept med några av faciliteterna som finns i BasicNewsRecipe bör du konsultera följande källor: API Documentation (sida 42) Dokumentation av BasicNewsRecipe-klassen och alla dess viktiga metoder och fält. BasicNewsRecipe 10 Built-in recipes 11 The calibre recipes forum 12 Källkoden för BasicNewsRecipe Källkoden för de inbyggda recept som kommer med calibre Massor av kunniga calibre recept-författare håller till här API dokumentation API dokumentation för recept API för skriva recept är definierade av BasicNewsRecipe (sida 42) class calibre.web.feeds.news.basicnewsrecipe(options, log, progress_reporter) Basklass som innehåller logik behövs i alla recept. Av överrida progressivt mer av funktionaliteten i denna klass, kan du göra allt mer kundanpassade / kraftfulla recept. En handledning introduktion till att skapa recept, se Lägga till din favorit nyhetswebbplats (sida 23). abort_article(msg=none) Anropa denna metod inne i någon av förbehandlingsmetoderna för att avbryta nedladdningen för den aktuella artikeln. Användbara att hoppa över artiklar som innehåller olämpligt innehåll, såsom rena videoartiklar. abort_recipe_processing(msg) Orsakar att receptetnedladdningssystemet avbryter nedladdningen av detta recept, visar en enkel återkopplingsmeddelande till användaren. add_toc_thumbnail(article, src) Kalla detta från populate_article_metadata med attributet src för en <img> etiketten från artikeln som är lämplig att använda som ikon representerar artikeln i innehållsförteckningen. Huruvida ikonen faktiskt används är beroende av enhet (för närvarande endast används av Kindles). Observera att den refererade bilden måste vara en som framgångsrikt hämtats, annars kommer det att ignoreras. classmethod adeify_images(soup) Om ditt recept vid konvertering till EPUB har problem med bilderna när de visas i Adobe Digital Editions, kalla denna metod inifrån postprocess_html() (sida 45). canonicalize_internal_url(url, is_link=true) Returnera en uppsättning kanoniska representationer av url. Grundinställningen använder bara servervärdnamn och sökväg för URL, ignorerar eventuella frågeparametrar, fragment, etc. kanoniska representationer måste vara unika för alla webbadresser till den här nyhetskällan. Om de inte är det, så interna länkar kan lösas felaktigt. Parametrar is_link Är Sann om webbadressen kommer från en intern länk i en HTML-fil. Falsk om webbadressen är URL som används för att hämta en artikel. cleanup() Anropas efter alla artiklar har laddats ner. Använd den för att göra godtycklig sanering som att logga ut från prenumerationsplatser etc Kapitel 1. Avsnitten

47 clone_browser(br) Klona webbläsare br. Klonade webbläsare används för multi-trådade nedladdningar, eftersom mechanize (mekanisera) inte är trådsäkert. Standardkloningsrutiner ska fånga de flesta webbläsaranpassningar, men om du gör något exotiskt i ditt recept, ska du åsidosätta den här metoden i ditt recept och klona manuellt. Klonade webbläsarinstanser använder samma, trådsäkra CookieJar som standard, såvida du inte har anpassat cookie-hantering. default_cover(cover_file) Skapa en generisk omslag för recept som inte har ett omslag download() Hämta och förbearbeta alla artiklar från flöde i detta recept. Denna metod bör kallas en gång för en viss receptinstans. Kallas det mer än en gång kommer det att leda till odefinierade beteenden. :return: Path to index.html extract_readable_article(html, url) Tar fram huvudartikelns innehåll från html, rensar upp och återvänder som en (article_html, extracted_title) tupel. Baserat på den ursprungliga läsbarhet algoritm genom Arc90. get_article_url(article) Överrid i en underklass för att anpassa utvinning av URL som pekar på innehållet för varje artikel. Returnera artikel-urln. Den anropas med article, ett objekt som representerar en analyserad artikel från ett flöde. Se feedparser < _. Normalt söker den efter den ursprungliga länken (till flöde syndikerade via en tjänst som Feedburner eller pheedo) och om den hittas, returnerar detta eller annars returneras article.link 13. get_browser(*args, **kwargs) Returnera en webbläsare instans som används för att hämta dokument från webben. Som standard den returnerar en mechanize (mekanisera) 14 browser instans som stöder cookies, ignorerar robots.txt, hanterar fräschar och har ett Mozilla Firefox användaragent. Om ditt recept kräver att du loggar in först, överrids denna metod i din underklass. Till exempel är följande kod används i New York Times recept för att logga in för full tillgång: def get_browser(self): br = BasicNewsRecipe.get_browser(self) if self.username is not None and self.password is not None: br.open(' br.select_form(name='login') br['userid'] = self.username br['password'] = self.password br.submit() return br get_cover_url() Returnera en URL till omslagsbild för den här utgåvan eller None. Som standard returnerar värdet av elementet self.cover_url som normalt är None. Om du vill att ditt recept för att hämta ett omslag för e- boken överrids den här metoden i din underklass, eller ställa medlemsvariabeln self.cover_url innan denna metod anropas. get_feeds() Returnera en lista med RSS flöde att hämta för den här profilen. Varje element i listan måste vara ett 2-elements tupel av formen (titel, url). Om titeln är None eller en tom sträng, används titeln från flödet. Denna metod är användbar om du receptet behöver göra en del bearbetning för att räkna ut lista med inlägg för att ladda ner. Om så är fallet, överrid i din underklass Lägga till din favorit nyhetswebbplats 43

48 get_masthead_title() Överrids i underklass för att använda något annat än receptets titel get_masthead_url() Returnera en URL till redaktionsloggo till denna utgåva eller None. Som standard returnerar värdet av elementet self.masthead_url som normalt är None. Om du vill att ditt recept ska hämta en redationsloggon för e-boken överrrid den här metoden i din underklass, eller sätt medlemmen variabeln self.masthead_url innan denna metod anropas. Redaktionsloggo används i Kindle MOBI-filer. get_obfuscated_article(url) Om du sätter articles_are_obfuscated anropas denna metod med varje artikel URL. Det ska returnera sökvägen till en fil i filsystemet som innehåller artikeln HTML. Filen bearbetas av den rekursiva HTMLhämtmotor, så det kan innehålla länkar till sidor / bilder på webben. Denna metod är oftast användbart för webbplatser som försöker göra det svårt att komma åt artikelns innehåll automatiskt. classmethod image_url_processor(baseurl, url) Utför någon behandling på bildwebbadresser (kanske ta bort storleksbegränsningar för dynamiskt skapade bilder, etc.) och returnera bearbetad URL. index_to_soup(url_or_raw, raw=false, as_tree=false) Bekväm metod som använder en webadress (URL) för indexera en sida och returnerar en BeautifulSoup 15 av den. url_or_raw: Antingen en webbadress eller den nedladdade indexsidan som en sträng is_link_wanted(url, tag) Returnerar Sann om länken ska följas eller Falsk annars. Som standard höjer NotImplementedError som orsakar hämtningen att ignorera det. Parametrar url Webbadressen som skall följas tag Ettiketen för vilken URL erhölls javascript_login(browser, username, password) Denna metod används för att logga in på en webbplats som använder javascript för sitt inloggningsformulär. Efter inloggningen är klar, kopieras kakorna från webbplatsen kopieras till en normal (icke-javascript) webbläsare och nedladdningen fortsätter som använder dessa kakor. Ett exempel på implementering: def javascript_login(self, browser, username, password): browser.visit(' form = browser.select_form(nr=0) # Select the first form on the page form['username'] = username form['password'] = password browser.submit(timeout=120) # Submit the form and wait at most two minutes for loading t Observera att du också kan välja formulär med CSS2 väljare, så här: browser.select_form('form#login_form') browser.select_from('form[name="someform"]') parse_feeds() Skapa en lista över artiklar i listan över flöden som returneras av BasicNewsRecipe.get_feeds() (sida 43). Returnerar en lista med Feed objekt Kapitel 1. Avsnitten

49 parse_index() Denna metod bör implementeras på recept för att tolka en webbplats istället för flöde för att skapa en lista med artiklar. Typiska användningsområden är för nyhetskällor som har en Print Edition webbsida som listar alla artiklar i den aktuella tryckupplagan. Om denna funktion implementeras kommer den att användas i stället för BasicNewsRecipe.parse_feeds() (sida 44). Det måste returnera en lista. Varje element i listan måste vara ett 2-inslag tupel av formen (fflödestitel", lista med artiklar). Varje lista av artiklar måste innehålla ordlister på formen: { 'title' : article title, 'url' : URL of print version, 'date' : The publication date of the article as a string, 'description' : A summary of the article 'content' : The full article (can be an empty string). Obsolete do not use, instead save the content to a temporary file and pass a file:///path/to/temp/file.html as the URL. } Till exempel, se receptet för nedladdning The Atlantic. Dessutom kan du lägga till författare för författaren till artikeln. Om du vill avbryta behandlingen av någon anledning och låta calibre visa användaren ett enkelt budskap i stället för ett fel, anropa abort_recipe_processing() (sida 42). populate_article_metadata(article, soup, first) Anropas när varje HTML-sida som hör till artikeln hämtas. Avsedd att användas för att få artikelns metadata som författaren / sammandrag / etc. från analyserad HTML (soppa). :param artikel: Ett objekt av klassen calibre.web.feeds.article. Om du ändrar sammanfattningen, kom ihåg att också ändra text_summary :param soup: Tolkad HTML tillhör denna artikel :param first: Sann om och endast om analyserad HTML är den första sidan av artikeln. postprocess_book(oeb, opts, log) Körs om någon efterbehandling behövs på analyserad nedladdade e-bok. Parametrar oeb Ett OEBBook-objekt opts Konverteringsalternativ postprocess_html(soup, first_fetch) Denna metod kallas med källan till varje nedladdad: term HTML fil, efter att den analyserats för länkar och bilder. Den kan användas för att göra godtyckligt kraftfull efterbehandling på HTML. Det bör returnera soup efter bearbetning det. Parametrar soup En BeautifulSoup 16 instans innehållande nerladdad HTML. first_fetch Sann om detta är första sidan av en artikel. preprocess_html(soup) Denna metod kallas med källan till varje nedladdad HTML fil, innan den analyseras för länkar och bilder. Det kallas efter rensningen som specificerats remove_tags etc. Det kan användas för att göra godtyckliga och starka förbearbetning på HTML. Det bör returnera soup efter bearbetning det Lägga till din favorit nyhetswebbplats 45

50 soup: En BeautifulSoup 17 instans innehållande nerladdad HTML. preprocess_raw_html(raw_html, url) Denna metod anropas med källa av varje nedladdad HTML fil, innan den tolkas i ett objektträd. raw_html är en unicode sträng som representerar råa HTML nedladdningen från webben. url är URL från vilken HTML var nedladdad. Obserevera att denna metod agerar innan preprocess_regexps. Denna metod måste returnera den bearbetade raw_html som ett unicode-objekt. classmethod print_version(url) Ta en url som pekar på en webbsida med artikelinnehåll och returnerar URL som pekar på en utskrivbar version av artikeln. Som standard gör ingenting. TIll exempel: def print_version(self, url): return url + '?&pagewanted=print' skip_ad_pages(soup) Denna metod anropas med källan till varje nedladdad HTML fil, innan någon av rensningsattribut som remove_tags, keep_only_tags tillämpas. Observera att preprocess_regexps kommer redan ha använts. Det är tänkt att låta receptet att hoppa över annonssidor. Om soup är en annonssida, returnera HTML den verkliga sidan. Annars returneras None. soup: En BeautifulSoup 18 instans innehållande nerladdad HTML. sort_index_by(index, weights) Bekväm metod för att sortera titlar i index enligt weights. index sorteras på plats. Returnerar index. index: En lista av titlar. weights: En ordlista som översätter vikt mot titel., Om något titelindex inte har vikt. antas de ha vikten 0. classmethod tag_to_string(tag, use_alt=true, normalize_whitespace=true) Bekväm metod som använder en BeautifulSoup 19 tag-etikett och extraherar text från den rekursivt, inkluderande godtycklig CDATA sektion och alt-attribut. Returnerar en möjlig tom unicode-sträng. use_alt: Om True försök använd alt attribut för etiketter som inte har något textinnehåll tag: BeautifulSoup 20 Tag (Etikett) articles_are_obfuscated = False Sätt till Sann och implementerar get_obfuscated_article() (sida 44) för hantera webbsidor som försöker göra det svårt att skrapa fram innehåll. auto_cleanup = False Automatiskt extrahera all text från nedladdade artikelsidor. Använder algoritmerna från läsbarhet projektet. Sätt denna sann innebär att du inte behöver oroa dig för att städa upp den nedladdade HTML manuellt (även om manuell rensning alltid kommer att vara bättre). auto_cleanup_keep = None Specify elements that the auto cleanup algorithm should never remove. The syntax is a XPath expression. For example: auto_cleanup_keep = '//div[@id="article-image"]' will keep all divs with id="article-image" auto_cleanup_keep = '//*[@class="important"]' will keep all elements with class="important" Kapitel 1. Avsnitten

51 auto_cleanup_keep = '//div[@id="article-image"] //span[@class="important"]' will keep all divs with id="article-image" and spans with class="important" center_navbar = True Om sann centreras navigationslisten annars är den vänsterjusterad compress_news_images = False Ställ in den till Falsk för att ignorera alla skalnings- och komprimeringsparametrar och passera bilder igenom omodifierad. Om Sann och andra komprimeringsparametrar behåller sina standardvärden, kommer jpeg-bilder skalas för att passa in skärmmått som fastställts av utskriftsprofil och komprimeras till storleken på de flesta (b * h) / 16 där bxh är det skalade bildens dimensioner. compress_news_images_auto_size = 16 Den faktor som används när automatisk komprimera jpeg-bilder. Om värdet är None, är komprimering automatisk inaktiverad. Annars kommer bilderna att minskas i storlek till (b * h) / compress_news_images_auto_size byte om möjligt genom att minska kvalitetsnivån, där bxh är bildens dimensioner i pixlar. Den minsta jpeg-kvalitet kommer att vara 5/100 så det är möjligt denna begränsning inte kommer att uppfyllas. Denna parameter kan överridas av parametern compress_news_images_max_size som ger en fast maximal storlek för bilder. Observera att om du aktiverar scale_news_images_to_device kommer sedan bilden först skalas och sedan dess kvalitet sänkas tills dess storlek är mindre än (b*h)/faktor där w och h är nu bildens skalade dimensioner. Med andra ord, denna kompression sker efter skalning. compress_news_images_max_size = None Sätt jpeg-kvalitet så att bilder inte överskrider angiven storlek (i kbytes). Om satt, överrider denna parameter automatisk komprimering via compress_news_images_auto_size. Minimum jpeg-kvalitet kommer vara 5/100 so det är möjligt att denna restriktion inte möts. conversion_options = {} Receptspecifika alternativ för att styra konvertering av nedladdat innehåll in i en e-bok. Dessa kommer överrida alla användare eller tilläggsspecifika värden, så använd bara om det är absolut nödvändigt. TIll exempel: conversion_options = { 'base_font_size' : 16, 'tags' : 'mytag1,mytag2', 'title' : 'My Title', 'linearize_tables' : True, } cover_margins = (0, 0, #ffffff ) Som standard returneras omslagsbild av get_cover_url () och kommer att användas som omslag för tidskriften. Överridning av detta i ditt recept instruerar calibre att anpassa det nedladdade omslaget i en ram vars bredd och höjd uttrycks som en procentandel av den nedladdade omslaget. cover_margins = (10, 15, #ffffff ) fyller omslaget med en vit marginal 10px på vänster och höger, 15px på toppen och botten. Färgnamn som fastställts på Notera att av någon anledning, vitt fungerar inte alltid på fönster. Använd #ffffff istället delay = 0 Fördröjning mellan konsekutiva nedladdningar i sekunder. Argumentet kan vara ett flyttal för att indikera mer exakt tid. description = u Ett par rader som beskriver innehållet detta recept laddar ner. Detta kommer främst att användas i ett användargränssnitt som presenterar en lista med recept. encoding = None Ange en kodningsöverridning för webbplatser som har en felaktig charset-specifikation. Det vanligaste är 1.2. Lägga till din favorit nyhetswebbplats 47

52 att ange latin1 och använda cp1252. Om None, försöka identifiera kodningen. Om det är en anropbar, anropas den anropbara med två argument: Receptobjektet och den källa som skall avkodas. Det måste returnera den avkodade källan. extra_css = None Ange någon extra CSS som bör läggas till ladda ned HTML-filer. Det kommer att införas i <style> etiketter, precis före den avslutande </head> etikett därmed tvingande allt CSS utom det som deklareras med hjälp av stilattribut på individuella HTML etiketter. Exempelvis: extra_css = '.heading { font: serif x-large }' feeds = None Förteckning över flöde för att ladda ner. Kan vara antingen [url1, url2,...] eller [( title1, url1), ( title2, url2),...] filter_regexps = [] Lista över reguljära uttryck som avgör vilka länkar att ignorera. Om den är tom ignoreras det. Endast användas om is_link_wanted inte implementeras. Exempelvis: filter_regexps = [r'ads\.doubleclick\.net'] kommer ta bort alla URLer som har ads.doubleclick.net in sig. Bara en av BasicNewsRecipe.match_regexps (sida 48) eller BasicNewsRecipe.filter_regexps (sida 48) skulle bara definierad. ignore_duplicate_articles = None Ignorera dubbletter av artiklar som finns i mer än ett avsnitt. En dubblettartikel är en artikel som har samma titel och / eller webbadress. Att ignorera artiklar med samma titel, ställa detta till: ignore_duplicate_articles = {'title'} För att använda URL:er i stället, sätt den till: ignore_duplicate_articles = {'url'} För träff mot titel eller URL, sätt den till: ignore_duplicate_articles = {'title', 'url'} keep_only_tags = [] Håll endast specificerade etiketter och deras barn. För formatet för att ange en etikett se BasicNewsRecipe.remove_tags (sida 49). Om denna lista inte är tom, då blir <body> etikett tom och återfylld med etiketter som passar poster i denna lista. Till exempel: keep_only_tags = [dict(id=['content', 'heading'])] kommer bara ha etiketter som har ett id attribut av content eller heading. language = und Språket som nyheterna är i. Måste vara en ISO-639-kod antingen två eller tre tecken långt masthead_url = None Som standard, kommer calibre att använda en redaktionslogga (endast Kindle). Åsido detta i ditt recept för att ge en url för att användas som en redaktionslogga. match_regexps = [] Lista över reguljära uttryck som avgör vilka länkar att följa. Om den är tom, ignoreras den. Endast användas om is_link_wanted inte implementeras. Exempelvis: 48 Kapitel 1. Avsnitten

53 match_regexps = [r'page=[0-9]+'] kommer passa mot alla URLer som har page=some number i sig. Bara en av BasicNewsRecipe.match_regexps (sida 48) eller BasicNewsRecipe.filter_regexps (sida 48) skulle bara definierad. max_articles_per_feed = 100 Maximalt antal artiklar att ladda ned från varje flöde. Den är primärt användbar för flöde som inte har artikeldatum. För de flesta flödes, bör du använda BasicNewsRecipe.oldest_article (sida 49) needs_subscription = False Om Sann kommer gränssnittet att be användaren om ett användarnamn och lösenord för att använda vid nedladdning. Om inställningen är frivilligt att använda ett användarnamn och lösenord blir tillval no_stylesheets = False Bekväm flagga för att inaktivera laddning av formatmallar för webbplatser som har alltför komplexa mallar som är olämpliga för konvertering till e-böcker format. Om Sann hämtas inte mallar och bearbetas oldest_article = 7.0 Äldsta artikel att ladda ner från denna nyhetskälla. I dagarna. preprocess_regexps = [] Lista av regexp substitutionsregler att köras vid nedladdning HTML. Varje element i listan bör vara en tupel. Första elementet av tupel bör vara ett kompilerat regujärt uttryck och andra en anropsbar som tar ett passande objekt och returnerar en sträng för att ersätta träffen. Till exempel: preprocess_regexps = [ (re.compile(r'<!--article ends here-->.*</body>', re.dotall re.ignorecase), lambda match: '</body>'), ] kommer ta bort allt från <! Article ends here > till </body>. publication_type = unknown Publikationstyp Inställd på tidning, tidskrift eller blogg. Om satt till None, kommer ingen publikationstypsmetadata skrivas till opf-filen. recipe_disabled = None Ställ in på en icke tom sträng för att inaktivera detta recept. Strängen kommer att användas som inaktiverade meddelande recursions = 0 Antal nivåer av länkar att följa på en artikelwebbsida remove_attributes = [] Lista över attribut för att ta bort från alla etiketter. Exempelvis: remove_attributes = ['style', 'font'] remove_empty_feeds = False Om Sann tas tomma flöden bort från utdata. Det här alternativet har ingen effekt om parse_index överrids i underklassen. Den är avsedd endast för recept som returnerar en lista med flöden som använder feeds eller get_feeds() (sida 43). Den används också om du använder alternativet ignore_duplicate_articles. remove_javascript = True Bekväm flagga att strippa alla javascript etiketter från den nedladdade HTMLn remove_tags = [] Lista med etiketter som skall avlägsnas. Angivna etiketter tas bort från nedladdad HTML. En etiketter anges som en ordlista på formen: 1.2. Lägga till din favorit nyhetswebbplats 49

54 { name : 'tag name', #e.g. 'div' attrs : a dictionary, #e.g. {class: 'advertisment'} } Alla tangenter är valbara. För full förklaring av sökningskriteria, se Beautiful Soup 21 Ett vanligt exempel: remove_tags = [dict(name='div', attrs={'class':'advert'})] Detta tar bort alla <div class= advert > etiketter och deras barn från nerladdade HTML. remove_tags_after = None Ta bort alla etiketter som förekommer efter angiven etikett. För formatet att ange en etikett se BasicNewsRecipe.remove_tags (sida 49). Till exempel: remove_tags_after = [dict(id='content')] kommer ta bort alla etiketter efter första elementet med id= content. remove_tags_before = None Ta bort alla etiketter som förekommer före angiven etikett. För formatet att ange en etikett se BasicNewsRecipe.remove_tags (sida 49). Till exempel: remove_tags_before = dict(id='content') kommer ta bort alla etiketter före första elementet med id= content. requires_version = (0, 6, 0) Minimum version av calibre som behövs för detta recept resolve_internal_links = False Om satt till Sann så kommer länkar i nedladdade artiklar som pekar på andra nedladdade artiklar ändras till att peka på den nedladdade kopia av artikeln snarare än dess ursprungliga webbadress. Om du ställer in detta till Sann, behöver du kanske du också införa canonicalize_internal_url() (sida 42) för att arbeta med URL-schemat för just din webbplats. reverse_article_order = False Omvänd ordning av artiklar i varje flöde scale_news_images = None Maximala dimensioner (w, h) att skala bilder till. Om scale_news_images_to_device är Sann så är detta inställt på enhetens skärmmått för utskriftsprofil om det inte finns någon profil som, i vilket fall det är kvar på oavsett värde den har tilldelats (standard None). scale_news_images_to_device = True Skala om bilder för att passa enhetens skärmmått satta av utdataprofilen. Ignoreras om ingen utdataprofil är angiven. simultaneous_downloads = 5 Antal samtidiga nedladdningar. Sätt till 1 om servern är petig. Automatisk reducerat till 1 om attr:basicnewsrecipe.delay > 0 summary_length = 500 Maximal antal tecken i den korta beskrivningen template_css = u \n.article_date {\n color: gray; font-family: monospace;\n }\n\n.article_description {\n text-indent: 0 CSS som används för att utforma mallar, dvs de navigeringsfält och innehållsförteckningar. I stället för att överrida denna variabel bör du använda extra_css i receptet för att anpassa utseende och beteende Kapitel 1. Avsnitten

55 timefmt = [%a, %d %b %Y] Formatsträng för datum att visa på första sidan. Som standard: Day_Name, Day_Number Month_Name Year timeout = Tidsbegränsning för hämta filer från servern i sekunder title = u Ok\xe4nd nyhetsk\xe4lla Titel att använda för e-bok use_embedded_content = None Normalt försöker vi gissa om ett flöde har hela artiklar inbäddade i den baserat på längden av inbäddat innehåll. Om None, sedan standard används gissning. Om True då antar vi alltid flöden har inbäddat innehåll och om False kan vi alltid utgå från flödet inte har inbäddat innehåll. use_javascript_to_login = False Om du sätter detta till Sann, så använder calibre javascript för att logga in på webbplatsen. Detta behövs för vissa webbplatser som kräver användning av javascript för att logga in. Om du ställer in detta till Sann måste du implementera javascript_login() (sida 44) metoden, för att göra den faktiska inloggningen. 1.3 E-bokläsare calibre inkluderar en inbyggd e-bokläsare som kan visa de flesta e-bokformaten. Denna läsare är väldigt anpassbar oc har många avancerade funktioner. Startar läsaren (sida 51) Navigera omkring i en e-bok (sida 51) Anpassning av utseende av din läsupplevelse (sida 54) Ordlistsuppslag (sida 54) Kopiering av text och bilder (sida 54) Startar läsaren Du kan visa godtycklig bok i ditt calibre-bibliotek genom att välja boken och trycka på visa-knappen. Detta kommer öppna upp boken i e-bokläsare. Du kan också sätta igång läsare själv från start-menyn i Windows eller genom att använda kommandot ebook-viewer i Linux och OS X (du måste installera kommandoverktyget i OS X först genom Inställningar->Avancerat->Diverse) Navigera omkring i en e-bok Du kan bläddra sidor i en bok genom att använda Nästa sida och Föregående sida knappar, eller genom att trycka på Page Up/Page Down -knapparna. Till skillnad mot de flesta e-bokläsare, kräver inte calibre dig att visa böcker i sidläge. Du kan rulla andelar som är mindre än en sida genom att använda rullisten eller diverse anpassbara tangentbordssnabbval E-bokläsare 51

56 Bokmärken När du är mitt i en bok och stänger läsare, kommer den komma i håg var du slutade läsa och återvända dit nästa gång du öppnar boken. Du kan också sätt in bokmärken i boken genom att använda bokmärkes-knappen. När EPUB-formaterade böcker läses, sparas dessa bokmärken faktiskt i själva EPUB-filen. Du kan lägga till bokmärken, sedan skicka filen till en vän. När vännen sedan öppnar kommer hen se dina bokmärken. Innehållsförteckning Om boken du läser har en innehållsförteckning, kan du nå den genom att trycka på innehållsförteckningsknappen boken.. Detta kommer att ta fram en lista av sektioner i boken. Du kan klicka på valfri och hoppa till denna del av Navigering genom plats E-böcker till skillnad mot böcker, har inget sidkoncept. I stället, allt eftersom du läser genom boken, kommer du notera att din position i boken visas i övre vänstra hörnet i en ruta som denna. Detta är både din nuvarande position och den totala längden av boken. Dessa nummer är oberoende av skärmstorlek och teckenstorlek som du visar boken i, och de spelar en liknande roll till sidnummer i pappersboken. Du kan skriva in valfritt nummer du vill gå till motsvarande plats i boken. calibre har också en bekvämt referensläge. Du kan slå på detta genom att klicka på referenslägesknappen. När du gör detta, kommer calibre varje gång du för musen över en paragraf visa ett unikt nummer bestående av sektionoch paragrafnummer 52 Kapitel 1. Avsnitten

57 Du kan använda detta nummer för att entydigt hänvisa till delar av böckerna när man diskuterar det med vänner eller hänvisa till den i andra verk. Du kan skriva in dessa nummer i rutan Gå till högst upp i fönstret för att gå till en särskild hänvisning plats. Om du klickar på länkar inne i e-boken kommer du kunna ta dig till olika delar av boken, som slutnotering, kan du använda dig av framåt- och bakåtknappar i övre vänstra hörnet för att återvända var du var. Dessa knappar beter sig precis som dem i en webläsare E-bokläsare 53

58 1.3.3 Anpassning av utseende av din läsupplevelse Du kan ändra typsnittsstorlek på direkten genom att typsnittsstorleksknapparna. Du kan också få läsaren att visa helskärmsläge genom att trycka Helskärmsknappen. Genom att klicka på inställningsknappen, kan du ändra grundinställningen av typsnitt som läsaren använder samt typsnittsstorlek till de du önskar ha när läsaren startar. Mer avancerade anpassningar kan åstadkommas genom inställningar för användarformatmall. Detta är en formatmall som du kan välja att tillämpa på alla böcker. Genom att använda detta kan du göra saker som ha vit text på svart bakgrund, ändra paragrafstilar, textmarginaler, etc. TIll exempel av anpassad formatmal som används av calibre s användare, se the forums Ordlistsuppslag Du kan slå upp betydelsen av ord i aktuell bok genom att högerklicka på ett ord. calibre använder allmänt tillgängliga ordboksserver dict.org för att slå upp ord. Definitionen visas i en liten ruta längst ner på skärmen Kopiering av text och bilder Du kan välja text och bilder genom att dra innehållet med din mus och sedan högerklicka för att kopiera till klippbordet. Kopierat material kan sedan klistras in i en annan applikation som ren text och bilder. 1.4 E-bokkonvertering calibre har ett konverteringssystem som är utformat för att vara mycket lätt att använda. Normalt du bara lägger till en bok till calibre, klicka konvertera och calibre kommer att försöka intensivt för att generera utdata som är så nära som möjligt till ingången. Däremot accepterar calibre ett mycket stort antal indataformat, inte alla som är så lämpliga som andra för konvertering till e-böcker. I fråga om sådana inmatningsformat, eller om du bara vill ha större kontroll över konverteringssystemet, har calibre en hel del alternativ för att finjustera konverteringen. Observera dock att calibre omvandlingssystemet inte är en ersättning för en fullständig e-bokeditor. Om du vill redigera e-böcker, rekommenderar jag att du först konverterar dem till epub eller AZW3 med calibre och sedan använder Redigera Bok-funktionen för att få dem i perfekt form. Du kan sedan använda den redigerade e-boken som indata för omvandling till andra format i calibre. This document will refer mainly to the conversion settings as found in the conversion dialog, pictured below. All these settings are also available via command line interface to conversion, documented at ebook-convert (sida 245). In calibre, you can obtain help on any individual setting by holding your mouse over it, a tooltip will appear describing the setting Kapitel 1. Avsnitten

59 Innehåll Introduktion (sida 55) Utseende (sida 57) Sidinställning (sida 59) Heuristisk bearbetning (sida 60) Sök och ersätt (sida 61) Struktrurdetektion (sida 61) Innehållsförteckning (sida 62) Att använda bilder som kapitelrubriker när du konverterar HTML-inmatningsdokument (sida 64) Använda etikettattribut för att leverera texten för posterna i innehållsförteckningen (sida 64) Hur alternativen är inställda/sparade för Konvertering (sida 65) Formatspecifika tips (sida 65) Introduktion Det första man måste förstå om omvandlingssystemet är att det är utformat som en rörledning. Schematiskt ser det ut så här: 1.4. E-bokkonvertering 55

60 Inmatningsformatet först konverteras till XHTML med lämplig indatatillägg. Denna HTML transformeras sedan. I det sista steget, är den bearbetade XHTML omvandlad till det angivna utdataformat med lämplig utdatatillägg. Resultaten av omvandlingen kan variera kraftigt, beroende på inmatningsformatet. Vissa format konverterar mycket bättre än andra. En lista över de bästa källformaten för omvandling finns här. De omvandlingar som verkar på XHTML-utdata är där allt arbete sker. Det finns olika transformer, till exempel för att sätta in bokens metadata som en sida i början av boken, för att upptäcka kapitelrubriker och automatiskt skapa en innehållsförteckning, att proportionellt justera teckenstorlekar och så vidare. Det är viktigt att minnas att alla omvandlingar verkar på XHTML-utdatas av indatatillägget, inte på indatafilen. Så, till exempel, om du ber calibre att konvertera en RTF-fil till EPUB, kommer den först omvandlas till XHTML internt, de olika transformationer kommer appliceras på XHTML och sedan kommer utdatatillägget att skapa EPUB-filen, automatiskt generera all metadata, innehållsförteckning, och så vidare. 56 Kapitel 1. Avsnitten

61 Du kan se denna process i handling genom att använda felsökningsalternativet. Bara ange sökvägen till en katalog för felsökningsutdata. Under konverteringen kommer calibre placera XHTML genereras av de olika stegen i omvandlingen pipeline i olika underkataloger. De fyra underkataloger är: Stadie indata analyserad struktur bearbetad Beskrivning Table 1.2: Stadier av omvandlingen Det innehåller HTML-utdata från indatatillägget. Använd detta för att felsöka Input Plugin. Resultatet av förbehandling och konvertering till XHTML utsignalen från indatatillägget. Används för att felsöka strukturdetektion. Efterstrukturell detektion, men innan CSS utplattning och teckenstorlekskonvertering. Används för att felsöka teckenstorlekskonvertering och CSS-omvandlingar. Precis innan e-bok leds till utdatatillägget. Används för att felsöka utdatatillägget. Om du vill redigera indatadokumentet lite innan calibre konverterar det, är det bästa att göra redigera filerna i indata undermapp och sedan packa upp och använda zip-filen som indataformat för efterföljande omvandlingar. För att göra detta använder Edit meta information dialogrutan för att lägga zip-filen som ett format för boken och sedan, i det övre vänstra hörnet i konverteringsdialogrutan väljer ZIP som indataformat. Detta dokument kommer att främst ta itu med de olika transformer som verkar på mellan XHTML och hur man kan kontrollerar dem. I slutet är några tips som är specifika för varje indata- och utdataformat Utseende Innehåll Teckenstorleksomskalning - Typgradsjustering (sida 57) Styckesavstånd (sida 58) Extra CSS (sida 58) Diverse (sida 59) Denna grupp av alternativ styr olika aspekter av utseendet och känslan av den konverterade e-boken. Teckenstorleksomskalning - Typgradsjustering En av de trevligaste inslagen i e-läsupplevelse är möjligheten att enkelt justera teckenstorlek för att passa individuella behov och ljusförhållanden. calibre har sofistikerade algoritmer för att säkerställa att alla böcker det avger har konsistenta teckenstorlekar, oavsett vilken teckenstorlekar anges i indatadokumentet. Basstorlek för typsnitt på ett dokument är den vanligaste teckenstorlek/typgrad i detta dokument, det vill säga storleken på den största delen av texten i dokumentet. När du anger en Basteckenstorlek, skalar calibre automatiskt alla teckenstorlekar i dokumentet proportionellt, så att den vanligaste teckenstorleken blir den angivna basstorleken och andra teckenstorlekar skalas på lämpligt sätt. Genom att välja en större basstorlek, kan du göra typsnitten i dokumentet större och vice versa. När du ställer in basstorleken, för bästa resultat, bör du också ställa in teckenstorleken. Normalt kommer calibre automatiskt att välja en basstorlek lämplig för utdataprofil som du har valt (se Sidinställning (sida 59) ). Du kan dock åsidosätta detta här ifall standarden inte är lämplig för dig E-bokkonvertering 57

62 Teckenstorleksnycklar alternativet kan du styra hur icke-baserade teckenstorlekar är skalas. Typsnittetets omskalningsalgoritm fungerar med hjälp av en teckenstorleksnyckel, vilket helt enkelt är en kommaseparerad lista med teckenstorlekar. Teckenstorleksnyckel anger för calibre hur många steg större eller mindre en given teckenstorlek bör jämföras med basstorleken. Tanken är att det ska finnas ett begränsat antal teckenstorlekar i ett dokument. Till exempel, en storlek för brödtext, ett par storlekar för olika nivåer av rubriker och ett par storlekar för upphöjd / nersänkt typsnitt och fotnoter. Teckenstorleksnyckel tillåter calibre att dela upp de teckenstorlekar i inmatningsdokumenten i separata fack som motsvarar de olika logiska teckenstorlekarna. Låt oss illustrera med ett exempel. Antag källdokumentet vi konverterar producerades av någon med utmärkt syn och har en basstorlek på 8 pt. Det innebär att huvuddelen av texten i dokumentet är dimensionerad för 8pts, medan rubriker är något större (säg 10 och 12pt) och fotnoter något mindre som 6pt. Nu om vi använder följande inställningar: Base font size : 12pt Font size key : 7, 8, 10, 12, 14, 16, 18, 20 Utdatadokumentet kommer att ha en basstorlek på 12 punkter, rubrikerna 14 och 16pt och fotnoter i 8 pt. Antag nu vi vill göra att den största rubriken storleken sticker ut mer och göra fotnötter lite större också. För att uppnå detta bör det typsnittsnyckel ändras till: New font size key : 7, 9, 12, 14, 18, 20, 22 De största rubrikerna blir nu 18 pt, medan fotnötter blir 9pt. Du kan spela med dessa inställningar för att försöka lista ut vad som skulle vara optimalt för dig med hjälp av tecken omskalningsguiden som kan nås genom att klicka på den lilla knappen bredvid Teckenstorleksnyckel. Alla omskalningar av teckenstorleken i omvandlingen kan även stängas av här, om du vill bevara teckenstorlekar i inmatningsdokumentet. En relaterad inställning är Radhöjd. Radhöjd styr den vertikala höjden på rader. Som standard (ett radavstånd av 0) utförs ingen manipulation av linjehöjder. Om du anger ett icke-standardvärde, kommer linjehöjder sättas på alla platser som inte anger sina egna linjehöjder. Detta är dock något av en trubbigt vapen och bör användas sparsamt. Om du vill justera linjehöjder för vissa avsnitt av indata, är det bättre att använda Extra CSS (sida 58). Styckesavstånd Normalt ska stycker/paragrafer i XHTML återges med en tom rad mellan dem och ingen ledande textindrag. calibre har ett par alternativ för att styra detta. Ta bort blankrad mellan stycken ser med kraft till att alla stycken har någon bland paragraf/styckesavstånd. Den sätter också textindraget till 1.5em (kan ändras) för att markera början på varje punkt. Infoga tom rad gör det motsatta, som garanterar att det finns exakt en tom rad mellan varje par av stycken. Båda dessa alternativ är mycket omfattande, avlägsna avstånd, eller sätta in den för alla stycken (tekniskt <p> och <div> etiketter). Det är så att du bara kan ställa in alternativet och vara säker på att den presterar som utlovat, oavsett hur rörig indatafilen är. Det enda undantaget är när indatafilen använder hårda radbrytningar att genomföra interstyckeavstånd. Om du vill ta bort avståndet mellan alla stycken, förutom några få utvalda, använd inte dessa alternativ. I stället lägger du till följande CSS-kod till Extra CSS (sida 58): p, div { margin: 0pt; border: 0pt; text-indent: 1.5em }.spacious { margin-bottom: 1em; text-indent: 0pt; } Då, i ditt källdokument, markera de punkter som behöver avståndet med class= spacious. Om indatadokumentet inte är i HTML, använd felsökningsalternativet, beskrivet i inledningen till att få HTML (använd input underkatalog). Extra CSS Det här alternativet kan du ange godtyckliga CSS som kommer att tillämpas på alla HTML-filer i inmatningen. Denna CSS appliceras med mycket hög prioritet och bör åsidosätta de flesta CSS närvarande i själva inmatningsdokumentet. 58 Kapitel 1. Avsnitten

63 Du kan använda denna inställning för att finjustera presentation / layout av dokumentet. Till exempel, om du vill att alla stycken i klassen endnote att vara högerställda, lägg bara till:.endnote { text-align: right } eller om du vill ändra indraget på alla stycken: p { text-indent: 5mm; } Extra CSS är ett mycket kraftfullt alternativ, men du behöver en förståelse för hur CSS fungerar för att använda den till sin fulla potential. Du kan använda alternativet felsök rörledningsalternativet som beskrivs ovan för att se vad CSS finns i ditt indatadokument. Diverse Det finns några fler alternativ i det här avsnittet. No text justification Normalt, om utdataformatet stöder det, kommer calibre tvinga e-boksutdata att ha justerad text (dvs en jämn högermarginal). Detta alternativ kommer att stänga av detta beteende, i vilket fall oavsett kommer justering som anges i indatadokument användas istället. Linearize tables Några dåligt utformade dokument använder tabeller för att styra layouten på texten på sidan. Vid konvertering har dessa dokument ofta text som rinner ut från sidan och andra artefakter. Detta alternativ kommer att extrahera innehållet från tabellerna och presentera den på ett linjärt sätt. Observera att detta alternativ linjärisera alla bord, så att använd bara den om du är säker ingångsdokumentet använder inte tabeller för verkliga ändamål, som att presentera tabellinformation. Transliterate unicode characters Transkribera Unicode-tecken till en ASCII-representation. Använd med försiktighet eftersom detta kommer att ersätta Unicode-tecken med ASCII. Till exempel kommer det att ersätta Михаил Горбачёв med Mikhail Gorbachiov. Observera också att i de fall där det finns flera representationer av ett tecken (tecken som delas av kinesiska och japanska till exempel) representation som används av det största antal människor kommer att användas (kinesiska i föregående exempel). Det här alternativet är främst användbart om du ska visa e-bok på en enhet som inte har stöd för unicode. Input character encoding Äldre dokument anger ibland inte sin teckenkodning. Vi omkodning kan detta resultera i icke-engelska tecken eller specialtecken som smarta citat skadas. calibre försöker att automatiskt detektera teckenkodning av källdokumentet, men det är inte alltid lyckas. Du kan tvinga den att anta en viss teckenkodning med den här inställningen. cp1252 är en gemensam kodning för dokument för Windows-programvara. Du bör också läsa :ref: char-kodning-faq för mer information om kodningsfrågor Sidinställning Alternativen för utskriftsformat är till för att styra skärmlayout, som marginaler och skärmstorlekar. Det finns alternativ till sidmarginalsinställningar, som kommer att användas av utdatatillägget, om det valda utmatningsformatet stödjer sidmarginaler. Dessutom bör du välja en inmatningsprofil och en utskriftsprofil. Båda uppsättningarna av profiler i princip behandlar hur man ska tolka mått i dokumentets indata/utdata, skärmstorlekar och standardtypsnitts omskalningsnycklar. Om du vet att filen du konverterar var avsett att användas på en viss enhet / mjukvaruplattform, välj motsvarande inmatningsprofil, annars bara välja standardinmatningsprofil. Om du vet att filerna som du producerar är avsedda för en viss typ enhet, välj motsvarande resultatprofil. Särskilt för MOBI-utdatafiler, bör du välja Kindle, för Microsoft Reader LIT och EPUB Sony Reader. I fallet med EPUB kommer Sony Reader profil resultera i EPUB-filer som kommer att fungera överallt. Det har dock vissa biverkningar, som att sätta in konstgjorda avsnittsbrytningar för att hålla interna komponenter under tröskelstorlek, behövs för Sony-enheter. Särskilt för iphone / Android-telefoner, välj Sony-utskriftsprofil. Om du vet att dina EPUB-filer kommer inte att läsas på en Sony eller liknande enhet, använda 1.4. E-bokkonvertering 59

64 standardutskriftsprofil. Om du vill skriva MOBI-filer som inte är avsedda för Kindle, välj utskriftsprofil Mobipocket books. Resultatprofilen styr även skärmstorleken. Detta kommer att orsaka, till exempel bilder som automatiskt storleksändras vara tjänliga till skärmen i vissa utdataformat. Så välj en profil av en enhet som har en skärmstorlek som liknar din enhet Heuristisk bearbetning Heuristisk bearbetning erbjuder en mängd olika funktioner som kan användas för att försöka upptäcka och åtgärda vanliga problem i dåligt formaterade indatadokument. Använd dessa funktioner om ditt indatadokument lider av dålig formatering. Eftersom dessa funktioner är beroende av gemensamma mönster, var medveten om att ett alternativ i vissa fall kan leda till sämre resultat, så använd med försiktighet. Som ett exempel, kommer flera av dessa alternativ ta bort alla icke-mellanslagsbrytande entiteter, eller kan innefatta Falskt positiva resultat avseende funktionen. Enable heuristic processing Det här alternativet aktiverar calibre heuristisk bearbetnings steg av omvandlingen. Detta måste vara aktiverat för olika delfunktioner som skall tillämpas Unwrap lines Aktivering av detta alternativ kommer att orsaka att calibre försöker upptäcka och korrigera hårda radbrytningar som finns inom ett dokument med ledtrådar som skiljetecken och linjelängd. calibre kommer först att försöka att upptäcka om hårda radbrytningar finns, om de inte tycks existera calibre kommer inte att försöka ta bort radbrytningar. Radbrytningsfaktor kan minskas om man vill tvinga calibre att veckla ut rader. Line-unwrap factor Det här alternativet styr algoritmen calibre använder för att ta bort hårda radbrytningar. Till exempel, om värdet av detta alternativ är 0,4, innebär att calibre kommer att ta bort hårda radbrytningar från slutet av linjer vars längd är mindre än längden på 40% av alla rader i dokumentet. Om dokumentet har bara några radbrytningar som behöver korrigering, då detta värde bör minskas till någonstans mellan 0,1 och 0,2. Detect and markup unformatted chapter headings and sub headings Om dokumentet inte har kapitelrubriker och titlar formaterade annorlunda från resten av texten, kan calibre använda det här alternativet för att försöka detektions dem och omge dem med rubriketiketter. <H2> etiketter används för kapitelrubriker; <H3> etiketter används för några titlar som upptäcks. Den här funktionen kommer inte att skapa en innehållsförteckning, men i många fall kommer det att orsaka calibre inställningar standard kapitlet upptäckt att korrekt upptäcka kapitel och bygga en innehållsförteckning. Justera XPath enligt Structure Detection om TOC inte skapas automatiskt. Om det inte finns några andra rubriker som används i dokumentet sedan inställningen // h: h2 under Structure Detection skulle vara det enklaste sättet att skapa en innehållsförteckning för dokumentet. De insatta rubriker är inte formaterad, för att tillämpa formatering använd Extra CSS alternativet under konverteringsinställningar för utseende och beteende. Till exempel, för att centrera rubriketiketter, använd följande: h2, h3 { text-align: center } Renumber sequences of <h1> or <h2> tags Vissa förlag formaterar kapitelrubriker som använder flera <h1> eller <h2> etiketter sekventiellt. calibres standardkonverteringsinställningar kommer orsaka att sådana titlar delas upp i två delar. Detta alternativ kommer att numrera rubrikensetiketter för att undvika delning. Delete blank lines between paragraphs Detta alternativ kommer att få calibre att analysera tomma rader som ingår i dokumentet. Om varje stycke interfolierade med en tom rad, då kommer calibre att ta bort alla dessa tomma stycken. Sekvenser av flera tomma rader kommer att betraktas som scenbrott och behållas som ett enda stycke. Detta alternativ skiljer sig från Ta bort styckesavstånd alternativ under Utseende och känsla i att det faktiskt ändrar HTML-innehåll, medan det andra alternativet ändrar dokumentmallar. Detta alternativ kan också ta bort stycken som infogats med hjälp av calibres Infoga tom rad alternativ. Ensure scene breaks are consistently formatted Med detta alternativ kommer calibre att försöka upptäcka vanliga scen-brytmarkörer och se till att de är centrerad. Mjuka scen brytmarkörer, dvs scenraster endast definieras av extra tomrum, är utformade för att säkerställa att de inte kommer att visas i samband med sidbrytningar. 60 Kapitel 1. Avsnitten

65 Replace scene breaks Om det här alternativet konfigureras sedan ersätter calibre scenbrytmarkörer som hittas med den nya texten som anges av användaren. Observera att vissa prydnadstecken kanske inte stöds i alla läser enheter. Generellt bör man undvika att använda html-etiketter, calibre kommer bortse från några etiketter och använda fördefinierade uppmärkning. <hr /> etiketter, det vill säga övergripande regler och <img> -etiketter undantages. Horisontella regler kan eventuellt fås med stilar, om du väljer att lägga till din egen stil se till att inkludera bredd -inställning, annars informations stilen kommer att slängas. Bildetiketter kan användas, men calibre ger inte möjlighet att lägga till bilden under konverteringen, måste detta ske i efterhand med hjälp av Redigera Book -funktionen. Exempel bildetiketter (placera bilden i en Bilder -mapp inne i epub efter konvertering): <img style= width:10% src=../images/scenebreak.png /> Exempel horisontell linje med stilar: <hr style= width:20%;padding-top: 1px;border-top: 2px ridge black;border-bottom: 2px groove black; /> Remove unnecessary hyphens calibre kommer att analysera alla bindestrecksinnehåll i dokumentet när det här alternativet är aktiverat. Dokumentet i sig används som ett lexikon för analys. Detta gör calibre att noggrant ta bort bindestreck för något ord i dokumentet på något språk, tillsammans med påhittade och obskyra vetenskapliga ord. Den primära nackdelen är ord som förekommer endast en gång i dokumentet ändras inte. Analys sker i två omgångar, det första passet analyserar radslut. Linjer är bara oförpackade om ordet finns med eller utan bindestreck i dokumentet. Det andra passet analyserar alla ord med bindestreck i hela dokumentet, bindestreck tas bort om ordet förekommer på andra ställen i dokumentet utan träff. Italicize common words and patterns När funktionen är aktiverad kommer calibre söka efter vanliga ord och mönster som betecknar kursiv och kursivera dem. Exempel är vanliga textkonventioner såsom ~ ordet ~ eller fraser som generellt bör vara kursiv, t.ex. latin fraser som etc. eller et cetera. Replace entity indents with CSS indents Vissa dokument använder en konvention att definiera textindrag med att använd hårda blanka enheter. När det här alternativet är aktiverat calibre kommer att försöka upptäcka denna typ av formatering och konvertera dem till en 3% textindrag hjälp av css Sök och ersätt De här alternativen är användbart främst för konvertering av PDF-dokument eller OCR omvandlingar, även om de också kan användas för att åtgärda många dokument-specifika problem. Som ett exempel kan lämna bladen bakom sidhuvud och sidfot i texten några konverteringar. Dessa alternativ använder vanliga uttryck för att försöka upptäcka sidhuvuden, sidfötter eller annan godtycklig text och ta bort eller byta ut dem. Kom ihåg att de är verksamma på mellan XHTML producerad av konverteringsrörledning. Det finns en guide som hjälper dig att anpassa de reguljära uttryck för dokumentet. Klicka på trollstaven bredvid uttrycksrutan och klicka på Test knappen efter att komponerat ditt sökuttryck. Framgångsrika träffar kommer att markeras i gult. Sökningen fungerar med hjälp av ett python-reguljärt uttryck. Allt passande texten tas helt enkelt bort från dokumentet eller byts ut med hjälp av ersättningsmönstret. Ersättningsmönster är valfritt, om det lämnas tomt kommer text som passar sökbegreppet kommer att tas bort från dokumentet. Du kan läsa mer om reguljära uttryck och deras syntax på: ref: regexptutorial Struktrurdetektion Strukturdetektion innebär att calibre försöker sitt bästa för att upptäcka strukturella element i indatadokumentet, när de inte är korrekt angivet. Till exempel, kapitel, sidbrytningar, rubriker, sidfot, etc. Som ni kan föreställa er, varierar denna process mycket från bok till bok. Lyckligtvis har calibre mycket kraftfulla alternativ för att styra detta. Med makt kommer komplexitet, men om när du tar dig tid att lära sig komplexiteten, upptäcker du att det väl värt ansträngningen E-bokkonvertering 61

66 Kapitel och sidbrytningar calibre har två uppsättningar av alternativ för kapiteldetektion och infoga sidbrytningar. Detta kan ibland vara lite förvirrande, som standard, kommer calibre infoga sidbrytningar innan upptäckta kapitel samt de platser som upptäckts av alternativet sidbrytningar. Anledningen till detta är att det ofta finns platser där sidbrytningar bör införas som inte är kapitelgränser. Dessutom upptäckta kapitlen kan eventuellt införas i automatiskt genererade innehållsförteckningen. calibre använder XPath, ett kraftfullt språk för att göra det möjligt för användaren att specificera kapitelgränser / sidbrytningar. XPath kan verka lite skrämmande att använda i början, lyckligtvis finns det en Introduktion (sida 55) i användarhandboken. Kom ihåg att Strukturdetektion fungerar på tillfällig XHTML producerad av konverteringsrörledningen. Använd felsökningsalternativet beskrivs i Introduktion (sida 55) att räkna ut lämpliga inställningar för din bok. Det finns också en knapp för en XPath-guide för att hjälpa till med generering av enkla XPath-uttryck. Som standard använder calibre följande uttrycker för kapiteldetektion: //*[((name()='h1' or name()='h2') and re:test(., 'chapter book section part\s+', 'i')) = 'c Detta uttryck är ganska komplicerat, eftersom det försöker hantera ett antal gemensamma fall samtidigt. Vad det betyder är att calibre antar att kapitel börjar på antingen <h1> eller <h2> etiketter som har något av orden (chapter, book, section eller part) i dem eller som har class = chapter attribut. Ett relaterat alternativ är Kapitelmärkning, vilket gör att du kan styra vad calibre gör när den upptäcker ett kapitel. Som standard kommer den att infoga en sidbrytning före kapitlet. Du kan ha det infoga en styrd linje i stället för, eller som komplement till sidbrytning. Du kan också få den göra ingenting. Standardinställningen för detektering av sidbrytningar är: //*[name()='h1' or name()='h2'] vilket innebär att calibre kommer att infoga sidbrytningar före varje <h1> och <h2> etikett som standard. Observera: Standarduttryck kan ändras beroende på inmatningsformat du konverterar. Diverse Det finns några fler alternativ i det här avsnittet. Insert metadata as page at start of book En av de bästa sakerna med calibre är att det tillåter dig att behålla mycket komplett metadata om alla dina böcker, till exempel, ett betyg, etiketter, kommentarer, etc. Detta alternativ kommer att skapa en enda sida med all denna metadata och sätta in den i den konverterade e-boken, typiskt just efter omslaget. Se det som ett sätt att skapa egna bokskyddsomslag. Remove first image Ibland innehåller källdokumentet du konverterar omslaget som en del av boken, i stället för som ett separat omslag. Om du också ange ett omslag i calibre, den då konverterade boken kommer att ha två omslag. Detta alternativ kommer att helt enkelt ta bort den första bilden från källdokumentet, vilket säkerställer att den konverterade boken har bara ett omslag, det som anges i calibre Innehållsförteckning När indatadokumentet har en innehållsförteckning i sitt metadata, kommer calibre bara använda det. Men ett antal äldre format stöder antingen inte metadata baserade innehållsförteckning, eller enskilda dokument har inte en. I dessa fall kan alternativen i det här avsnittet automatiskt hjälp dig generera en innehållsförteckning i den konverterade e-bok, baserat på det faktiska innehållet i inmatningsdokumentet. 62 Kapitel 1. Avsnitten

67 Observera: Det kan vara lite utmanande att få exakt rätt med hjälp av dessa alternativ. Om du föredrar att skapa / redigera innehållsförteckningen för hand, konvertera till EPUB eller AZW3 format och markera kryssrutan längst ner i innehållsförteckningen i dialogrutan omvandlingen som säger Manuellt finjustera innehållsförteckning efter konverteringen är klar. Detta startar Redigeraren för innehållsförteckningen efter konverteringen. Det låter dig skapa poster i innehållsförteckningen genom att klicka på platsen i boken där du vill att posten ska peka till. Du kan också använda innehållsförteckningen Editor av sig själv, utan att göra en konvertering. Gå till Inställningar->Verktyg och lägga redigeraren för innehållsförteckningen till huvudverktygsraden. Sedan är det bara att välja den bok du vill redigera och klicka på innehållsförteckningredigeringsknappen. Det första alternativet är Använd alltid den automatiskt skapade innehållsförteckningen. Genom att markera det här alternativet kan du låta calibre åsidosätta innehållsförteckning som finns i metadata för indatadokumentet med automatiskt genererade en. Det normala sättet att skapandet av autogenererade innehållsförteckningen fungerar är att, calibre först kommer att försöka lägga alla upptäckta kapitel till den genererade innehållsförteckningen. Du kan lära dig hur du anpassar upptäckt av kapitel i Struktrurdetektion (sida 61) ovan. Om du inte vill ha med ett detekterade kapitel i den genererade innehållsförteckningen, se Lägg inte till upptäcka kapitel i innehållsförteckningen-alternativet. Om mindre än Kapiteltröskel antal kapitel hittades kommer calibre lägga till alla hyperlänkar som hittas i indatadokumentet till innehållsförteckningen. Detta fungerar ofta väl, många indatadokument innehåller en hyperlänkad innehållsförteckning precis i början. Antal länkar alternativet kan användas för att styra detta beteende. Om värdet är noll, kommer inga länkar läggas till. Om satt till ett tal större än noll, kommer på sin höjd att antalet länkar läggs till. calibre kommer automatiskt att filtrera dubbletter från den genererade innehållsförteckningen. Men om det finns några ytterligare oönskade poster kan du filtrera dem genom att använda Innehållsförteckningsfilter-alternativet. Detta är ett reguljärt uttryck som söker titeln på poster i den genererade innehållsförteckningen. När en träff hittas, kommer den att tas bort. Till exempel, för att ta bort alla titlar Nästa eller Föregående användning: Next Previous Med Nivå 1,2,3 innehållsförteckning-alternativet kan du skapa en sofistikerad flera nivåer Innehållsförteckning. De är XPath-uttryck som passsar etiketter i medan XHTML produceras av konverteringsrörledningen. Se Introduktion (sida 55) för hur du får tillgång till denna XHTML. Läs också XPath Handledning (sida 131), att lära sig att konstruera XPath-uttryck. Bredvid varje alternativ finns en knapp som startar en guide för att hjälpa till med att skapa grundläggande XPath-uttryck. Följande enkla exempel visar hur man använder de här alternativen. Anta att du har en indatadokument som resulterar i XHTML som ser ut så här: <html xmlns=" <head> <title>sample document</title> </head> <body> <h1>chapter 1</h1>... <h2>section 1.1</h2>... <h2>section 1.2</h2>... <h1>chapter 2</h1>... <h2>section 2.1</h2>... </body> </html> Sedan sätter vi alternativ som: 1.4. E-bokkonvertering 63

68 Level 1 TOC : //h:h1 Level 2 TOC : //h:h2 Detta kommer att resultera i ett automatiskt genererat tvånivåers Innehållsförteckning som ser ut som: Chapter 1 Section 1.1 Section 1.2 Chapter 2 Section 2.1 Varning: Inte alla utdataformat stödjer en innehållsförteckning med multinivåer. Du bör först försöka med EPUButdata. Om det fungerar, sedan prova ditt var av format Att använda bilder som kapitelrubriker när du konverterar HTMLinmatningsdokument Anta att du vill använda en bild som din kapitelrubrik, men ändå vill kunna att calibre automatiskt generera en innehållsförteckning för dig från kapiteltitlar. Använd följande HTML-kod för att uppnå detta <html> <body> <h2>chapter 1</h2> <p>chapter 1 text...</p> <h2 title="chapter 2"><img src="chapter2.jpg" /></h2> <p>chapter 2 text...</p> </body> </html> Ställ in Nivå 1 innehållsförteckning inställning till //h:h2. Då, för kapitel två, kommer calibre ta titeln från värdet av titel-attribut på <h2> etikett, eftersom etiketten inte har någon text Använda etikettattribut för att leverera texten för posterna i innehållsförteckningen Om du har speciellt långa kapitelrubriker och vill förkortade versioner i innehållsförteckningen, kan du använda attributet titel för att uppnå detta, till exempel: <html> <body> <h2 title="chapter 1">Chapter 1: Some very long title</h2> <p>chapter 1 text...</p> <h2 title="chapter 2">Chapter 2: Some other very long title</h2> <p>chapter 2 text...</p> </body> </html> Ställ in Nivå 1 TOC inställning till //h:h2/@titel. Då tar calibre titeln från värdet på titel attribut på <h2> etiketter, istället för att använda texten i etiketten. Observera den avslutande /@titel på XPath-uttryck kan du använda det här formuläret för att berätta calibre för att få text från alla attribut du vill. 64 Kapitel 1. Avsnitten

69 Hur alternativen är inställda/sparade för Konvertering Det finns två platser där konverteringsalternativ kan ställas in i calibre. Den första är i Inställningar->Konvertering. Dessa inställningar är standardinställningar för konverteringsalternativen. När du försöker konvertera en ny bok kommer inställningarna som finns här användas som standard. Du kan också ändra inställningarna i dialogrutan konvertering för varje bokkonvertering. När du konverterar en bok, minns calibre de inställningar du använt för den boken, så att om du konverterar det igen, kommer de sparade inställningarna för den enskilde boken har företräde framför standardinställningarna som anges i Inställningar. Du kan återställa enskilda inställningar till standard genom att använda Återställ till standardvärden knapp i individuell bokkonverteringsdialog. Du kan ta bort sparade inställningar för en grupp av böcker genom att välja alla böcker och sedan klicka på redigera metadata-knappen för att bulk metadata redigeringsdialogen, nära botten av dialogen är ett alternativ att ta bort lagrade konverteringsinställningar. När du masskonvertera en uppsättning böcker, tas inställningarna i följande ordning (sista vinner): Från standardvärdena som i Inställningar->Konvertering Från de sparade konverteringsinställningarna för varje bok som konverteras (om någon). Detta kan stängas av alternativ i det övre vänstra hörnet av dialogrutan masskonvertering. Från inställningarna i masskonverteringsdialogen Observera att de slutliga inställningar för varje bok i en masskonvertering kommer att sparas och återanvändas om boken omvandlas igen. Eftersom högsta prioritet av masskonvertering ges till inställningarna av dialogrutan masskonvertering kommer dessa åsidosätta bokens specifika inställningar. Så du ska bara masskonvertera böcker tillsammans som behöver liknande inställningar. Undantaget är metadata och specifika inställningar för indataformat. Eftersom masskonveringsdialogrutan inte har inställningar för dessa två kategorier, kommer de att tas från boken specifika inställningar (om någon) eller standardvärdena. Observera: Du kan se de verkliga inställningar som används under någon konvertering genom att klicka på roterande ikon i det nedre högra hörnet och sedan dubbelklicka på individuella konverteringsjobbet. Då visas en konverteringslogg som ska innehålla de verkliga inställningar som används, nära toppen Formatspecifika tips Här hittar du tips som är specifika för konvertering av vissa format. Alternativ specifika för visst format, oavsett indata eller utdata finns i dialogrutan konvertering under eget avsnitt, till exempel TXT indata eller EPUB utdata. Konvertera Microsoft Word dokument calibre kan automatiskt konvertera.docx filer som skapats av Microsoft Word 2007 och nyare. Lägg bara till den fil till calibre och klicka konvertera (se till att du kör den senaste versionen av calibre eftersom stöd för.docx filer är mycket nytt). Observera: Det finns en demo docx-fil < _ som visar funktionerna i calibre-konvertering. Bara ladda ner den och omvandla den till EPUB eller AZW3 att se vad calibre kan göra. calibre kommer att automatiskt generera en innehållsförteckning som baseras på rubrikerna om du markerar dina rubriker med Rubrik 1, rubrik 2 etc. stilar i Word. Öppna utdata e-bok i calibre läsare och klicka på innehållsförteckningen för att visa den genererade innehållsförteckningen E-bokkonvertering 65

70 Äldre.doc filer För äldre doc-filer, kan du spara dokumentet som HTML med Microsoft Word och sedan konvertera den resulterande HTML-filen med calibre. När du sparar som HTML, se till att använda Spara som webbsida, filtrerad alternativet eftersom detta kommer att producera ren HTML som kommer att konverteras bra. Observera att Word producerar en riktigt rörig HTML, omvandla det kan ta lång tid, så ha tålamod. Om du har en nyare version av Word tillgänglig kan du också direkt spara den som docx. Ett annat alternativ är att använda fria Openoffice som är gratis. Öppna din doc-fil i Openoffice och spara den i Openoffice-formatet.odt. calibre kan direkt konvertera.odt filer. Konvertera TXT-dokument TXT-dokument har något väldefinierat sätt att ange formatering som fet, kursiv, etc, eller dokumentstruktur som stycken, rubriker, sektioner och så vidare, men det finns en mängd olika konventioner som vanligen används. Som standard försöker calibre automatisk detektering av korrekt formatering och uppmärkning utifrån dessa konventioner. TXT-indata stöder ett antal alternativ för att differentiera hur stycken upptäcks. Paragraph Style: Auto Analyserar textfilen och försök att automatiskt avgöra hur styckena är definierade. Detta val kommer i allmänhet fungerar bra, om du uppnår oönskade resultat prova ett av de manuella alternativen. Paragraph Style: Block Förutsätter en eller flera tomma rader är en styckesgräns: This is the first. This is the second paragraph. Paragraph Style: Single Förutsätter varje rad är ett stycke: This is the first. This is the second. This is the third. Paragraph Style: Print Förutsätter att varje stycke börjar med en indragning (antingen en tabulering eller 2+ mellanslag). Styckena avslutas när nästa rad som börjar med en indragning nås: This is the first. This is the second. This is the third. Paragraph Style: Unformatted Förutsätter att dokumentet inte har någon formatering, men använder hårda radbrytningar. Skiljetecken och medianradslängd används för att försöka återskapa stycken. Formatting Style: Auto Försök att känna av vilken formatering uppmärkning som används. Om ingen markup används då kommer heuristisk formatering att tillämpas. Formatting Style: Heuristic Analyserar dokumentet för gemensamma kapitelrubriker, scenbrott och kursiverade ord och tillämpar lämpliga HTML-kod under konverteringen. Formatting Style: Markdown calibre stöder också kör TXT-indata genom en tranformationspreprocessor som kallas markdown. Markdown möjliggör grundläggande formatering som ska 66 Kapitel 1. Avsnitten

71 läggas till TXT-dokument, till exempel fet, kursiv, avsnittsrubriker, tabeller, listor, en innehållsförteckning, etc. Markeringskapitelrubriker med en ledande # och sätta XPathkapiteldetekteringsuttryck för //h:h1 är det enklaste sättet att få en korrekt innehållsförteckning att genereras från ett TXT-dokument. Du kan läsa mer om markdown syntax i daringfireball < _. Formatting Style: None Använder ingen speciell formatering av texten, dokumentet konverteras till HTML utan några ändringar. Konvertera PDF-dokument PDF-dokument är en av de värsta format för att konvertera från. De är en fast sidstorlek och textplaceringsformat. Mening, är det mycket svårt att avgöra var en stycke slutar och en annat börjar. calibre kommer att försöka packa stycken med en konfigurerbar, Radbrytningsfaktor. Detta är en skala som används för att bestämma längden, vid vilken en rad bör radbruten. Giltiga värden är ett decimaltal mellan 0 och 1. Standardinställningen är 0,45, strax under medianradslängden. Sänk detta värde att inkludera mer text i uppackning. Öka till att omfatta mindre. Du kan justera detta värde i konverteringsinställningarna under PDF-indata. De har också ofta sidhuvud och sidfot som en del av dokumentet som kommer att bli inkluderat med texten. Använd Sök och ersätt panel för att ta bort sidhuvud och sidfot för att lindra problemet. Om sidhuvuden och sidfötter inte tas bort från texten kan den ge upp uppackning. Om du vill veta hur du använder sidhuvud och sidfot borttagningsalternativ, läs Allt om att använda reguljära uttryck i calibre (sida 162). Vissa begränsningar i PDF-indata är: Komplex, flera kolumner, och bildbaserade dokument stöds inte. Extraction of vector images and tables from within the document is also not supported. Vissa PDF-filer använder speciella glyfer för att representera ll eller ff eller fi, etc. Konvertering av dessa kanske eller kanske inte fungerar beroende på hur de representeras internt i PDF. Länkar och innehållsförteckningar stöds inte PDF-filer med inbäddade icke-unicode-typsnitt för att representera icke-engelska tecken kommer att resultera i förvrängt utdata för dessa tecken Vissa PDF-filer är uppbyggda av fotografier av sidan med OCRed text bakom dem. I sådana fall använder calibre OCR-text, vilket kan vara mycket annorlunda från vad du ser när du visar PDF-filen PDF-filer som används för att visa komplexa texter, liksom höger till vänster språk och matematiksättning kommer inte konverteras korrekt För att återupprepa PDF är en riktigt, riktigt dåligt format att användas som indata. Om du absolut måste använda PDF, sedan förberedas för ett utdata som varierar allt från anständigt att oanvändbara, beroende på indata PDF. Serieboksamlingar En serietidningssamling är en.cbc fil. En.cbc fil är en zip-fil som innehåller andra CBZ/CBR-filer. Dessutom.cbc filen måste innehålla en enkel textfil som heter comics.txt, kodade i UTF-8. Den comics.txt-filen måste innehålla en förteckning över de serier filerna inuti.cbc filen i form filnamnet: titel, enligt nedan: one.cbz:chapter One two.cbz:chapter Two three.cbz:chapter Three.cbc-filen kommer då innehålla: 1.4. E-bokkonvertering 67

72 comics.txt one.cbz two.cbz three.cbz calibre kommer automatiskt omvandla denna.cbc fil till en e-bok med en innehållsförteckning som pekar på varje post i comics.txt. EPUB avancerad formateringsdemo Olika avancerad formatering för EPUB-filer demonstreras i det här demofil < _. Filen skapades från handkodat HTML med calibre och är tänkt att användas som en mall för dina egna EPUB skapande insatser. Källan HTML som det skapades från är tillgänglig demo.zip < _. De inställningar som används för att skapa EPUB från ZIP-filen är: ebook-convert demo.zip.epub -vv --authors "Kovid Goyal" --language en --level1-toc '//*[@class="titl Observera att eftersom den här filen utforskar potentialen i EPUB, kommer inte de flesta av de avancerade formatering att fungera på läsarna mindre kapabla än calibres inbyggda EPUB-visare. Konvertera ODT-dokument calibre kan direkt konvertera ODT (Opendocument Text) filer. Du bör använda stilar för att formatera ditt dokument och minimera användningen av direkt formatering. När bilder infogas i ditt dokument måste du förankra dem till stycke, förankrade bilder till en sida kommer alla hamna på framsidan av konverteringen. Om du vill aktivera automatisk detektering av kapitlen, måste du markera dem med inbyggd stilar som kallas Rubrik 1, Rubrik 2,..., Rubrik 6 ( Rubrik 1 motsvarar HTML-etiketten <h1>, Rubrik 2 till <h2> etc). När du konverterar i calibre kan du ange vilken stil du använde i Identifiera kapitel på rutan. Exempel: Om du markerar kapitel med stil Rubrik 2, måste du ställa in Detektera kapitel på rutan till //h:h2 För en kapslad innehållsförteckning med avsnitten märkta med Rubrik 2 och de kapitel som är markerade med Rubrik 3 du måste ange //h:h2 //h:h3. På Konvertera - innehållsförteckningssidan satt den nivå 1 innehållsförteckning rutan till //h:h2 och nivå 2 innehållsförteckning rutan till //h:h3. Välkända dokumentegenskaper (titel, sökord, Beskrivning, Skapare) känns igen och calibre kommer att använda den första bilden (inte för liten, och med god aspektförhållande) som omslagsbild. Det finns också ett avancerat egenskapskonverteringsläge, som aktiveras genom att ställa den anpassade egenskapen opf.metadata ( Ja eller Nej typ) till Ja i ODT-dokument (Fil> Egenskaper-> Anpassade egenskaper). Om egenskapen detekteras av calibre är följande anpassade egenskaper igenkända (opf.authors åsidosättningar dokumentets skapare): opf.titlesort opf.authors opf.authorsort opf.publisher opf.pubdate opf.isbn opf.language opf.series opf.seriesindex Utöver detta kan du ange vilken bild som ska användas som omslag genom att namnge den opf.cover (högerklicka, Bild-> Alternativ-> Namn) i ODT. Om ingen bild med detta namn hittas, används den smarta metoden. Eftersom 68 Kapitel 1. Avsnitten

73 omslagsupptäckt kan leda till dubbla omslag i vissa utdataformat, kommer processen att ta bort stycken (endast om det enda innehållet är omslaget!) från dokumentet. Men detta fungerar bara med namngiven bild! För att inaktivera omslagsupptäckt kan du ställa in den anpassade egenskapen opf.nocover ( Ja eller Nej typ) till Ja i avancerat läge. Konvertera till PDF Den första, viktigaste, inställning för att bestämma när du konverterar till PDF är sidstorleken. Som standard använder calibre en sidstorlek som definieras av det aktuella utdataprofil. Så om din utskriftsprofil är inställd på Kindle, kommer calibre skapa en PDF med sidstorlek lämplig för visning på den lilla Kindle skärmen. Men om du visar den här PDFfilen på en datorskärm, så kommer det att synas att ha för stora tecken. För att skapa normal storlek på PDF-filer, använd Åsidosätt sidstorlek alternativ under PDF-utdata i dialogrutan omvandlingen Sidhuvud och sidfötter Du kan infoga godtyckliga sidhuvud och sidfot på varje sida i PDF genom att ange sidhuvud och sidfot mallar. Mallar är bara fragmentsnuttar av HTML-kod som blir utförda i sidhuvud och sidfot platser. Till exempel, för att visa sidnummer centrerat längst ner på varje sida, i grönt, använd följande sidfotsmall <p style="text-align:center; color:green">page _PAGENUM_</p> calibre ersätter automatiskt _PAGENUM_ med det aktuella sidnumret. Du kan även sätta olika innehåll på jämna och udda sidor, till exempel följande rubrikmall visar titeln på udda sidor och författaren på jämna sidor: <p style="text-align:right"><span class="even_page">_author_</span><span class="odd_page"><i>_title_< calibre ersätter automatiskt _TITLE_ och _AUTHOR_ med titel och författare av dokumentet som konverteras. Du kan även visa text på vänster och höger sida och ändra teckenstorlek, vilket visas med den här rubrikmallen: <div style="font-size:x-small"><p style="float:left">_title_</p><p style="float:right;"><i>_author_</ Detta kommer att visa titeln till vänster och författare till höger, i en teckenstorlek som är mindre än huvudtexten. Du kan också använda det aktuella avsnittet i mallar, enligt nedan: <p style="text-align:right">_section_</p> _SECTION_ ersätts med vad namnet på det aktuella avsnittet är. Dessa namn är taget från metadatats innehållsförteckningen i dokumentet (PDF Outline). Om dokumentet inte har någon innehållsförteckning kommer det att ersättas av tom text. Om en PDF-sida har flera sektioner, kommer det första avsnittet på sidan användas. Du kan även använda javascript inne i sidhuvud och sidfot mallar, till exempel, kommer följande mall resultera i att sidnummer börjar vid 4 istället för på 1: <p id="pagenum" style="text-align:center;"></p><script>document.getelementbyid("pagenum").innerhtml = Observera: När du lägger till sidhuvud och sidfot se till att du ställa in sidan övre och nedre marginal till tillräckligt stora värden, under avsnittet Utskriftsformat i konverteringsdialogrutan. Utskrivbar/tryckbar innehållsförteckning Du kan också infoga en utskrift/tryckbar innehållsförteckning i slutet av PDF som listar sidnummer för varje avsnitt. Detta är mycket användbart om du tänker skriva ut PDF till papper. Om du vill använda PDF på en elektronisk produkt, 1.4. E-bokkonvertering 69

74 PDF Outline ger då denna funktionalitet och som genereras som standard. Du kan anpassa utseendet på den genererade Innehållsförteckning med hjälp av extra CSS konvertering inställning under Utseende del av konverteringsdialogen. Standard css som används är listade nedan, helt enkelt kopiera den och göra de ändringar du vill..calibre-pdf-toc table { width: 100%% }.calibre-pdf-toc table tr td:last-of-type { text-align: right }.calibre-pdf-toc.level-0 { font-size: larger; }.calibre-pdf-toc.level-1 td:first-of-type { padding-left: 1.4em }.calibre-pdf-toc.level-2 td:first-of-type { padding-left: 2.8em } 1.5 Redigera e-böcker calibre har en integrerad e-bokeditor som kan användas för redigera böcker i EPUB- och AZW3(Kindle)-formaten. Editorn visar dig HTML och CSS som används internt i bokfiler, med en direkt förhandsgranskning som uppdateras allt eftersom du gör ändringar. Den innehåller också olika automatiserade verktyg för att utföra vanliga uppsnyggningoch justeringsuppgifter. Du kan använda denna editor genom att högerklicka på valfri bok i calibre och välja Redigera bok. 70 Kapitel 1. Avsnitten

75 Innehåll Grundläggande arbetsflöde (sida 71) Filbläddraren (sida 74) Byter namn på filer (sida 75) Slår samman filer (sida 75) Ändrar textfilordning (sida 75) Märkning av omslaget (sida 75) Radera filer (sida 76) Export av filer (sida 76) Lägga till nya bilder / fonts / etc. eller skapa nya tomma filer (sida 76) Byta filer (sida 76) Länka stilmallar till HTML-filer effektivt (sida 76) Sök och ersätt (sida 76) Sparade sökningar (sida 77) Funktionsläge (sida 77) Automatiserade verktyg (sida 77) Redigera innehållsförteckningen (sida 77) Kontrollera bok (sida 79) Lägg till ett omslag (sida 80) Inbäddadningsrefererade typsnitt (sida 80) Använder delmängd av inbäddade typsnitt (sida 80) Förbättrad skiljeteckenhantering (sida 80) Tar bort oanvända CSS-stilregler (sida 80) Justera HTML (sida 80) Försköna filer (sida 81) Inför innehållsförteckning på raden (sida 81) Sätt semantik (sida 81) Filtrera stil Information (sida 81) Kontrollpunkt (sida 81) Panelen för direkt förhandsgranskning (sida 84) Dela upp HTML-filer (sida 85) Direkta CSS-panelen (sida 86) Diverse verktyg (sida 87) Innehållsförteckningsvyn (sida 87) Kontroll av stavning av ord i boken (sida 87) Infoga specialtecken (sida 88) Kodinspektörvyn (sida 89) Kontrollerar externa länkar (sida 89) Ordna filer i mappar efter typ (sida 89) Importera filer i andra e-boksformat som EPUB (sida 89) Rapportverktyget (sida 97) Speciella funktioner i kodeditorn (sida 98) Syntaxmarkering (sida 98) Sammanhangsberoende hjälp (sida 98) Komplettera automatiskt (sida 98) Snuttar (sida 99) Grundläggande arbetsflöde 1.5. Redigera e-böcker 71

76 Observera: En videogenomgång av calibre editorn finns här 23. När du först öppnar en bok med bokredigeringsverktyget, kommer få se en list av filer på vänster sida. Dessa är individuella HTML-filer, stilmallar, bilder, etc. som tillsammans utgör innehållet av boken. Genom dubbelklicka på en fil startar du enkelt redigering av den. Notera att om du vill göra något mer sofistikerat än små justeringar, kommer du behöva känna till HTML-handledning 24 och CSS-handledning 25. Allt eftersom du gör ändringar till HTML eller CSS i editors, kommer du direkt kunna förhandsgranska förändringarna i förhandsgranskningsvyn till höger. När du är nöjd med ändringarna och dess utseende, klicka på sparaknappen eller använd Fil->Spara för att spara dina ändringar i e-boken. En användbar funktion är Kontrollpunkter. Innan du går och påbörjar en ambitiös uppsättning redigeringar, kan du skapa en kontrollpunkt. Kontrollpunkten kommer att bevara det aktuella läget i din bok, så om du i framtiden bestämmer du inte gillar de ändringar du har gjort i du kan gå tillbaka till staten när du skapade kontrollpunkten. För att skapa en kontrollpunkt, använd Redigera-> Skapa kontrollpunkt. Kontrollpunkter kommer också att skapas automatiskt för dig när du kör något automatiserat verktyg som global sök och ersätt. Den kontrollpunktsförfarande funktionaliteten är utöver det normala Ångra/gör om mekanismen vid redigering av enskilda filer. Kontrollpunkter är användbara för när ändringar är spridda över flera filer i boken. Det är det grundläggande arbetsflödet för redigering böcker Öppna en fil, göra ändringar, förhandsgranska och spara. Resten av denna handbok kommer att diskutera de olika verktyg och funktioner som finns så att du kan utföra specifika uppgifter effektivt Kapitel 1. Avsnitten

77 1.5. Redigera e-böcker 73

78 1.5.2 Filbläddraren 74 Kapitel 1. Avsnitten

79 Med Filbläddrare får du en översikt över de olika filerna inne i boken som du redigerar. Filerna är ordnade efter kategori, med text (HTML) filer i toppen, följt av stilmallar (CSS) filer, bilder och så vidare. Helt enkelt dubbelklicka på en fil för att börja redigera den. Redigering stöds för HTML, CSS och bildfiler. Ordningen på textfiler är samma ordning som de skulle visas i, om du läser boken. Alla andra filer är ordnade i bokstavsordning. Genom att dra muspekaren över en post, kan du se dess storlek, men också, längst ner på skärmen, den fullständiga sökvägen till filen inne i boken. Observera att filer i e-böcker är komprimerade, så storleken på den sista boken är inte summan av de enskilda filstorlekar. Många filer har speciell betydelse, i boken. Dessa har normalt en ikon bredvid deras namn, med angivande av speciell betydelse. Till exempel, på bilden till vänster, kan du se att filerna cover_image.jpg och titlepage.xhtml som har ikonen av ett omslag bredvid dem, indikerar detta att de är bokomslaget bilden och titlepage. På liknande sätt har content.opf - filen en metadata ikon bredvid sig, vilket indikerar boken metadata finns i den och toc.ncx-filen har en T ikon bredvid sig, vilket indikerar att det är innehållsförteckningen. Du kan utföra många åtgärder på enskilda filer, genom att högerklicka på dem. Byter namn på filer Du kan byta namn på en enskild fil genom att högerklicka på den och välja Byt namn. Byta namn på en fil uppdaterar automatiskt alla länkar och referenser till den i hela boken. Så allt du behöver göra är att ge det nya namnet kommer calibre tar hand om resten. Du kan också massbyta namn på många filer på en gång. Detta är användbart om du vill att filerna ha några enkla namn mönster. Till exempel kanske du vill byta namn på alla HTML-filer för att ha namn kapitel-1.html, kapitel- 2.html osv. Markera de filer du vill bulk bytt namn genom att hålla nere Skift eller Ctrl-tangenten och klicka på filerna. Högerklicka och välj Massändring av namn. Ange ett prefix och vilket nummer du vill att automatisk numrering för att börja på, klicka på OK och du är klar. Slår samman filer Ibland kanske du vill slå samman två HTML-filer eller två CSS-filer tillsammans. Det kan ibland vara bra att ha allt i en enda fil. Var försiktig dock, att sätta en hel del innehåll i en enda fil orsakar prestandaproblem när du tittar på boken i en typisk e-boksläsare. För att sammanfoga flera filer tillsammans, markera dem genom att hålla Ctrl-tangenten och klicka på dem (se till att du bara välja filer av en typ, antingen alla HTML-filer eller alla CSS-filer och så vidare). Högerklicka och välj slå samman. Det är allt, calibre kommer slå ihop filerna automatiskt, ta hand om migrera alla länkar och referenser till de fusionerade filerna. Observera att samgående filer ibland kan orsaka textformatering förändras, eftersom de enskilda filerna kunde ha använt olika stilmallar. Ändrar textfilordning Du kan arrangera i vilken ordning texten (HTML) filer öppnas när du läser boken genom att helt enkelt dra och släppa dem i filer webbläsaren. För den tekniskt kunnige, kallas detta omordning av bokryggen. Observera att du måste släppa objekt mellan andra objekt, inte på dem, kan det vara lite krångliga tills du vänjer det. Märkning av omslaget E-böcker har normalt en omslagsbild. Bilden visas i Filbläddraren med ikonen av en brun bok bredvid bildnamnet. Om du vill ange en annan bild som omslag, kan du göra det genom att högerklicka på filen och välja Välj som omslag. Dessutom har EPUB-filer begreppet titel. En titelsidan finns en HTML-fil som fungerar som titelbladet/omslaget till boken. Du kan markera en HTML-fil som Titel vid EPUB-redigering genom att högerklicka. Var noga med att filen du 1.5. Redigera e-böcker 75

80 markerar innehåller endast omslagsinformationen. Om det innehåller annat innehåll, till exempel det första kapitlet, då det innehållet kommer att förloras om användaren någonsin omvandlar EPUB-filen i calibre till ett annat format. Detta beror på att när du konverterar, förutsätter calibre att den markerade titeln sidan innehåller bara omslaget och inget annat innehåll. Radera filer Du kan ta bort filer genom att antingen högerklicka på dem eller genom att markera dem och trycka på Deletetangenten. Ta bort en fil tar bort alla hänvisningar till filen från OPF-filen, sparar dig detta grovgöra. Men referenser på andra platser tas inte bort, du kan använda Kontrollera bok -verktyg för att enkelt hitta och ta bort / byta ut dem. Export av filer Du kan exportera en fil från bokens till någon annanstans på datorn. Detta är användbart om du vill arbeta på filen i sig, med specialverktyg. För att göra detta, helt enkelt högerklicka på filen och välj Exportera. När du är klar arbetar på den exporterade filen kan du importera den i boken, genom att högerklicka på filen igen och välja Ersätt med fil... vilket gör att du kan byta ut filen i boken med den tidigare exporterad fil. Lägga till nya bilder / fonts / etc. eller skapa nya tomma filer Du kan lägga till en ny bild, typsnitt, format, etc. från datorn in i boken genom att klicka på Fil->Ny fil. Det gör att du antingen importera en fil genom att klicka på Importera resursfilen-knappen Importera resurs eller skapa en ny tom html-fil eller stilmallen genom att helt enkelt skriva in filnamnet i rutan för den nya filen. Du kan även importera flera filer till boken på en gång genom att använda Fil->Importera filer till bok. Byta filer Du kan enkelt byta ut befintliga filer i boken, genom att högerklicka på filen och välja ersätta. Detta kommer automatiskt att uppdatera alla länkar och referenser, om ersättningsfilen har ett annat namn än filen som ersätts. Länka stilmallar till HTML-filer effektivt Som en bekvämlighet kan du välja flera HTML-filer i Filbläddraren, högerklicka och välj Länka stilmallar för att ha calibre automatiskt infoga <link> etiketter för dessa stilmallar i alla markerade HTML-filer Sök och ersätt Redigera bok har en mycket kraftfull sök- och ersättsgränssnitt som låter dig söka och ersätta text i den aktuella filen, över alla filer och till och med i ett markerat område av den aktuella filen. Du kan söka med hjälp av en vanlig sökning eller använda reguljära uttryck. För att lära dig att använda reguljära uttryck för avancerad sökning, se Allt om att använda reguljära uttryck i calibre (sida 162). Starta sök och ersätt via Sök->Sök/Ersätt -menyalternativet (du måste redigera en HTML-eller CSS-fil). 76 Kapitel 1. Avsnitten

81 Fyll i texten du vill söka efter i rutan Sök och dess ersättning i rutan Ersätt. Du kan klicka på lämpliga knappar för att hitta nästa träff, byt den aktuella träffen och ersätta alla passande träffar. Använda rullgardinsmenyer i botten av lådan, kan du söka arbeta över den aktuella filen, alla textfiler, alla stilfiler eller alla filer. Du kan också välja sökläget för att vara en normal (sträng) sökning eller ett reguljärt uttryckssökning. Du kan räkna alla träffar för ett sökuttryck via Sök->Räkna alla. Räkningen kommer att köra över allt vad filer/regioner som du har valt i rullgardinsrutan. Du kan också gå till en specifik rad i den öppna editorn via Sök->Gå till rad. Observera: Kom ihåg, att utnyttja den fulla kraften i sök och ersätt, måste du använda reguljära uttryck. Se Allt om att använda reguljära uttryck i calibre (sida 162). Sparade sökningar Du kan spara ofta använda sök/ersätt-uttryck och återanvända dem flera gånger. Om du vill spara en sökning högerklicka bara i rutan Spara aktuell sökning. Du kan öppna dialogrutan för sparade sökningar via Sök->Sparade sökningar. Detta kommer att visa dig en lista med sök och ersätt uttryck som du kan använda. Du kan även välja flera poster i listan genom att hålla ned CTRL-tangenten samtidigt som du klickar för att köra flera sök och ersätt uttryck i en enda operation. Funktionsläge Med funktionsläget kan du skriva godtyckliga och starka python-funktioner som körs på varje Hitta/ersätt. Du kan göra i stort sett alla texthantering du vill i funktionsläge. För mer information se Funktionsläge för Sök & Ersätt i editorn (sida 89) Automatiserade verktyg Redigera bok har olika verktyg för att hjälpa till med vanliga uppgifter. Dessa nås via menyn Verktyg. Redigera innehållsförteckningen Det finns en särskild verktyg för att underlätta redigeringen av innehållsförteckningen. Starta det med Verktyg- >Innehållsförteckning->Redigera innehållsförteckning Redigera e-böcker 77

82 Redigera innehållsförteckning-verktyget visar den aktuella innehållsförteckningen (om någon) till vänster. Helt enkelt dubbelklicka på en post för att ändra texten. Du kan också arrangera poster genom att dra och släppa eller genom att använda knapparna till höger. För böcker som inte har en befintlig innehållsförteckning, ger verktyget dig olika alternativ för att automatiskt generera en innehållsförteckning från texten. Du kan generera från rubrikerna i dokumentet, från länkar, från enskilda filer och så vidare. Du kan redigera enskilda poster genom att klicka på dem och sedan klicka på Ändra platsen denna startpunkt pekar på-knappen. Detta kommer att öppna upp ett mini-förhandsvisning av boken, bara flytta muspekaren över boken vyn panelen och klicka där du vill att posten att peka på. En tjock grön linje visar dig platsen. Klicka på OK när du är nöjd med platsen. 78 Kapitel 1. Avsnitten

83 Kontrollera bok Kontrollera bok-verktyget söker igenom din bok efter problem som kan förhindra det fungerar som avsett på faktiska läsaranordningar. Aktivera den via Verktyg->Kontrollera bok. Eventuella problem som finns redovisas i en trevlig, lätt att använda listan. Genom att klicka på en post i listan visas lite hjälp om felet samt ger dig möjlighet att automatiskt åtgärda detta fel, om felet kan åtgärdas automatiskt. Du kan också dubbelklicka på felet för att öppna platsen för fel i en editor, så du kan fixa det själv. En del av de kontroller som gjorts är: Felaktigt HTML-kod. Alla HTML-kod som inte kan tolkas som välformad XML rapporteras. Korrigera det kommer att se till att din kod fungerar som det ska i alla sammanhang. calibre kan även automatiskt åtgärda felen, men auto-rättning kan ibland få oväntade effekter, så använd den med försiktighet. Som alltid, skapas en kontrollpunkt innan auto-rättning så att du enkelt kan återställa alla förändringar. Auto-rättning fungerar genom att tolka markeringen med hjälp av HTML5-algoritmen, som är mycket feltolerant och sedan konvertera till välformade XML Redigera e-böcker 79

84 Felaktiga eller okända CSS-format. Alla CSS som inte är giltig eller som har egenskaper som inte är definierade i standarden CSS 2.1 (plus några från CSS 3) rapporteras. CSS kontrolleras i alla stilmallar, stilattribut på raden och <style> etiketter i HTML-filer. Trasiga länkar. Länkar som pekar på filer i boken som saknas rapporteras. Orefererade filer. Filer i boken som inte refereras till av någon annan fil eller inte finns på bokryggen redovisas. Olika vanliga problem i OPF filer såsom dubbletter av bokryggar eller uppenbara poster, trasiga idrefs eller metaomslagsetiketter, saknade nödvändiga sektioner och så vidare. Olika kompatibilitets kontroller för kända problem som kan orsaka boken inte fungerar på läsenheter. Lägg till ett omslag Du kan enkelt lägga till ett omslag till boken via Verktyg->Lägg till omslag. Detta gör att du kan antingen välja en befintlig bild i boken som omslag eller importera en ny bild in i boken och göra den till omslag. När du redigerar EPUB-filer är HTML-täckbladet för omslaget automatiskt. Om en befintlig omslag i boken hittas, ersätts det. Verktyget tar automatiskt hand om korrekt märkning av omslagsfiler som omslag i OPF. Inbäddadningsrefererade typsnitt Nås via Verktyg->Bädda in refererade typsnitt, finner detta verktyg alla typsnitt som refereras i boken, och om de inte redan är inbäddade, söker igenom datorn efter dem och bäddar in dem i boken, om de hittas. Se till att du har de nödvändiga Upphovsrätter för inbäddning av kommersiellt licensierade typsnitt, innan du gör detta. Använder delmängd av inbäddade typsnitt Nås via Verktyg->Använd delmängd av inbäddade typsnitt, reducerar detta verktyg alla typsnitt i boken att bara innehålla tecken för texten som faktiskt finns i boken. Detta minskar ofta storleken på typsnittsfiler med ~ 50%. Dock var medveten om att när typsnitten är en delmängd, om du lägger till ny text vars tecken är inte tidigare förekommer i den undergrupp typsnitt, kommer typsnittet inte att fungera för den nya texten. Så gör det bara som detta som sista steget i arbetsflödet. Förbättrad skiljeteckenhantering Konvertera oformaterad textstreck, ellips, citationstecken, flera bindestreck, etc. i sina typografisk korrekta motsvarigheter. Observera att algoritmen ibland kan generera felaktiga resultat, speciellt när apostrof i början av sammandragningar är inblandade. Nås via Verktyg->Förbättrad skiljeteckenhantering. Tar bort oanvända CSS-stilregler Ta bort alla oanvända CSS-regler från mallar och <style> etiketter. Några böcker som skapas från produktionsmallar kan ha ett stort antal extra CSS-regler som inte passar något materiellt innehåll. Dessa extra regler kan bromsa läsare som behöver bearbeta dem alla. Nås via Verktyg->Ta bort oanvända CSS. Justera HTML Detta verktyg omvandlar HTML som inte kan tolkas som XML till välformad XML. Det är mycket vanligt i böcker för att ha icke-välformad XML, så detta verktyg automatiserar helt enkelt processen med att fastställa en sådan HTML. Verktyget fungerar genom att tolka HTML med hjälp av HTML5-algoritmen (den algoritm som används i alla moderna webbläsare) och sedan omvandla resultatet till XML. Var medveten om att auto-rättning ibland kan ha kontraintuitivt 80 Kapitel 1. Avsnitten

85 resultat. Om du vill kan du använda Check Book-verktyget som diskuteras ovan för att hitta och manuellt korrigera problem i HTML. Nås via Verktyg->Laga HTML. Försköna filer Detta verktyg används för att automatiskt formatera alla HTML och CSS-filer så att de ser fina ut. Koden indenteras automatiskt så att indragen justerar upp text fint, tomma rader införs vid behov och så vidare. Observera att förskönande också auto-justerar trasig HTML/CSS. Därför, om du inte vill ha någon automatisk justering som ska utföras, använd först Kontrollera bok-verktyget för att rätta till alla problem och först därefter köra försköna. Nås via Verktyg->Försköna alla filer. Observera: I HTML kan finnas text med betydande mängd mellanslag, via CSS-blank direktivet. Därför skulle försköning eventuellt ändra rendering av HTML. För att undvika detta så långt som möjligt, försköningsalgoritmen förskönar bara på blocknivå etiketter som innehåller andra blocknivåetiketter. Så, till exempel, text i en <p> tag kommer inte att ha sina mellanslag förändrade. Men en <body> etiketter som innehåller bara andra <p> och <div> etiketter kommer att förskönas. Detta kan ibland innebära att en viss fil inte kommer att påverkas av försköning eftersom den inte har lämpliga blocknivåetiketter. I sådana fall kan du prova olika försköning verktyg, som är mindre försiktiga, till exempel: HTML Tidy 26. Inför innehållsförteckning på raden Normalt i e-böcker, är innehållsförteckningen separat från huvudtexten och är vanligtvis nås via en speciell innehållsförteckningsknapp / meny i e-bokens läsenhet. Du kan också låta calibre automatiskt generera en innehållsförteckning på raden som blir en del av texten i boken. Det genereras utifrån definierade innehållsförteckningen. Om du använder det här verktyget flera gånger kommer varje anrop orsaka den tidigare skapade innehållsförteckningen på raden att bytas ut. Verktyget kan nås via Verktyg->Innehållsförteckning->Infoga en innehållsförteckning. Sätt semantik Detta verktyg används för att ställa in semantik i EPUB-filer. Semantik är helt enkelt, länkar i OPF som identifierar vissa platser i boken som har särskild betydelse. Du kan använda dem för att identifiera förordet, engagemang, omslag, innehållsförteckning, osv. Välj bara vilken typ av semantisk information som du vill ange och välj sedan platsen i boken som länken ska peka på. Detta verktyg kan nås via Verktyg->Sätt semantik. Filtrera stil Information Detta verktyg kan användas för att enkelt ta bort specificerade CSS-stilmallar från hela boken. Du kan tala om vilka egenskaper du vill ha bort, till exempel färg, bakgrundsfärg, radhöjd och det kommer att ta bort dem överallt de inträffar - stilmallar, <style> etiketter och radformateringsattribut. Efter borttag av stilinformationen, en sammanfattning av alla de ändringar som gjorts visas så att du kan se exakt vad som ändrats. Verktyget kan nås via Verktyg->Filtrera stilinformation Kontrollpunkt Kontrollpunkter är ett sätt att markera det aktuella läget i boken som speciellt. Du kan sedan gå vidare till att göra de ändringar du vill på boken och om du inte gillar resultatet, återgå till kontrollpunktstillståndet. Kontrollpunkter skapas automatiskt varje gång du kör någon av de automatiserade verktyg som beskrivs i föregående avsnitt Redigera e-böcker 81

86 Du kan skapa en kontrollpunkt via Redigera->Skapa kontrollpunkt. Och gå tillbaka till en tidigare kontrollpunkt med Redigera->Återställ till... Kontrollpunktsfunktionen är utöver det normala ångra/gör om mekanismen vid redigering av enskilda filer. Kontrollpunkter är särskilt användbara för när ändringar är spridda över flera filer i boken eller om du vill kunna återställa en stor grupp relaterade förändringar som helhet. Du kan se en lista över tillgängliga kontrollpunkter via Visa->Kontrollpunkter. Du kan jämföra det nuvarande läget i boken till en angiven kontrollpunkt med Jämföra e-böcker (sida 99)-verktyget - genom att välja kontrollpunkt av intresse och klicka på knappen Jämför. Revert to-knappen återställer boken till den valda kontrollpunkten, ångra alla ändringar efter den kontrollpunkten skapades. 82 Kapitel 1. Avsnitten

87 1.5. Redigera e-böcker 83

88 1.5.6 Panelen för direkt förhandsgranskning 84 Kapitel 1. Avsnitten

89 Förhandsgranska fil ger dig en direkt överblick över de olika filerna i förhandsgranskningspanelen som visar dig hitta de ändringar du gör direkt (med en sekund eller två av försening). När du redigerar HTML eller CSS-filer, är uppdateras förhandsgranskningspanelen automatiskt för att återspegla ändringarna. När du flyttar runt markören i editorn kommer förhandsgranskningspanelen spåra dess plats och visar motsvarande plats i boken. Genom att klicka i förhandsgranskningspanelen gör att markören i editorn placeras över element du klickade. Om du klickar på en länk som pekar på en annan fil i boken, kommer filen automatiskt att öppnas i redigerings- och förhandsgranskningspanelen. Du kan stänga av automatisk synkronisering av läget och direkt förhandsvisning av ändringar - med knapparna under förhandsgranskningspanelen. Den direkta uppdateringen av förhandsvisningspanelen händer bara när du inte aktivt skriver i editorn, för att inte vara störande eller sakta ner dig, väntar förhandsvisningen med att göra detta. Förhandsgranskningspanelen visar hur texten kommer att se ut när de visas. Dock är förhandsgranskningspanelen inte en ersättning för faktiskt testa din bok på en verklig läsenhet. Det är både mer och mindre kapabel än en verklig läsare. Det kommer att tolerera fel och slarviga språkmarkeringar mycket bättre än de flesta läsaranordningar. Det kommer också att inte visa dig sidmarginaler, sidbrytningar och inbäddade typsnitt som använder typsnittsersättning. Använd förhandsgranskningspanelen medan du arbetar på boken, men när du är klar, granska den i en verklig läsenhet eller programvaruemulator. Observera: Förhandsgranskningspanelen stöder inte inbäddade typsnitt om namnet på typsnittet inuti typsnittsfil inte passar namnet i -regeln. Du kan använda kontrollera bok-verktyg för att snabbt hitta och åtgärda sådana problem typsnitt. Dela upp HTML-filer Ett, kanske icke uppenbara, är användningen av förhandsgranskningspanelen för att dela upp långa HTML-filer. Medan du tittar på filen som du vill dela, klicka på Delat läge-knappen under förhandsgranskningspanelen. Sedan helt enkelt flytta musen till den plats där du vill dela filen och klicka. En tjock grön linje kommer att visa dig exakt var uppdelningen kommer att hända när du flyttar musen. När du har hittat den plats du vill, klicka och delning kommer att utföras. Filuppdelningen kommer automatiskt uppdatera alla länkar och referenser som pekade in i den nedre halvan av filen och kommer att öppna den nyligen delade filen i en editor. Du kan också dela upp en enda HTML-fil på flera platser automatiskt, genom att högerklicka inne i filen i editorn och välja Dela upp på flera ställen. Detta gör att du enkelt delar upp en stor fil på alla rubriketiketter eller alla etiketter som har en viss klass och så vidare Redigera e-böcker 85

90 1.5.7 Direkta CSS-panelen Gälllande CSS visar alla stilregler som gäller för etiketten som du för närvarande redigerar. Namnet på etiketten, tillsammans med dess radnummer i editorn visas, följt av en lista med passande stilregler. Det är ett bra sätt att snabbt se vilken stilregler som gäller för varje etikett. Visningen har också klickbara länkar (i blått), som tar dig direkt till den plats där stilen definierades, om du vill göra några ändringar i stilregler. Stilregler som gäller direkt på etiketten, liksom regler som ärvs från överetiketter visas. Panelen visar även hur de slutligen beräknade stilar för etiketten är. Egenskaper i listan som ersätts av högre prioriteringsregler visas med en linje genom dem. Du kan aktivera CSS-panelens direktvisning via Visa->Gällande CSS. 86 Kapitel 1. Avsnitten

91 1.5.8 Diverse verktyg Det finns några fler verktyg som kan vara användbara när du redigerar boken. Innehållsförteckningsvyn The Table of Contents view shows you the current table of contents in the book. Double clicking on any entry opens the place that entry points to in an editor. You can right click to edit the Table of Contents, refresh the view or expand/collapse all items. Access this view via View->Table of Contents. Kontroll av stavning av ord i boken Du kan köra en stavningskontroll via Verktyg->Kontrollera stavning Redigera e-böcker 87

92 Ord visas med antalet gånger de förekommer i boken och språket ordet tillhör. Språkinformation tas från böckernas metadata och från lang-attribut i HTML-filer. Detta gör att stavningskontrollen fungerar bra även med böcker som innehåller text på flera språk. Till exempel i följande HTML utdrag, ordet färgen kommer att kontrolleras med hjälp av amerikansk engelska och ordet färg med brittisk engelska: <div lang="en_us">color <span lang="en_gb">colour</span></div> Observera: Du kan dubbelklicka på ett ord för att markera nästa förekomst av det ordet i editorn. Detta är användbart om du vill manuellt redigera ordet eller se vilket sammanhang det är i. För att ändra ett ord, helt enkelt dubbelklicka en av de föreslagna alternativa stavningar på höger eller skriv in ditt eget korrigerade stavning och klicka på Ändra valda ord till-knappen. Detta kommer att ersätta alla förekomster av ordet i boken. Du kan också högerklicka på ett ord i huvud ordlistan ändra ordet lämpligen från högerklicksmenyn. Du kan låta stavningskontrollen ignorerar ett ord för den aktuella sessionen genom att klicka på knappen Ignorera. Du kan även lägga till ett ord i ordlistan genom att klicka på Lägg till ordlista. Stavningskontrollen har stöd för flera ordlistor, så att du kan välja den ordlista du vill att ordet läggs till. Du kan även få stavningskontrollen visa alla ord i din bok, inte bara de felstavade sådana. Detta är användbart för att se vilka ord är vanligast i din bok och köra en enkel sökning och ersätta på enskilda ord. Observera: Om du gör några ändringar i boken genom att redigera filer medan stavningskontroll-verktyget är öppet, ska du klicka på knappen Uppdatera i stavningskontroll-verktyget. Om du inte gör detta och fortsätter att använda stavningskontroll -verktyget, kan du förlora de ändringar du har gjort i editorn. Lägga till nya ordböcker Stavningskontrollen kommer med inbyggda ordlistor för engelska och spanska. Du kan installera egna ordlistor via Redigera->Inställningar->Redigera inställningar->hantera stavningsordlistor. Stavningskontrollen kan använda ordböcker från Openoffice-programmet (i.oxt format). Du kan ladda ner dessa ordlistor från The OpenOffice Extensions repository 27 Infoga specialtecken Du kan infoga tecken som är svåra att skriva med hjälp av Redigera->Inforga specialtecken-verktyget. Detta visar alla Unicode-tecken, klicka på det tecken du vill skriva. Om du håller Ctrl samtidigt som du klickar, fönstret kommer stänga sig själv efter att det valda tecknet förts in. Detta verktyg kan användas för att infoga specialtecken i huvudtexten eller i någon annan del av användargränssnittet, till exempel sök och ersätt-verktyg. Eftersom det finns en hel del tecken kan du definiera dina egena Favorit karaktärer, som kommer att visas först. Högerklicka på ett tecken för att markera den som favorit. Du kan också högerklicka på en karaktär i favoriter för att ta bort den från favoriter. Slutligen kan du arrangera ordningen på tecknen i favoriter genom att klicka på arrangera favoriter knappen och sedan dra och släppa tecknen i favoriter runt omkring. Du kan också skriva direkt i specialtecken med hjälp av tangentbordet. För att göra detta skriver du Unicode-koden för tecknet (i hexadecimal) och tryck sedan på Alt+X-tangenten som omvandlar tidigare skrivit koden i motsvarande tecken. Till exempel, för att skriva ÿ du skulle skriva ff och sedan Alt + X. För att skriva ett fast mellanslag som du skulle använda a0 och sedan Alt+X, för att skriva den horisontella ellips du skulle använda 2026 och Alt+X och så vidare Kapitel 1. Avsnitten

93 Slutligen kan du skriva in specialtecken med hjälp av HTML-enheter. Till exempel, att skriva kommer att ersättas av ett hårt mellanslag när du skriver semikolon. Bytet sker bara när du skriver semikolon. Kodinspektörvyn Denna vy visar HTML-kodning och CSS som gäller för det aktuella elementet av intresse. Du öppnar den genom att högerklicka på en plats i förhandsvisningspanelen och välja Granska. Det gör att du kan se HTML-kodning för det elementet och ännu viktigare, de CSS-format som gäller för den. Du kan till och med dynamiskt redigera stilar och se vilken effekt ändringarna har direkt. Observera att redigera stilar faktiskt inte gör ändringar i bokens innehåll, det innebär bara ett snabb experimenterande. Förmågan att redigera direkt inne i inspektören är under utveckling. Kontrollerar externa länkar Du kan använda detta verktyg för att kontrollera alla länkar i din bok som pekar på externa webbplatser. Verktyget kommer att försöka besöka varje externt länkad webbplats, och om besöket misslyckas, kommer det att rapportera alla trasiga länkar i ett behändigt format för dig att fixa. Ordna filer i mappar efter typ Ofta när du redigerar EPUB-filer som du får från någonstans, kommer du att finna att filerna inuti EPUB är ordnade på måfå, i olika undermappar. Detta verktyg gör det möjligt att automatiskt flytta alla filer i undermappar baserat på deras typer. Åtkomst det via Verktyg->Ordna i mappar. Observera att detta verktyg ändrar bara hur filerna är ordnade inne i EPUB, det betyder inte att det ändras hur de visas i filbläddraren. Importera filer i andra e-boksformat som EPUB Editorn inkluderar möjligheten att importera filer i vissa andra e-boksformat direkt som en ny EPUB, utan att gå igenom en full konvertering. Detta är särskilt användbart för att direkt skapa EPUB-filer från dina egna handredigerade HTML-filer. Du kan göra detta via Fil->Importera en HTML- eller DOCX-fil som en ny bok. Funktionsläge för Sök & Ersätt i editorn Verktyget Sök & Ersätt i editorn stöder ett funktionsläge. I detta läge kan du kombinera reguljära uttryck (see Allt om att använda reguljära uttryck i calibre (sida 162)) med godtyckliga kraftfulla python-funktioner för att göra alla typer av avancerad textbehandling. I vanliga regexp läget för sök och ersätt kan du ange både ett reguljärt uttryck för att söka efter såväl som en mall som används för att ersätta alla funna träffar. I funktionsläge, i stället för använda en fast mall, kan du ange en godtycklig funktion i programmeringsspråket python 28. Detta gör att du kan göra massor av saker som inte är möjligt med enkla mallar. Tekniker för att använda funktionsläge och syntaxen beskrivs med hjälp av exempel, som visar dig hur du skapar funktioner för att utföra allt mer komplexa uppgifter Redigera e-böcker 89

94 Automatiskt justera skiftläget med rubrikerna i dokumentet Här kommer vi att utnyttja en av de inbyggda funktioner i editorn för att automatiskt ändra skiftläget för all text i rubriketiketter till versal: Find expression: <([Hh][1-6])[^>]*>.+?</\1> För funktionen, helt enkelt välj inbyggd funktion Titelskiftlägestext. Det kommer att ändra titlar som ser ut: <h1>någon TITEL</h1> till <h1>någon Titel</h1>. Det kommer även att fungera om det finns andra HTML-etiketter inuti rubriketiketter. Din första egna funktion - smarta bindestreck Den verkliga kraften i funktionsläge kommer från att kunna skapa egna funktioner för att bearbeta text på godtyckliga sätt. Verktyget Snygga till Skiljetecken i editorn lämnar enskilda bindestreck i fred, så att du kan använda denna funktion för att ersätta dem med em-streck. För att skapa en ny funktion, klickar du bara på knappen Skapa/Redigera för att skapa en ny funktion och kopiera python-koden från nedan. def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs): return match.group().replace('--', '--').replace('-', '--') Varje Sök och Ersätt anpassad funktion måste ha ett unikt namn och består av en python-funktion som heter ersätta, som accepterar alla argument som visas ovan. För tillfället ska vi inte oroa för alla olika argument till replace()- funktionen. Bara fokusera på match argumentet. Det representerar en träff när man kör en sök och ersätt. Dess fulla dokumentation finns tillgänglig här 29. match.group() helt enkelt tillbaka all den passande texten och allt vi gör är att ersätta bindestreck i den texten med em-streck, först ersätt dubbla bindestreck och sedan enstaka bindestreck. Använd denna funktion med att hitta reguljära uttrycket: >[^<>]+< Och det kommer att ersätta alla bindestreck med em-streck, men bara i själva texten och inte inne i HTMLetikettdefinitioner. Kraften i funktionsläge - med hjälp av en stavningsordlistan att fixa felaktigt avstavade ord Ofta innehåller böcker skapade av genomsökningar av tryckta böcker felavstavade ord ord som delades vid slutet av raden på den utskrivna sidan. Vi kommer att skriva en enkel funktion för att automatiskt hitta och åtgärda sådana ord. import regex from calibre import replace_entities from calibre import prepare_string_for_xml def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs): def replace_word(wmatch): # Try to remove the hyphen and replace the words if the resulting # hyphen free word is recognized by the dictionary without_hyphen = wmatch.group(1) + wmatch.group(2) if dictionaries.recognized(without_hyphen): return without_hyphen return wmatch.group() # Search for words split by a hyphen text = replace_entities(match.group()[1:-1]) # Handle HTML entities like & corrected = regex.sub(r'(\w+)\s*-\s*(\w+)', replace_word, text, flags=regex.version1 regex.unic return '>%s<' % prepare_string_for_xml(corrected) # Put back required entities Använd denna funktion med samma uttryck som tidigare, det vill säga: Kapitel 1. Avsnitten

95 >[^<>]+< Och det kommer magiskt fixa alla felavstavade ord i texten i boken. Huvudtricket är att använda en av de användbara extra argument till replace-funktionen dictionaries. Detta syftar på de ordlistor editorn själv använder för att stavningskontrollera text i boken. Vad denna funktion gör är att leta efter ord separerade med ett bindestreck, tar bort bindestrecket och kontrollerar om ordlistan godkänner sammansatt ordet, om den gör det, ersättas de ursprungliga orden med de bindestrecksfria sammansatta orden. Observera att en begränsning med denna teknik är att det kommer bara att fungera för enspråkiga böcker, därför att, som standard använder, dictionaries.recognized() det huvudsakliga språket i boken. Numrera sektioner automatiskt Nu kommer vi att se något lite annorlunda. Anta att din HTML-fil har många sektioner, var och en med en rubrik i en <h2> etikett som ser ut som <h2>någon text</h2>. Du kan skapa en anpassad funktion som automatiskt numrerar dessa rubriker med avsnittsnummer i följd, så att de ser ut <h2>1. Någon text</h2>. def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs): section_number = '%d. ' % number return match.group(1) + section_number + match.group(2) # Ensure that when running over multiple files, the files are processed # in the order in which they appear in the book replace.file_order = 'spine' Använd det för att hitta uttryck: (?s)(<h2[^<>]*>)(.+?</h2>) Placera markören i början av filen och klicka Ersätt alla. Denna funktion använder andra användbara extra argumenten för replace(): number argumentet. När alternativet Ersätt alla används räknas numret upp automatiskt för varje efterföljande träff. En annan nyhet är att använda replace.file_order inställning som till spine innebär att om sökningen körs på flera HTML-filer, bearbetas filerna i den ordning som de visas i boken. Se Välj filordning när flera HTML-filer körs (sida 94) för detaljer. Skapa innehållsförteckning automatiskt Slutligen, låt oss prova något lite mer ambitiöst. Antag att din bok har rubriker i h1 och h2 etiketter som ser ut som <h1 id=someid">någon Text</h1>. Vi kommer automatiskt generera en HTML-innehållsförteckning baserad på dessa rubriker. Skapa den anpassade funktionen nedan: from calibre import replace_entities from calibre.ebooks.oeb.polish.toc import TOC, toc_to_html from calibre.gui2.tweak_book import current_container from calibre.ebooks.oeb.base import xml2str def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs): if match is None: # All matches found, output the resulting Table of Contents. # The argument metadata is the metadata of the book being edited if 'toc' in data: toc = data['toc'] root = TOC() for (file_name, tag_name, anchor, text) in toc: parent = root.children[-1] if tag_name == 'h2' and root.children else root parent.add(text, file_name, anchor) toc = toc_to_html(root, current_container(), 'toc.html', 'Table of Contents for ' + metad 1.5. Redigera e-böcker 91

96 print (xml2str(toc)) else: print ('No headings to build ToC from found') else: # Add an entry corresponding to this match to the Table of Contents if 'toc' not in data: # The entries are stored in the data object, which will persist # for all invocations of this function during a 'Replace All' operation data['toc'] = [] tag_name, anchor, text = match.group(1), replace_entities(match.group(2)), replace_entities(m data['toc'].append((file_name, tag_name, anchor, text)) return match.group() # We don't want to make any actual changes, so return the original matc # Ensure that we are called once after the last match is found so we can # output the ToC replace.call_after_last_match = True # Ensure that when running over multiple files, this function is called, # the files are processed in the order in which they appear in the book replace.file_order = 'spine' Och använd den med sökuttrycket: <(h[12]) [^<>]* id=['"]([^'"]+)['"][^<>]*>([^<>]+) Kör sökningen på Alla textfiler och vid slutet av sökningen, kommer ett fönster dyka upp med Felsök utdata från den funktion vilken kommer ha HTML-innehållsförteckning, klar att klistras in i toc.html. Funktionen ovan är kraftigt kommenterad, så det borde vara lätt att följa. Det viktigaste nya funktionen är att använda ett annan användbart extra argument till replace() funktion, data objektet. data objektet är en python dict som kvarstår mellan alla efterföljande anrop av replace() under en enda Ersätt alla operation. En annan ny funktion är användning av call_after_last_match genom att sätta denna till True på replace() funktionen innebär att editorn kommer anropa replace() en extra gång efter alla träffar hittats. För detta extra anrop, kommer träffobjektet vara None. Det var bara en demonstration för att visa styrkan av funktionsläge, om du verkligen behöver skapa en innehållsförteckning från rubriker i din bok, kommer du ha större nytta av att använda det dedikerade innehållsförteckningsverktyget i Vertyg->Innehållsförteckning. Alla funktionsläge funktioner måste vara python-funktioner som heter replace med föl- API för funktionsläget jande signatur: def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs): return a_string När en sök/ersätt körs, för varje träff som hittas kommer funktionen replace() att kallas, den måste returnera ersättningssträngen för träffen. Om inga ersättare finns att göra, bör den returnera tillbaka, match.group() som är den ursprungliga strängen. De olika argument till replace() funktion dokumenteras nedan. match argumentet match argumentet representerar den aktuella funna träffen. Det är ett python objekt 30. Det mest användbara metoden är group() som kan användas för att få den passande texten motsvarar enskilda fångstgrupper i reguljära sökuttrycket. number argumentet number argumentet är numret på den aktuella träffen. När du kör Ersätt alla, kommer varje efterföljande träff få replace() att anropas med ett ökande nummer. Den första träffen har nummer Kapitel 1. Avsnitten

97 file_name argumentet Detta är filnamnet på den fil i vilken den aktuella träffen hittades. När du söker inne i markerad text file_name är tom. file_name i kanonisk form, en relativ sökväg till roten av boken, med hjälp av / som sökvägsavgränsare. metadata argumentet This represents the metadata of the current book, such as title, authors, language, etc. It is an object of class calibre.ebooks.metadata.book.base.metadata (sida 154). Useful attributes include, title, authors (a list of authors) and language (the language code). dictionaries argumentet Detta innebär insamling av ordlistor som används för stavningskontroll den aktuella boken. en mest användbara metoden dictionaries.recognized(word) vilken som kommer returnera True om givet inord känns igen av ordlista för den aktuella bokens språk. data argumentet Detta en enkel python dict. När du kör Ersätt alla, kommer varje efterföljande träff orsaka replace() att kallas med samma dict som data. Du kan alltså använda den för att lagra godtyckliga data mellan anrop av replace() under en Replace All operation. functions argumentet functions argumentet ger dig tillgång till alla andra användardefinierade funktioner. Detta är användbart för kodåteranvändning. Du kan definiera nyttofunktioner på ett ställe och återanvända dem i alla dina andra funktioner. Anta till exempel att du skapar ett funktionsnamn My Function så här: def utility(): # do something def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):... Sedan i en annan funktion kan du accessa utility() funktionen så här: def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs): utility = functions['my Function']['utility']... Du kan även använda funktionsobjekt för att lagra beständiga data, som kan återanvändas av andra funktioner. Till exempel kan du ha en funktion som när det körs med Ersätt alla samlar några uppgifter och en annan funktion som använder det när det körs i efterhand. Betrakta följande två funktioner: # Function One persistent_data = {} def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):... persistent_data['something'] = 'some data' # Function Two def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs): persistent_data = functions['function One']['persistent_data']... Felsöka dina funktioner Du kan felsöka de funktioner som du skapar med hjälp av standard print() funktionen från python. Utskrift från print kommer visas i ett extrafönster efter att sök/ersätt är klar. Du såg ett exempel på att använda print() för att mata ut en hel innehållsförteckning ovan Redigera e-böcker 93

98 Välj filordning när flera HTML-filer körs När du kör Ersätt alla på flera HTML filer, beror ordningen för vilka filer behandlas på vilka filer du har öppnat för redigering. Du kan tvinga sökningen att behandla filer i den ordning de dyker upp genom att sätta file_order attributet på din funktion, så här. def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):... replace.file_order = 'spine' file_order accepterar två värden, spine och spine-reverse vilka får sökprocessen att behandla multipla filer i den ordning de dyker upp i boken, antingen framlänges eller baklänges. Med din funktion kallad en extra tid efter den sista träffen hittas Ibland, som i automatisk skapa innehållsförteckning som i exemplet ovan, är det användbart att din funktion anropas en extra gång efter sista träffen hittades. Du kan göra detta genom att sätta call_after_last_match attributet på din funktion, så här: def replace(match, number, file_name, metadata, dictionaries, data, functions, *args, **kwargs):... replace.call_after_last_match = True Snuttar Den kaliber Redigeraren stöder snuttar. En snutt är ett stycke text som antingen återanvänds ofta eller innehåller mycket överflödig text. Editorn kan du infoga en snutt med endast ett fåtal knapptryckningar. Anta till exempel att du ofta befinner dig sätta in etikettlänk när du redigerar HTML-filer, då kan du helt enkelt skriva <a i editorn och trycka Control+J. Editorn kommer att expandera den till: <a href="filename"></a> Inte bara det, kommer ordet filnamn väljas, med markören placeras över det, så att du enkelt kan skriva i den verkliga filnamnet, använder redaktörens fiffiga Komplettera automatiskt (sida 98)-funktionen. Och när du är klar att skriva filnamnet tryck Control+J igen och markören hoppar till positionen i mellan <a> etiketter så att du enkelt kan skriva in texten för länken. Snuttsystemet i editorn är mycket sofistikerad, finns det några inbyggda snuttar och du kan skapa din egen för att passa din redigeringsstil. Följande diskussion av de inbyggda snuttar bör hjälpa illustrera kraften i snuttsystemet. Observera: Du kan också använda snuttar i textinmatningsfält i Sök och ersätt-panelen, dock platshållare (med Control+J för att hoppa runt) kommer inte att fungera. Inbyggda snuttar De inbyggda snuttar beskrivs nedan. Observera att du kan åsidosätta dem genom att skapa egna snuttar med samma textutlösare. Infogar fyllnadstext [Lorem] Den första inbyggda snutten (kodavsnitt), och det enklaste används för att infoga fyll text i ett dokument. Fyllnadstexten är hämtad från De finibus bonorum et malorum 31 ett filosofiskt verk av Cicero (översatt till engelska). För att använda den helt enkelt skriva Lorem i en HTML-fil och tryck Control+J. Det kommer att ersättas av ett par stycken av fyllnadstext Kapitel 1. Avsnitten

99 Definitionen av denna snutt är mycket enkel, textutlösaren definieras som Lorem och mallen definieras helt enkelt som den bokstav texten som ska infogas. Du kan enkelt anpassa den för att använda din favorit form av fyllnadstext. Infoga en självstängande HTML-etikett [<>] Nu ska vi titta på ett enkelt exempel på den kraftfulla begreppet platshållare. Säg att du vill infoga självstängande etiketten <hr/>. Skriv bara <> och tryck Control+J så kommer editorn expandera snutten till: < /> Här, representerar symbolen den aktuella markörpositionen. Du kan sedan skriva hr och trycka Control+J för att flytta markören till efter slutet av etiketten. Denna snutt definieras som: Trigger: <> Template: <$1/>$2 Platshållare är helt enkelt dollar ($)-tecken följt av ett nummer. När snutten utökas genom att trycka Control+J är markören placerad vid den första platshållaren (platshållaren med det lägsta numret). När du trycker på Control+J igen markören hoppar till nästa platshållare (platshållaren med nästa högre nummer). Infoga en HTML-länketikett [<a] HTML-länketiketter delar alla en gemensam struktur. De har ett href-attribut och lite text mellan start- och slutetiketten. En snutt att skriva in dem mer effektiva kommer att introducera oss till några fler funktioner i platshållare. För att använda denna textsnutt, skriv helt enkelt <a och tryck Control+J. Editorn kommer att utöka detta till: <a href="filename "></a> Inte bara det, kommer ordet filnamn väljas, med markören placeras över det, så att du enkelt kan skriva i den verkliga filnamnet, använder editorns fiffiga Komplettera automatiskt (sida 98)-funktionen. Och när du är klar att skriva filnamnet trycker Control+J igen och markören hoppar till positionen i mellan <a> etiketter så att du enkelt kan skriva in texten för länken. När du är klar skriver texten, tryck Control+J igen för att hoppa till positionen efter den avslutande etiketten. Denna snutten definieras som: Trigger: <a Template: <a href="${1:filename}">${2*}</a>$3 Det finns ett par nya funktioner här. Först $1 platshållare har blivit mer komplex. Den innehåller nu en del standardtext (ordet filename Om en platshållare innehåller standardtext, är standardtexten i stället för platshållaren när snutten utvidgas. Även när du hoppar till en platshållare med standardtext som använder Control+J, väljs standardtexten. På detta sätt kan du använda standardtexten som en påminnelse till dig att fylla i viktiga delar av mallen. Du kan ange standardtext för en platshållare genom att använda syntaxen: ${<number>:default text}. Den andra nyheten är att den andra platshållaren har en asterisk efter det (${2*}). Det innebär att all text som valdes innan expansion ersätts mallen av platshållaren. För att se detta i handling, markera lite text i editorn, tryck Control+J, typ <a och tryck Control+J igen, mallen kommer att utökas till: <a href="filename">whatever text you selected</a> Infoga en HTML-bildetikett [<i] Detta är mycket likt att infoga en HTML-länk, som vi såg ovan. Det gör att du snabbt kan mata in en <img src=filenameält=description"/>-etikett och hoppa mellan src och alt attribut: Trigger: <i Template: <img src="${1:filename}" alt="${2*:description}" />$ Redigera e-böcker 95

100 Infoga en godtycklig HTML-etikett [<<] Detta gör att du kan sätta in en godtycklig full HTML-etikett (eller linda in tidigare valda texten i etiketten). För att använda den, skriv helt enkelt << och tryck Control+J. Editorn kommer att expandera den till: < ></> Skriv etikettnamnet, till exempel: span och tryck Control+J, som kommer att resultera i: <span> </span> Du kommer att notera att den avslutande etiketten automatiskt har fyllts med span. Detta uppnås med ännu ett annat särdrag av platshållare, spegling. Spegling betyder helt enkelt att om du anger provplatshållaren mer än en gång i en mall, den andra och alla senare positioner kommer automatiskt fyllas i med vad du skriver i det första positionen, när du trycker Control+J. Definitionen för denna snutten är: Trigger: << Template: <$1>${2*}</$1>$3 Som ni kan se, har den första platshållaren ($1) specificerats två gånger, andra gången i den avslutande etiketten, som helt enkelt kommer att kopiera vad du skriver i öppningsetiketten. Infoga en godtycklig HTML-etikett med ett klassattribut [<c] Detta är mycket likt infogningen av godtycklig etikett i exemplet ovan, förutom att det förutsätter att du vill ange en klass för etiketten: Trigger: <c Template: <$1 class="${2:classname}">${3*}</$1>$4 Detta gör att du kan först skriva etikettnamnet, tryck Control+J, skriv klassnamnet, tryck Control+J, skriv innehållet i etiketten och tryck Control+J en sista gång för att hoppa ur etiketten. Den avslutande etiketten kommer att automatiskt fyllas. Skapa dina egna snuttar Snuttar verkligen lysa eftersom du kan skapa dina egna för att passa din redigeringsstil. För att skapa egna snuttar gå till Redigera->Inställningar->Editorinställningar->Hantera snuttar i editorn. Detta kommer att ta fram en lättanvänd dialogruta för att hjälpa dig att skapa dina egna snuttar. Klicka bara på Lägg snuttar-knappen och du kommer att se en dialogruta som ser ut: 96 Kapitel 1. Avsnitten

101 Först ge din snutt ett namn, något beskrivande, för att hjälpa till att identifiera (text)snutten i framtiden. Ange sedan textutlösare. En textutlösare är helt enkelt den text som du måste skriva i editorn innan du trycker Control+J för att expandera snutten. Ange sedan snuttmallen. Du bör börja med en av exemplet ovan och ändra det för att passa dina behov. Slutligen, ange vilka filtyper du vill att snutten ska vara aktiv för. På så sätt kan du ha flera snuttar med samma textutlösare som fungerar olika i olika filtyper. Nästa steg är att testa din nyskapade snutt. Använd Test-rutan längst ner. Skriv in textutlösaren och tryck Control+J att utöka snutten och hoppa mellan platshållarna. Rapportverktyget Editorn har ett trevligt *Rapport*verktyg (via: guilabel: Verktyg->Reporter) som visar sammanfattningar av filer, bilder, ord, tecken och stilar som används i boken. Varje rad i rapporten är hyperlänkad. Dubbel klicka på en linje hoppar till den plats i boken där objektet används eller definieras (i förekommande fall) Till exempel i Länkar vy kan du dubbelklicka poster på Källa kolumnen för att hoppa till där länken är definierad och poster i Mål kolumnen för att hoppa till där länken pekar Redigera e-böcker 97

102 1.5.9 Speciella funktioner i kodeditorn calibres HTML-editor är mycket kraftfull. Den har många funktioner som gör redigering av HTML (och CSS) lättare. Syntaxmarkering HTML-editorn har mycket sofistikerad syntaxmarkering. Funktioner inkluderar: Texten inne i fet, kursiv och rubriketiketter görs fet/kursiv När du flyttar markören genom HTML, är passande HTML-etikettpar markerade Felaktig HTML markeras med en röd understrykning Stavfel i texten inuti HTML-etiketter och attribut som titel är markerade. Stavningskontrollen är språkmedveten, baserat på värdet av lang-attributet av den aktuella etiketten och det övergripande bokspråket. CSS inbäddade inuti <style>-etiketter är markerad Specialtecken som kan vara svåra att skilja såsom icke-brytande mellanslag, olika typer av bindestreck etc. är markerade. Länkar till andra filer i <a>-etiketter, <img>- och <link>-etiketter har alla filnamnen markerade. Om filnamnet de pekar på finns inte, markeras filnamnet med en röd understrykning. Sammanhangsberoende hjälp Du kan högerklicka på ett HTML-etikettnamn eller ett CSS-egenskapsnamn för att få hjälp för den etiketten eller egenskapen. Du kan också hålla nere Ctrl-tangenten och klicka på godtyckligt filnamn inuti en länketikett för att automatiskt öppna filen i editorn. Komplettera automatiskt När du redigerar en e-bok, är en av de mest tråkiga uppgifter att skapa länkar till andra filer inne i boken, eller till CSS-mallar eller bilder. Du måste räkna ut rätt filnamn och relativ sökväg till filen. Editorn kompletterar automatiskt för att göra det lättare. 98 Kapitel 1. Avsnitten

103 När du skriver ett filnamn, tar editorn automatiskt fram förslag. Använd bara Tab-tangenten för att välja rätt filnamn. Editorn erbjuder även förslag på länkar som pekar på ett ankare inuti en annan HTML-fil. När du har skrivit tecknet #, kommer editorn visa en lista över alla ankare i målfilen, med en liten snutt av text för att hjälpa dig välja rätt ankare. Observera att till skillnad från de flesta övriga system med automatisk komplettering, använder editorns kompletteringssystem delsekvensträffar. Detta innebär att du behöver bara skriva bara två eller tre tecken från någonstans i filnamnet att slutföra filnamnet. Till exempel, låt säga att du önskar filnamnet../images/arrow1.png, kan du helt enkelt skriva ia1 och tryck Tab för att slutföra filnamn. När du söker efter träffar, prioriterar kompletteringssystemet tecken som är i början av ett ord, eller omedelbart efter en sökvägsavskiljare. När man vänjer sig detta system, finner du det sparar mycket tid och ansträngning. Snuttar calibre editorn stöder snuttar. En snutt är ett stycke text som antingen återanvänds ofta eller innehåller mycket överflödig text. Editorn kan du infoga en snutt med endast ett fåtal knapptryckningar. De snuttar är mycket kraftfull, med många funktioner, som platshållare som du kan hoppa mellan, automatisk spegling av upprepad text och så vidare. För mer information se Snuttar (sida 94). 1.6 Jämföra e-böcker calibre innehåller en integrerad e-boks jämförelseverktyg som kan användas för att se vad som har förändrats inuti en e-bok efter redigering eller konvertera den. Det kan jämföra böcker i epub-och AZW3 format. För att använda den, antingen öppna e-bok i verktyget för Redigera e-böcker (sida 70) och sedan klicka på Fil->Jämför med annan bok eller använd Bokinformation (sida 16)-panelen. Om du gör en konvertering från EPUB till EPUB, kommer den ursprungliga EPUB-filen sparas som ORIGINAL_EPUB. Högerklicka på ORIGINAL_EPUB posten i Bokdetaljpanelen och välj Jämför med EPUB-format. Jämförelseverktyg som öppnas kommer att se ut som skärmdumpen nedan. Det visas skillnader i text, färger och bilder i de valda böckerna Jämföra e-böcker 99

104 1.6.1 Förstå jämförelsevyn Som framgår av skärmdumpen ovan, jämförelse vyn visar skillnaderna mellan de två böcker sida vid sida. Endast skillnaderna, med några rader av sammanhang runt dem visas. Detta gör det enkelt att snabbt se bara vad som har ändrats i ett stort dokument som en bok. Tillagd text visas med en grön bakgrund, borttagen text med en röd bakgrund och ändrad text med en blå bakgrund. Radnummer för all text som förändrats visas på sidorna, vilket gör det lätt att gå till en viss förändring i editorn. När du öppnar jämförelseverktyget inifrån editorn, kan du också dubbelklicka på en rad i den högra panelen för att gå till den raden i editorn automatiskt. En användbar teknik när man jämför böcker är att tala om för jämförelseverktyget för att försköna de text-och Stil-filer innan du beräknar skillnader. Detta kan ofta resultera i renare och lättare att följa skillnader. Det gör du genom att klicka på Alternativ-knappen i det nedre högra och välj Försköna filer innan man jämför dem. Observera att förskönande kan 100 Kapitel 1. Avsnitten

105 ibland ha oönskade effekter, eftersom det kan orsaka ogiltig uppmärkning ändras för att göra det giltigt. Du kan också ändra antalet rader av sammanhang visade runt skillnader via Inställningar knappen. Du kan söka efter all text i skillnaderna via sökfältet längst ner. Du måste ange vilken panel för att söka, Vänster eller Höger Hur att starta jämförelseverktyget Jämförelse verktyget är mest användbart när du har två versioner av samma bok och du vill se vad som skiljer mellan dem. För detta ändamål finns det flera sätt att starta verktyget. Jämför två e bokfiler Öppna den första filen i Redigera e-böcker (sida 70) verktyget. Klicka nu på Fil->Jämför med en annan bok och välj den andra filen (det måste vara i samma format som den första). Jämförelsen vyn öppnas med filen som redigeras till höger och den andra filen till vänster. Jämför ORIGINAL_FMT med FMT När du gör en omvandling i calibre från en FMT till sig själv, den ursprungliga filen sparas som ORIGINAL_FMT. Du kan se vad som har ändrats genom omvandling, genom att högerklicka på ORIGINAL_FMT posten i Bokinformation (sida 16) panelen i huvud calibre fönstret och välj Jämför med FMT. Jämförelsevyn öppnas med ORIGINAL_FMT till vänster och FMT till höger. Jämför en kontrollpunkt för det aktuella tillståndet av boken under redigering Redigera e-böcker (sida 70) verktyget har en mycket användbar funktion, som kallas Kontrollpunkt (sida 81). Detta gör att du kan spara det aktuella tillståndet i boken som en namngiven kontrollpunkt, som du kan återgå till, om du inte gillar de ändringar du har gjort sedan skapa kontrollpunkten. Kontrollpunkter skapas också automatiskt när du utför olika automatiska åtgärder i editorn. Du kan se listan med kontrollpunkter genom att gå till Visa->Kontrollpunkter och använd sedan Jämför knappen för att jämföra boken på den valda kontrollpunkten med det aktuella läget. Jämförelsen Verktyget visar kontrollpunkt till vänster och det aktuella läget till höger. 1.7 Redigera e-boks metadata Innehåll Redigera metadata av en bok i taget (sida 102) Nedladdning av metadata (sida 102) Hantering bokformat (sida 102) Allt om omslag (sida 102) Redigera metadata för flera böcker på en gång (sida 102) Sök och ersätt (sida 103) Massnerladdning av metadata (sida 104) E-böcker finns i alla former och storlekar, och oftare än inte, (saker som titel / författare / serie / utgivare) är ofullständig eller felaktig sin metadata. Det enklaste sättet att ändra metadata i calibre är att helt enkelt dubbelklicka på en post och skriv rätt ersättare. För mer sofistikerade, power redigering använda redigeringsmetadataverktyg som diskuteras nedan Redigera e-boks metadata 101

106 1.7.1 Redigera metadata av en bok i taget Klicka på den bok du vill redigera och klicka sedan på Redigera metadata-knappen eller tryck på E nyckel. En dialogruta öppnas som låter dig redigera alla aspekter av metadata. Den har olika funktioner för att göra redigeringen snabbare och effektivare. En lista över de vanligaste tips: Du kan klicka knappen mellan titel och författare för att växla dem automatiskt. Du kan klicka på knappen bredvid författaren sorterings för att ha calibre automatiskt fylla i med hjälp av sorteringsvärden som lagrats med varje upphovsman. Använd Hantera Författare dialog att se och ändra författarnas sorteringsvärden. Denna dialogruta kan öppnas genom att klicka och hålla in knappen bredvid författaren sortera. Du kan klicka på knappen bredvid etiketter att använda Etikett Editor för att hantera etiketter i samband med boken. ISBN rutan kommer att ha en röd bakgrund, om du anger ett ogiltigt ISBN. Det kommer att vara grönt för giltiga ISBN Författaren sorterings rutan blir röd om författaren sorterings värdet skiljer sig från det som calibre tycker att det borde vara. Nedladdning av metadata Den trevligaste funktionen i dialogrutan redigera metadata är dess förmåga att automatiskt fylla i många metadatafält genom att få metadata från olika webbplatser. För närvarande calibre använder isbndb.com, Google Books, Amazon och bibliotek Thing. Metadata nedladdning kan fylla i titel, författare, serier, etiketter, betyg, beskrivning och ISBN för dig. För att använda nedladdning, fyll i titel och författare och tryck Hämta metadata. calibre kommer att visa dig en lista på böcker som närmast passar titel och författare. Om du fyller i ISBN-fältet först, kommer det att användas i stället för titeln och författare. Om inga passade träffar hittas, försök att göra din sökning lite mindre specifik genom att ta med endast några nyckelord i titeln och bara författarens efternamn. Hantering bokformat I calibre, kan en enda bokpost har många olika format i samband med det. Till exempel kan du ha fått de samlade verk av Shakespeare i EPUB-format och senare konverterade den till MOBI att läsa på din Kindle. calibre hanterar automatiskt flera format för dig. I Tillgängliga format i dialogrutan Redigera metadata, kan du hantera dessa format. Du kan lägga till ett nytt format, ta bort ett befintligt format och även be calibre för att ange metadata och täcka för boken posten från metadata i ett av formaten. Allt om omslag Du kan be calibre ladda ner bokomslag för dig, förutsatt att boken har en känd ISBN. Alternativt kan du ange en fil på din dator som ska användas som omslag. calibre kan även generera ett standardomslag med grundläggande metadata om det för dig. Du kan dra och släppa bilder på locket för att byta den och även högerklicka för att kopiera / klistra in omslagsbilder. Dessutom finns det en knapp för att automatiskt justera gränser från omslag, om din omslagsbild har en ful kant Redigera metadata för flera böcker på en gång Välj först de böcker du vill redigera genom att hålla ner Ctrl eller Skift och klicka på dem. Om du väljer mer än en bok, klicka på Redigera metadata-knappen kommer att orsaka en ny Mass metadata redigeringsdialogruta för att öppna. 102 Kapitel 1. Avsnitten

107 Med den här dialogrutan kan du snabbt ställa författaren /förlag/betyg/etikett/serie etc av ett gäng böcker till samma värde. Detta är särskilt användbart om du just har importerat ett antal böcker som har någon metadata gemensamt. Denna dialog är mycket kraftfullt, till exempel, har det en Sök och ersätt flik som du kan använda för att utföra massoperationer på metadata och med kopiera metadata från en kolumn till en annan. Normala redigeringsdialogen för metadata har också knapparna Nästa och Föregående som du kan använda för att redigera metadata för flera böcker efter varandra. Sök och ersätt Massmetadata redigeringsdialogrutan låter dig utföra godtyckligt kraftfulla sök och ersätt operationer på de valda böckerna. Som standard använder en enkel textsökning och ersätta, men det stöder också reguljära uttryck. För mer information om reguljära uttryck finns Allt om att använda reguljära uttryck i calibre (sida 162). Som nämnts ovan finns det två sök- och ersättningslägen: teckenpassning och reguljära uttryck. Teckenpassning kommer att se i Sök-fältet du väljer för de tecken du skriver i söka efter -rutan och ersätta dessa tecken med vad du skriver i ersätta med-rutan. Varje förekomst av söktecknen på området kommer att ersättas. Antag till exempel fältet som sökte innehåller en len sten. om du söker på en ersättas med HELLO, då resultatet kommer att bli HELLO lhello sthello. Om fältet du söker på är ett multi-fält som etiketter, då varje etikett behandlas separat. Till exempel, om dina etiketter innehåller Skräck, Kuslig, sökuttrycket r kommer inte passa mot något eftersom uttrycket först kommer att tillämpas på Skräck och sedan till Kuslig. Om du vill sökning ska vara skifteslägeokänslig, bocka Case sensitive rutan. Du kan låta calibre ändra det gäller resultatet (information efter det att ersättning har hänt) genom att välja en av funktionerna från Verkställ funktion efter ersätta-rutan. Möjliga åtgärder är: Lower case ändra alla tecken i fältet till gemener Upper case ändra alla tecken i fältet till versaler Title case Varje ord med bara versaler. Den Din test-rutan finns för dig att skriva in text för att kontrollera att sök/ersätt gör vad du vill. I de flesta fall kommer bokens provrutorna att räcka, men det är möjligt att det finns ett fall som du vill kontrollera som inte visas i dessa rutor. Skriv in det målet i Din test. Reguljära uttrycksläget har vissa skillnader från teckenläge, förutom (naturligtvis) användning av reguljära uttryck. Den första är att funktionerna tillämpas på de delar av strängen som passar mot söksträngen, inte hela fältet. Det andra är att funktionerna gäller ersättningssträngen, inte hela fältet. Den tredje och viktigaste är att ersättningssträngen kan hänvisa till delar av söksträngen med bakåtreferenser. En bakåtreferens är \\n där n är ett heltal som hänvisar till den n:te parentesgrupp i sökuttrycket. Till exempel, givet samma exempel som ovan, en dålig katt, ett sökuttryck en (...) (...), och ersätter uttrycket en \2 \1, resultatet kommer vara en katt dålig. Se Allt om att använda reguljära uttryck i calibre (sida 162) för mer information om bakåtreferenser. Ett användbart mönster: anta att du vill ändra skiftläge för ett helt fält. Det enklaste sättet att göra detta är att använda teckenläge, men låt oss vidare anta att du vill använda reguljära uttrycksläge. Sökningen uttrycket ska vara (.*) ersättningsuttrycket ska vara \1 och önskad förändringsfunktion bör väljas. Slutligen, i reguljära uttrycksläget kan du kopiera värden från ett fält till ett annat. Helt enkelt göra fältets källa och destination annorlunda. Kopian kan ersätta destinationsfältet lägger du till fältet (lägg till i början), eller lägga till fältet (lägg till på slutet). Den &#x27använd kommatecken&#x27 kryssrutan berättar calibre lägga till (eller inte) lägga till ett kommatecken mellan texten och destinationsfältet i lägg till före och efter lägen. Om destinationen är flera (t.ex. etiketter), kan du inte avmarkera rutan Sök och ersätt görs efter alla andra metadataändringar i de andra flikarna tillämpas. Detta kan leda till en viss förvirring, eftersom testrutorna visar informationen innan andra förändringar, men åtgärden kommer att tillämpas efter 1.7. Redigera e-boks metadata 103

108 övriga förändringar. Om du har några tvivel om vad som kommer att hända, blanda inte ihop sök/ersätt med andra förändringar. Massnerladdning av metadata Om du vill hämta metadata för flera böcker på en gång, högerklickar du på Redigera metadata-knappen och välj Hämta metadata. Du kan välja att hämta endast metadata, bara omslag, eller båda. 1.8 Vanliga frågor och svar Innehåll E-bok formatkonvertering (sida 104) Enhetsintergration (sida 107) Bibliotekshantering (sida 114) Diverse (sida 119) E-bok formatkonvertering Innehåll Vilka format stöder calibre konvertering till/från? (sida 104) Vilka är de bästa källformaten att konvertera? (sida 105) Jag konverterade en PDF-fil, men resultatet har diverse problem? (sida 105) Hur konverterar jag min fil som innehåller icke-engelska tecken, eller typografiska citattecken? (sida 105) Vad är det med innehållsförteckningen i MOBI-filer? (sida 105) Omslagen till mina MOBI-filer har slutat dyka upp i Kindle för PC / Kindle for Android / ipad etc. (sida 106) Hur konverterar jag en samling HTML-filer i en viss ordning? (sida 106) EPUB som producerades med calibre är inte giltig? (sida 107) Hur använder jag en del av de avancerade funktionerna i omvandlingsverktyget? (sida 107) Vilka format stöder calibre konvertering till/från? calibre stöder konvertering av många indataformat till många utdataformat. Den kan konvertera alla indataformat i följande list, till alla utdataformat. Indataformat: AZW, AZW3, AZW4, CBZ, CBR, CBC, CHM, DJVU, DOCX, EPUB, FB2, HTML, HTMLZ, LIT, LRF, MOBI, ODT, PDF, PRC, PDB, PML, RB, RTF, SNB, TCR, TXT, TXTZ Utdataformat: AZW3, EPUB, DOCX, FB2, HTMLZ, OEB, LIT, LRF, MOBI, PDB, PMLZ, RB, PDF, RTF, SNB, TCR, TXT, TXTZ, ZIP Observera: PRC är ett generiskt format calibre stöder PRC-filer med TextRead och MOBIBook rubriker. PDB är också en generisk format. calibre stöder läsplatta, Plucker, PML och ztxt preliminära filer. DjVu stöd endast för att konvertera DjVu-filer som innehåller inbäddade text. Dessa är oftast genereras av OCR-program. MOBI böcker 104 Kapitel 1. Avsnitten

109 kan vara av två typer Mobi6 och KF8. calibre stöder båda fullt ut. MOBI filer har ofta.azw eller.azw3 filändelser. Docx-filer från Microsoft Word 2007 och nyare stöds. Vilka är de bästa källformaten att konvertera? I fallande preferens: LIT, MOBI, AZW, EPUB, AZW3, FB2, DOCX, HTML, PRC, ODT, RTF, PDB, TXT, PDF Jag konverterade en PDF-fil, men resultatet har diverse problem? PDF är ett hemskt format att konvertera från. För en lista av diverse problem du kommer stöta på vid PDF-konvertering, se: Konvertera PDF-dokument (sida 67). Hur konverterar jag min fil som innehåller icke-engelska tecken, eller typografiska citattecken? Det finns två aspekter på detta problem: 1. Medveten om kodningen av källfilen: calibre försöker gissa vad teckenkodning källfilerna använder, men ofta är detta omöjligt, så du måste tala om vad för kodning att använda. Detta kan göras i det grafiska gränssnittet via Teckenkodning för indata-fältet i Utseende i dialogrutan omvandlingen. Kommandoradsverktyg har alla ett: alternativ: input-encoding alternativ. 2. När du lägger till HTML-filer till calibre, kan du behöva tala om för calibre vad filerna är kodade i. För att göra detta går du till Inställningar->Tillägg->Filtyp tlllägg och anpassa HTML2Zip-tlllägget, berätta för det vad dina HTML-filer är kodade i. Nu när du lägger HTML-filer till calibre kommer de att behandlas på rätt sätt. HTML-filer från olika källor har ofta olika kodningar, så du kan behöva ändra denna inställning upprepade gånger. En gemensam kodning för många filer från webben är cp1252 och jag föreslår att du prova det först. Observera att när du konverterar HTML-filer, lämna indata kodningsinställningen ovan nämnda tomt. Detta beror på att HTML2Zip-tillägg automatiskt konverterar de HTML-filer till en standardkodning (UTF-8). Vad är det med innehållsförteckningen i MOBI-filer? Det första man måste inse är att de flesta e-böcker har två innehållsförteckningar. Den ena är den traditionella innehållsförteckningen, som innehållsförteckningen du hittar i pappersboken. Denna innehållsförteckning är en del av huvuddokumentflödet och kan titulera hur du vill. Detta innehållsförteckningen kallas innehålls innehållsförteckningen. Sedan är det metadatats innehållsförteckningen. En metadatas innehållsförteckningen är en innehållsförteckning som inte är en del av bokens text och vanligtvis nås av någon speciell knapp på en läsare. Till exempel i calibre läsare använder du Visa innehållsförteckningen för att se den här innehållsförteckningen. Denna innehållsförteckningen kan inte anpassas av bokens skapare. Hur det representeras är upp till läsarprogrammet. I MOBI-formatet är situationen lite förvirrad. Detta beror på att MOBI-format, ensamt bland vanliga e-bokformat, inte har ordentlig stöd för ett metadatainnehållsförteckning. En MOBI-bok simulerar närvaron av en metadatainnehållsförteckning genom att sätta en extra innehållsförteckning i slutet av boken. När du klickar på Gå Innehållsförteckning på din Kindle, är det denna extra Innehållsförteckning Kindle tar. Nu kan det väl verka för dig att MOBI bok har två identiska innehållsförteckningar. Kom ihåg att en är semantiskt ett innehåll innehållsförteckningen och den andra är en metadatainnehållsförteckningen, även om båda kan ha exakt samma poster och ser likadana ut. Ena kan nås direkt från Kindle menyer, den andra inte kan Vanliga frågor och svar 105

110 Vid konvertering till MOBI, upptäcker Calibre metadatainnehållsförteckning i inmatningsdokumentet och genererar en slut-på-fil innehållsförteckning i utdata MOBI-filen. Du kan stänga av detta med ett alternativ i MOBIutdatainställningarna. Du kan också berätta för Calibre att sätta den i början eller slutet av boken via ett alternativ i MOBI -utdatainställningarna. Kom ihåg detta innehållsförteckning är semantiskt en metadatainnehållsförteckning, på annat MOBI-format kan det inte vara en del av texten. Det faktum att det är en del av texten i MOBI är en olycka som orsakats av begränsningar i MOBI. Om du vill ha en innehållsförteckning på en viss plats i dokumentets text, skapa en efter hand. Så vi rekommenderar att du lämnar standardinställning som den är, det vill säga med metadatainnehållsförteckningen i slutet av boken. Observera också att om du inaktiverar generering av slut-på-fil innehållsförteckning kanske den resulterande MOBI-filen inte fungerar korrekt på en Kindle, eftersom Kindle använder metadatainnehållsförteckningen för många saker, bland annat sidväxlingsfunktionen. Om du har en handredigerad innehållsförteckning i inmatningsdokumentet kan du använda alternativen innehållsförteckningsupptäckt i Calibre för att automatiskt generera metadatainnehållsförteckning från den. Se omvandlingsavsnittet i användarhandboken för mer information om hur du använder de här alternativen. Slutligen uppmanar jag dig att dumpa innehållet iinnehållsförteckningen och bara har en metadatainnehållsförteckningen i dina e-böcker. Metadatainnehållsförteckningen kommer att ge människor som läser dina e-böcker en mycket överlägsen navigeringserfarenhet (utom på Kindle, där de är i princip samma som en innehållsförteckningen). Observera: Den nyare AZW3-formatet har ordentligt stöd för metadatainnehållsförteckning. Dock tenderar Kindle firmware inte fungerar om du avaktiverar generationen av slut-påfil-radbaserad innehållsförteckning. Så det rekommenderas att du lämnar den genererade innehållsförteckningen i fred. Om du skapar en AZW3-fil med metadatainnehållsförteckning och inget slut-på-fil som genererad innehållsförteckning, kommer en del funktioner på Kindle inte fungerar, till exempel sidväxlingsfunktionen. Omslagen till mina MOBI-filer har slutat dyka upp i Kindle för PC / Kindle for Android / ipad etc. Detta orsakas av en bugg i Amazonas programmet. Du kan lösa det genom att gå till Inställningar->Alternativ för utdata-> MOBI utdata och ställa in Aktivera delning av bokinnehåll alternativet. Om du kodar om en tidigare konverterade bok, måste du också aktivera alternativet i omvandlingsdialogrutan för att enskild bok (som per bok konverteringsinställningar sparas och har företräde). Observera att detta kommer att innebära att den genererade MOBI kommer att dyka upp i personliga dokument i stället för böcker på Kindle Fire och Amazon Whispersync kommer inte att fungera, men omslagen kommer. Det är ditt val vilken funktion som är viktigare för dig. Jag uppmuntrar dig att kontakta Amazon och be dem att åtgärda detta fel. Felet i Amazons mjukvara är att när du skriver en MOBI-fil på en Kindle, om inte filen är markerad som en personligt dokument, förutsätter Amazon att du köpte boken från dem och försöker hämta omslagsminiatyren för den från deras servrar. När hämtningen misslyckas, vägrar den att gå tillbaka till omslaget som definieras i MOBI-filen. Detta är sannolikt avsiktligt från Amazons sida att försöka tvinga författare att endast sälja genom dem. Med andra ord, Kindle visar endast omslag av böcker markerade som personliga dokument eller av böcker som köps direkt från Amazon. Om du skickar en MOBI-fil till en e-ink Kindle med calibre med hjälp av en USB-anslutning, calibre arbetar runt denna Amazon bugg genom att ladda upp ett omslag själv. Men denna lösning är bara möjligt när du använder en USB-anslutning och skickar med calibre. Observera att om du skickar via e-post, kommer Amazon automatiskt markera MOBI-filen som ett personligt dokument och omslaget kommer att fungera, men boken kommer att dyka upp i personliga dokument. Hur konverterar jag en samling HTML-filer i en viss ordning? För att omvandla en samling HTML-filer i en viss ordning, måste du skapa en innehållsförteckningsfil. Det vill säga, en annan HTML-fil som innehåller länkar till de andra filerna i önskad ordning. En sådan fil ser ut som: 106 Kapitel 1. Avsnitten

111 <html> <body> <h1>table of Contents</h1> <p style="text-indent:0pt"> <a href="file1.html">first File</a><br/> <a href="file2.html">second File</a><br/>... </p> </body> </html> Sedan är det bara lägga till den här HTML-filen till grafiska gränssnittet och använd knappen Konvertera för att skapa din e-bok. Du kan använda alternativet i innehållsförteckningsavsnittet i dialogrutan för att styra omvandlingen hur innehållsförteckningen genereras. Observera: Som standard när du lägger till HTML-filer, följer calibre länkar i filerna i djup först ordning. Detta innebär att om filen A.html länkarna för att B.html och C.html och D.html, men B.html också länkar till D.html, då filerna kommer att vara i ordning a.html, B.html, D Html, C.html. Om du istället vill att för att bli a.html, B.html, C.html, D.html då måste du berätta calibre att lägga dina filer i bredden först ordning. Gör detta genom att gå till Inställningar->Tillägg och anpassa HTML till ZIP-tillägg. EPUB som producerades med calibre är inte giltig? calibre garanterar inte att en EPUB som produceras är giltigt. Den enda garantin det gör är att om du matar den giltig XHTML CSS 2.1 matar den ut en giltig EPUB. calibre försöker hårt för att säkerställa att EPUB den producerar faktiskt fungerar som det är tänkt på en mängd olika enheter, ett mål som inte är förenligt med att producera giltiga EPUBs, och en som är mycket viktigare att de allra flesta av sina användare. Om du behöver ett verktyg som alltid ger tillförlitliga EPUB är calibre inte för dig. Detta innebär, att om du vill skicka en calibre som produceras EPUB till en online-butik som använder en EPUB giltighetskontroller, måste du se till att EPUB är giltig, calibre kommer inte göra det åt dig - med andra ord måste du mata calibre med giltig XHTML + CSS som ingångsdokument. Hur använder jag en del av de avancerade funktionerna i omvandlingsverktyget? Du kan få hjälp av någon enskild egenskap hos omvandlarna genom att föra musen över den i GUI eller köra ebook-convert dummy.html.epub -h vid en terminal. Ett bra ställe att börja är att titta på följande demo-fil som visar en del av de avancerade funktioner html-demo.zip Enhetsintergration Vanliga frågor och svar 107

112 Innehåll Vilken enhet stöder calibre? (sida 108) Hur kan jag hjälpa till för att få stöd för min enhet i calibre? (sida 108) Enheten upptäcks inte av calibre? (sida 108) Min enhet är icke-standard eller ovanligt. Vad kan jag göra för att ansluta till den? (sida 109) Hur hanterar calibre samlingar på min SONY-läsare? (sida 109) Kan jag använda både calibre och SONY programvara för att hantera min läsare? (sida 110) Hur använder jag calibre med min ipad / iphone / ipod touch? (sida 110) Hur använder jag calibre med min Android-telefon / surfplatta eller Kindle Fire HD? (sida 111) Kan jag komma åt mina calibre-böcker med hjälp av webbläsaren i min Kindle eller annan läsenhet? (sida 112) Jag får felmeddelandet Det gick inte att starta mediaservern: Port 8080 inte ledig ? (sida 113) Jag kan inte skicka e-post med hjälp av calibre? (sida 113) Min enhet är monterat skrivskyddad i linux, så calibre kan inte ansluta till det? (sida 113) Varför stöder calibre inte samlingar på Kindle eller hyllor på Nook? (sida 114) Jag får ett felmeddelande när jag försöker använda calibre med min Kobo Touch/Glo/etc.? (sida 114) Jag överförde några böcker till min Kindle använder calibre och de inte dyker upp? (sida 114) Vilken enhet stöder calibre? calibre kan direkt ansluta till alla stora (och de flesta av de mindre) e-boksläsenheter, smarta mobiler, surfplattor, etc. Dessutom används Anslut till mapp-funktionen kan du använda den med någon e-boksläsare som exporterar sig som en USB-disk. Du kan även ansluta till Apple-enheter (via itunes), med hjälp av Anslut till itunes-funktionen. Hur kan jag hjälpa till för att få stöd för min enhet i calibre? Om enheten visas som en USB-disk för operativsystemet, att lägga till stöd för calibre är mycket enkelt. Vi behöver bara lite information från dig: Komplett lista över e-bokformat som enheten stöder. Finns det en särskild katalog på enheten där alla e-bokfiler ska placeras? Också om inte enheten upptäcker filer som placeras i underkataloger? Vi behöver också information om enheten som calibre samlar automatiskt. Först, om enheten har stöd för SDkort, sätt in dem. Anslut sedan enheten till datorn. I calibre gå till Inställningar->Diverse och klicka på knappen Felsök enhetsupptäckt. Detta kommer att skapa en del felsökningsutskrifter. Kopiera den till en fil och upprepa processen, den här gången med enheten bortkopplad från datorn. Skicka båda de ovanstående utdata till oss med andra uppgifter och vi kommer att skriva en drivrutin för enheten. När du skickar utdata för ett visst operativsystem, kommer stöd för enheten i det operativsystemet visas i nästa version av calibre. För att skicka utdata, öppna en felrapport och fäst utdata till den. Se calibre bugs < _. Enheten upptäcks inte av calibre? Gör så här för att hitta problemet: Se till att du ansluter en enda enhet till datorn åt gången. Använd inte någon annan calibre-stöd enhet som iphone/ipad etc. samtidigt. 108 Kapitel 1. Avsnitten

113 Om du ansluter en Apple idevice (ipad, ipod Touch, iphone), använder du Anslut till itunes -metod i Komma igång instruktioner i Calibre + Apple idevices: Börja här. < _. Se till att du kör den senaste versionen av calibre. Den senaste versionen kan alltid laddas ner från calibres webbplats 33. Du kan se vilken version av calibre du kör genom att titta på den nedersta raden i calibre-huvudfönster. Försäkra ditt operativsystem är att ser enheten. Det vill säga, att enheten ska visa upp i Utforskaren (Windows) eller Finder (i OS X). I calibre, gå till Inställningar->Ignorerade enheter och kolla att din enhet inte ignoreras Om alla dessa åtgärder misslyckas, gå till Inställningar->Diverse och klicka Felsök enhetsdetektion med enheten ansluten och skicka resultatet som en biljett på calibres bug tracker 34. Min enhet är icke-standard eller ovanligt. Vad kan jag göra för att ansluta till den? Förutom Anslut till mapp-funktion finns under Anslut/dela-knappen ger calibre en Användardefineradenhetstillägg som kan användas för att ansluta till en USB-enhet som dyker upp som en hårddisk i operativsystemet. Obs: Windows, måste enheten ha en enhetsbeteckning för calibre ska kunna använda den. Se enhetens tillägg Inställningar->Tillägg->Enhetstillägg-> Användardefinerad och Inställningar->Övrigt->Få informationen för att ställa in användardefinierade enhet för mer information. Observera att om du använder det användardefinierade tillägget för en enhet som normalt upptäcks av en inbyggd calibre-tillägg, måste du stänga av den inbyggda tillägget först, så att din användardefinierade plugin används istället. Hur hanterar calibre samlingar på min SONY-läsare? När calibre ansluter med läsaren, hämtar det alla kollektioner av böcker på läsaren. Samlingarna av vilka böcker är medlemmar visas på enheten. När du skickar en bok till läsaren, kommer calibre lägga boken till samlingar som baseras på metadata för den boken. Som standard kollektioner skapas från etiketter och serier. Du kan styra vilka metadata används genom att gå till Inställningar->Tillägg->Enhetsgränssnitt tillägg och anpassa SONY tillägget för enhetsgränssnitt. Om du tar bort alla värden, kommer calibre inte lägga boken till någon samling. Samlingshantering styrs till stor del av Metadatas hantering alternativet finns på Inställningar->Import/Export- >Skickar böcker till enheter. Om satt till Manual (standard), lämnas hantering av samlingar till användaren; calibre kommer inte att ta bort redan befintliga samlingar för en bok på läsaren när du skicka boken till läsaren, men calibre kommer att lägga boken till samlingar vid behov. För att säkerställa att samlingarna för en bok bygger enbart på aktuell calibre metadata, först ta bort böckerna från läsaren, sedan skicka om böckerna. Du kan redigera samlingar direkt på enhets genom att dubbelklicka eller högerklicka i samlingarna kolumnen. Om Metadata hantering är satt till Endast vid sändning, så kommer calibre att hantera samlingar mer aggressivt. Samlingar byggs exklusivt med calibre-metadata. Skicka en bok till läsaren kommer att korrigera samlingarna för boken så samlingarna exakt passar bokens metadata, vid behov lägga till och ta bort samlingarna. Redigera samlingar på enhetsvisningen är inte tillåtet, eftersom samlingarna som inte finns i metadata kommer att tas bort automatiskt. Om Metadata management är inställd på Automatisk hantering, då kommer calibre att uppdatera metadata och samlingar både när läsaren är ansluten och när böcker skickas. När calibre upptäcker läsaren och genereras en lista över böcker på läsaren kommer den att sända metadata från biblioteket till läsaren för alla böcker på läsaren som finns i biblioteket (På enheten är Sann), lägga till och ta bort böcker från samlingarna som indikeras av metadata och enhetsanpassning. När en bok skickas, korrigerar calibre metadata för den boken, samlingar läggs till och tas bort Vanliga frågor och svar 109

114 Manuell redigering av metadata på enheten är inte tillåtet. Observera att det här alternativet anger att skicka metadata, inte böcker. Bokens filer på läsaren ändras inte. Sammanfattningsvis välj manuell hantering om du vill hantera samlingar själv. Samlingar för en bok kommer aldrig att tas bort av calibre, men kan tas bort av dig genom att redigera på enheten. Välj Endast vid sändning om du vill att calibre ska hantera samlingar när du skickar en bok, lägga böcker till och ta bort böcker från samlingarna som behövs. Välj Automatisk hantering om du vill att calibre ska hålla samlingarna uppdaterade när läsaren är ansluten. Om du använder flera installationer av calibre för att hantera din läsare, då alternativet Automatisk hantering kanske inte är vad du vill. Anslutning av läsaren till ett bibliotek återställer metadata till vad som finns i det biblioteket. Anslutning till andra bibliotek återställer metadata till vad som är i den andra bibliotek. Metadata i böcker som finns i båda biblioteken kommer att hoppa fram och tillbaka. Kan jag använda både calibre och SONY programvara för att hantera min läsare? Ja, du kan använda båda, förutsatt att du inte kör dem samtidigt. Det vill säga, du bör använda följande sekvens: Anslut läsare-> Använd någon av program-> Koppla läsare. Anslut läsare-> Använd den andra program> Koppla läsare. Den bakomliggande orsaken är att läsaren använder en enda fil för att hålla reda på meta information, såsom samlingar, och det skrivs till av både calibre och Sonys programvara när något uppdateras på läsaren. Filen kommer att sparas när läsaren är (säkert) bortkopplad, så att använda det ena eller det andra är säkert om det finns en frånkoppling mellan dem, men om du inte är den typen att komma ihåg detta, så det enkla svaret är att hålla sig till en eller det andra för överföring och bara export / import från / till den andra via datorns hårddisk. Om du behöver återställa metadata på grund av problem som orsakas av att använda både på samma gång, i så fall bara radera media.xml filen på läsaren med hjälp av datorns filhanterare och det kommer att återskapas efter frånkoppling. Med de senaste läsariterationer, SONY, i all sin vishet beslutat att försöka tvinga dig att använda deras programvara. Om du installerar det, auto-startar det när du ansluter läsaren. Om du inte vill avinstallera det helt och hållet, det finns ett par knep du kan använda. Det enklaste är att helt enkelt byta namn på körbar fil som startar biblioteksprogrammet. Mer i detalj i forumen < _. Hur använder jag calibre med min ipad / iphone / ipod touch? Över luftsnitt Det enklaste sättet att bläddra i din calibre-samling på din Apple-enhet (ipad / iphone / ipod) är att använda calibre innehållsservern, vilket gör din samling tillgänglig över nätet. Utför först följande steg i calibre Ställ önskat utdataformat i calibre till EPUB (Utdataformatet kan ställas in under Inställningar->Gränssnitt- >Beteende) Ställ in utdatasprofil till ipad (detta kommer att fungera för iphone / ipod också), enligt Inställnigar- >Konvertera->Vanliga alternativ->sidinställning Konvertera de böcker du vill läsa på din i-enhet till EPUB-format genom att markera dem och klicka på knappen Konvertera. Slå på innehållsserver genom att klicka på Anslut / Dela-knappen och lämna calibre igång. Du kan även tala om för calibre att automatiskt starta innehållsservern via Inställningar->Dela->Dela på nätet. Det finns många appar till din i-enhet som kan ansluta till calibre. Här beskriver vi med hjälp av två av dem, ibooks och Stanza. 110 Kapitel 1. Avsnitten

115 Använda Stanza Du bör kunna komma åt dina böcker på din iphone genom att öppna Stanza. Gå till Get Books och klicka sedan på Shared fliken. Under Shared du att se en post Books i calibre. Om du inte, se till att din ipad / iphone är ansluten med hjälp av WiFi-nätverk i ditt hus, inte 3G. Om calibre katalogen fortfarande inte upptäcks i Stanza, kan du lägga till den manuellt i Stanza. Det gör du genom att klicka på Shared fliken, klicka sedan på Edit och sedan på Add book source för att lägga till en ny bok källa. I Add book source bilden anger vilket namn du vill och i fältet URL anger du följande: Ersätt med den lokala IP-adressen till den dator som kör calibre. Om du har ändrat porten calibre innehållsservern körs på, måste du ändra 8080 samt till den nya porten. Den lokala IP-adress är IP-adressen som du dator tilldelas i ditt hemmanätverk. En snabb Google-sökning kommer att berätta hur du hittar din lokala IP-adress. Klicka nu på Spara och du är klar. Om du får tidbegränsningsfel medan du surfar på calibre katalogen i Stanza, prova att öka anslutnings timeout -värdet i stanza inställningar. Gå till Info->Settings och öka värdet på Download Timeout. Använda ibooks så här: Starta webbläsaren Safari och skriv in IP-adressen och porten på den dator som kör calibre servern, Ersätt med den lokala IP-adressen till den dator som kör calibre. Om du har ändrat porten calibre innehållsservern körs på, måste du ändra 8080 samt till den nya hamnen. Den lokala IP-adress är IP-adressen som du dator tilldelas i ditt hemmanätverk. En snabb Google-sökning kommer att berätta hur du hittar din lokala IP-adress. Du kommer att se en lista över böcker i Safari, klicka bara på länken epub för vilket som bok du vill läsa, kommer Safari då att uppmana dig att öppna den med ibooks. Med USB-kabeln + itunes Använd Anslut till itunes metoden i Getting started instructioner i Calibre + Apple idevices: Start here 35. Denna metod fungerar endast på Windows Vista och senare, och OS X upp till 10.8 och högre. Linux stöds inte (itunes är inte tillgänglig i Linux) och OS X nyare än 10.8 stöds inte, eftersom Apple tagit bort möjligheten att använda itunes för att hantera böcker och ersatt den med ibooks. Hur använder jag calibre med min Android-telefon / surfplatta eller Kindle Fire HD? Det finns två sätt som du kan ansluta din Android-enhet till calibre. Med hjälp av en USB-kabel - eller trådlöst, via etern. Det första steget till att använda en Android-enhet är att installerar en e-bok att läsa program på den. Det finns många gratis och betalal e-bokläsningsapplikationer för Android: Några exempel (utan inbördes ordning): FBReader 36, Moon+ 37, Mantano 38, Aldiko 39, Kindle 40. Med hjälp av en USB-kabel Anslut bara enheten till datorn med en USB-kabel. calibre ska automatiskt upptäcka enheten och sedan kan du överföra böcker till den genom att klicka på Skicka till enhet knappen. calibre har inte stöd för varje Android-enhet där ute, så Vanliga frågor och svar 111

116 om enheten inte identifieras automatiskt, följ instruktionerna i Hur kan jag hjälpa till för att få stöd för min enhet i calibre? (sida 108) för att få din enhet stöds i calibre. Observera: Med nyare Android-enheter, stöds inte USB-anslutningen i Windows XP och OS X innan Mavericks (10,9). Om du är på Windows XP eller äldre versioner av OS X, bör du använda en av de trådlösa anslutningsmetoder. Över luftsnitt Det enklaste sättet att överföra böcker trådlöst till din Android-enhet är att använda Calibre Companion 41 Android app. Denna app underhålls av en Calibre utvecklare och låter calibre för att ansluta till din Android-enhet trådlöst, precis som om du satt i enheten med en USB-kabel. Du kan bläddra bland filer på enheten i calibre och använda Skicka till enhet för att överföra filer till enheten trådlöst. calibre har också en inbyggd webbserver, mediaserver. Du kan bläddra i din calibre samling på din Android-enhet är att använda calibre mediaservern, vilket gör din samling tillgängligt över nätet. Utför först följande steg i calibre Ställ in Önskat utformat i calibre till EPUB för normala Android-enheter eller MOBI för Kindles (Utdataformatet kan ställas in under Inställningar->Gränssnitt->Beteende) Konvertera de böcker du vill läsa på din enhet till EPUB / MOBI-format genom att markera dem och klicka på knappen Konvertera. Slå på mediaserver i calibre inställningar och lämna calibre igång. Nu på din Android-enhet, öppna webbläsaren och gå till Ersätt med den lokala IP-adressen till den dator som kör calibre. Om ditt lokala nätverk stöder användning av datornamn, kan du byta ut IP-adressen med nätverket namnet på datorn. Om du har ändrat porten calibremediaservern körs på, måste du ändra 8080 samt till den nya porten. Den lokala IP-adress är IP-adressen som du dator tilldelas i ditt hemmanätverk. En snabb Google-sökning kommer att berätta hur du hittar din lokala IP-adress. Nu kan du bläddra i din boksamling och hämta böcker från calibre till enheten för att öppna med vad e-bokläsprogram du har på din Android-enhet. Vissa läsprogram stöder direkt bläddning i calibre-biblioteket. Till exempel i Aldiko, klickar du på Mina kataloger, sedan + lägga till en katalog, sedan ge katalogen en titel som calibre och webbadressen som anges ovan. Nu kan du bläddra i calibre-biblioteket och ladda ner direkt i läsprogrammet. Kan jag komma åt mina calibre-böcker med hjälp av webbläsaren i min Kindle eller annan läsenhet? calibre har en mediaerver som exporterar böcker i calibre som en webbsida. Du kan slå på den under Inställningar- >Dela på nätet. Sedan är det bara peka webbläsaren på enheten till datorn som kör mediaserver och du kommer att kunna bläddra i din boksamling. Till exempel, om den dator som kör servern har IP-adressen i webbläsaren skriver du: Vissa enheter, t.ex. Kindle (1/2/DX), tillåter inte att du kan kommer åt port 8080 (standard port som mediaservern körs. I så fall ändra porten i calibre Inställningar till 80 (på vissa operativsystem, kan du inte att kunna köra servern på ett portnummer under 1024 på grund av säkerhetsinställningar. I detta fall den enklaste lösningen är att anpassa din router att vidarebefordra förfrågningar på port 80 till port 8080) Kapitel 1. Avsnitten

117 Jag får felmeddelandet Det gick inte att starta mediaservern: Port 8080 inte ledig ? Den troligaste orsaken till detta är antivirusprogrammet. Försök att tillfälligt inaktivera det och se om det gör susen. Jag kan inte skicka e-post med hjälp av calibre? På grund av den stora mängden av spam e-post, kan e-post sändning vara knepigt, eftersom olika e-postservrar använder olika strategier för att blockera e-post. Det vanligaste problemet är om du skickar e-post direkt (utan postvidarebefordran) i calibre. Många servrar (t.ex. Amazon) blockera e-post som inte kommer från en välkänd vidarebefordran. Det mest robusta sättet att installera e-sändning i calibre är att göra följande: Skapa ett gratis GMX konto på GMX 42. Gå till Inställningar->Dela med e-post i calibre och klicka på Använd GMX knappen och fyll i den information som efterfrågas. calibre kommer sedan att använda GMX att skicka e-post. Om du skickar till din Kindle, kom ihåg att uppdatera e-postinställningar på Amazon Kindle-sidan för att möjliggöra att e-post skickas från GMX e-postadress. Observera också att Amazon inte tillåter e-postleverans av AZW3 och ny stil (KF8) MOBI-filer. Även efter att ha gjort detta, kan du få problem. En vanlig källa till problem är att vissa dåligt utformade antivirusprogram blockerar calibre från att öppna en anslutning för att skicka e-post. Prova att lägga ett undantag för calibre i antivirusprogrammet. Observera: Microsoft/Google/GMX kan inaktivera ditt konto om du använder den för att skicka stora mängder e- post. Så, när du använder dessa tjänster för att skicka e-post begränsar calibre sig automatiskt till att skicka en bok var femte minut. Om du inte har något emot att riskera ditt konto blockeras kan du minska detta väntintervall genom att gå till Inställningar->Justeringar i calibre. Observera: Google nyligen bröt medvetet sin e-post sändprotokollsstöd (SMTP) i ett försök att tvinga alla att använda deras webbgränssnitt så att de kan visa dig flera annonser. De försöker hävda att SMTP är osäker, det är felaktigt och helt enkelt en ursäkt. Om du har problem med Gmail måste du tillåta mindre säkra program som beskrivs här 43. Observera: Om du är orolig för att ge calibre åtkomst till ditt e-postkonto, helt enkelt skapa en ny gratis e-postkonto med GMX eller Hotmail och använder den endast för calibre. Min enhet är monterat skrivskyddad i linux, så calibre kan inte ansluta till det? Linuxkärnor montera enheter skrivskyddad när deras filsystem har fel. Du kan reparera filsystemet med: sudo fsck.vfat -y /dev/sdc Ersätt /dev/sdc med sökvägen till enhetsnoden på din enhet. Du hittar enhetsnoden av enheten, som alltid kommer att vara under /dev genom att undersöka utdata av: mount Vanliga frågor och svar 113

118 Varför stöder calibre inte samlingar på Kindle eller hyllor på Nook? Varken Kindle eller Nook ger något sätt att manipulera samlingar över en USB-anslutning. Om du verkligen bryr dig om hur du använder samlingar, vill jag uppmana dig att sälja din Kindle / Nook och få en Kobo. Endast Kobo verkar förstå att livet är för kort för att mata in samlingarna en efter en på en e-ink skärm :) Observera att i fallet med Kindle, finns det ett sätt att manipulera samlingar via USB, men det kräver att Kindle startas om varje gång den kopplas bort från datorn, för ändringar i samlingarna ska erkännas. Som sådan, är det osannolikt att någon calibre utvecklare någonsin kommer att känna sig motiverade nog att stödja det. Det finns dock en calibre-tillägg som låter dig skapa samlingar på din Kindle från calibre-metadata. Det finns från här 44. Observera: Amazon har tagit bort möjligheten att manipulera samlingar fullständigt i sina nyare modeller, som Kindle Touch och Kindle Fire, vilket även gör ovanstående tillägg värdelöst, om du inte rootar din Kindle och installerar anpassad firmware. Jag får ett felmeddelande när jag försöker använda calibre med min Kobo Touch/Glo/etc.? Den Kobo har firmware med mycket fel. Anslutning till den har varit känt att slumpmässigt misslyckas. Vissa kombinationer av moderkort, USB-portar/kablar/hubbar kan förvärra denna tendens att misslyckas. Om du får ett felmeddelande när du ansluter till din beröring med calibre prova följande, som var och en har löst problemet för vissa calibre-användare. Anslut Kobo direkt till datorn, inte via USB-hubb Försök med en annan USB-kabel och en annan USB-port på datorn Försök med en annan dator, i synnerhet fungerar Kobo inte bra med vissa Windows XP-maskiner. Om du är på Windows XP, prova en dator med en nyare version av Windows. Försök uppgradera firmware på Kobo Touch till den senaste Prova att återställa Kobo (ibland botar problemet för ett tag, men sedan visas på nytt, i vilket fall du måste återställa igen och igen) Försök bara att sätta en eller två böcker på Kobo i taget och ha inte stora samlingar på Kobo Jag överförde några böcker till min Kindle använder calibre och de inte dyker upp? Böcker som skickas till Kindle visas bara upp på Kindle efter att de har blivit indexerade av Kindle. Detta kan ta lite tid. Om boken ännu inte dyker upp efter en viss tid, så är det troligt att Kindle indexering misslyckades. Ibland kan en viss bok kan orsaka indexeraren att kraschar. Tyvärr har Amazon inte lämnat något sätt att härleda vilken bok som orsakar en krasch på Kindle. Din enda utväg är att antingen återställa Kindle, eller ta bort alla filer från sitt minne med Windows Explorer (eller vad filhanteraren du använder) och sedan skicka böckerna till det igen, en efter en, tills du upptäcker problemboken. När du har hittat problemboken, ta bort den från Kindle och gör en MOBI till MOBI eller MOBI till AZW3 omvandling i calibre och sedan skicka tillbaka den. Detta kommer med största sannolikhet att ta hand om problemet Bibliotekshantering Kapitel 1. Avsnitten

119 Innehåll Var finns boken filer som lagras? (sida 115) Hur hanterar calibre författarnamn och sortering? (sida 115) Varför inte calibre låta mig lagra böcker i min egen katalogstruktur? (sida 116) Varför inte calibre har en foo-kolumn? (sida 117) Kan jag ha en kolumn som visar format eller ISBN? (sida 117) Hur flyttar jag min app -data från en dator till en annan? (sida 117) Listan över böcker i calibre är tom! (sida 118) Jag får fel med min calibre-biblioteket på en nätverksenhet/nas? (sida 118) Var finns boken filer som lagras? När du först kör calibre, kommer det att be dig om en mapp där du vill spara dina böcker. När du lägger till en bok till calibre, kommer det att kopiera boken i den mappen. Böcker i mappen snyggt ordnade i undermappar efter författare och titel. Observera att innehållet i den här mappen automatiskt hanteras av calibre, lägg inte till några filer / mappar manuellt till den här mappen, eftersom de kan tas bort automatiskt. Om du vill lägga till en fil associerad till en viss bok, använd det övre högra området av dialogrutan Redigera metadata för att göra det. Då kommer calibre automatiskt sätta filen i rätt mapp och flytta runt när titeln / författare förändras. Metadata om böckerna lagras i filen metadata.db på den översta nivån i biblioteksmappen här filen finns en SQLite databas. När du säkerhetskopierar ditt bibliotek att du kopierar hela mappen och alla dess undermappar. Mappen biblioteket och alla dess innehåll utgör vad som kallas en calibre bibliotek. Du kan ha flera sådana bibliotek. För att hantera biblioteken, klickar du på ikonen calibre i verktygsfältet. Du kan skapa nya bibliotek, ta bort / byta namn på befintliga och växla mellan biblioteken lätt. Du kan kopiera eller flytta böcker mellan olika bibliotek (när du har mer än ett bibliotek inställning) genom att högerklicka på en bok och välj Kopiera till bibliotek åtgärd. Hur hanterar calibre författarnamn och sortering? Författarnamn är komplexa och i synnerhet de kulturer, se denna anmärkning 45 för vissa av komplexiteter. calibre har en mycket flexibel strategi för att hantera författarnamn. Det första man måste förstå är att böcker och författare är separata enheter i calibre. En bok kan ha mer än en författare, och en författare kan ha mer än en bok. Du kan hantera författarna till en bok av dialogrutan redigera metadata. Du kan hantera enskilda författare genom att högerklicka på författaren i etikettbläddraren till vänster om calibre-huvudskärmen och välja Hantera Författare. Genom att använda den här dialogrutan kan du ändra namnet på en författare och även hur det namnet sorteras. Detta kommer automatiskt att ändra namnet på författaren i alla böcker i denna författare. När en bok har flera författare, separera deras namn med hjälp av och karaktär. Nu kommer vi till författarnamnssortering: När en ny författare läggs till calibre (det händer varje gång en bok av en ny författare läggs till), beräknar calibre automatiskt en sorts sträng för både boken och författaren. Författare i etikettbläddraren sorteras efter sorteringsvärde för författarna. Kom ihåg att detta skiljer sig från den Författaresorteringsfältet för en bok. Som standard antar denna sortingsalgoritm att författaren heter i Förnamn Efternamn format och genererar ett Efternamn, Förnamn-sorteringsvärdet. Du kan ändra denna algoritm genom att gå till Inställningar->Avancerat->Justeringar och ställa in author_sort_copy_method justering Vanliga frågor och svar 115

120 Du kan tvinga calibre att räkna om författarssorteringsvärdena för varje författare genom att högerklicka på en författare och välja Hantera Författare, sedan trycka på Beräkna om alla författare slags värden-knappen. Gör detta efter att du har ställt in author_sort_copy_method för att justera vad du vill. Du kan tvinga calibre att räkna om författarsorteringsvärden för alla böcker med hjälp av mass redigera metadata dialogrutan (välj alla böcker och klicka på redigera metadata, kontrollera automatiskt ställ in författarsorterings rutan, tryck sedan på OK.) Vid omräkning av författarsorteringsvärden för böcker, använder calibre författarsorteringsvärden för varje enskild författare. Se därför till att de enskilda författarsorteringsvärden är korrekta innan omräkning av böckernas författarsorteringsvärden. Du kan styra om de etikettbläddrarens visar författare genom att använda deras namn eller deras sorteringsvärden genom att ställa in categories_use_field_for_author_name justering i Inställningar->Avancerat->Justeringar Observera att du kan ställa in en enskild författares sorteringsvärde till vad du vill med hjälp av Hantera Författare. Detta är användbart när det handlar om namn som calibre inte kommer att få rätt, till exempel komplexa flerdelade namn som Miguel de Cervantes Saavedra eller när behandlar asiatiska namn som Sun Tzu. Med all denna flexibilitet, är det möjligt att ha calibre hantera dina författarnamn som du vill. Till exempel är en gemensam beg Ställ in author_sort_copy_method justera kopiera såsom beskrivits ovan. Starta calibre. Ändra inte någon boks metadata innan du gör de återstående stegen. Ändra alla författarnamn till LN, FN använder dialogrutan Hantera författare. När du har ändrat alla författare, tryck på Räkna all författaren slags värden-knappen. Tryck på OK, vid vilken punkt calibre kommer att ändra författarna i alla dina böcker. Detta kan ta ett tag. Observera: Vid byte från FN LN till LN, FN, är det ofta så att värdena i author_sort är redan i LN, FN-format. Om detta är fallet, gör följa ställa in author_sort_copy_method justera kopiera såsom beskrivits ovan. omstarta calibre. Ändra inte någon bok metadata innan du gör de återstående stegen. Öppna dialogrutan Hantera författare. Tryck på kopian alla författare sortera värden till författaren knappen. Kolla igenom författarna för att vara säker på att du är nöjd. Du kan fortfarande trycka på Avbryt för att överge ändringarna. När du trycker på OK, det finns inget att ångra. Tryck på OK, vid vilken punkt calibre kommer att ändra författarna i alla dina böcker. Detta kan ta ett tag. Varför inte calibre låta mig lagra böcker i min egen katalogstruktur? Hela poängen med calibre-bibliotekhanteringsfunktioner är att de ger en sökning och sortering baserat gränssnitt för att lokalisera böcker som är mycket effektivare än någon eventuell katalogschema du kunde komma på för din samling. Ja, när du blir bekväm med calibre-gränssnitt för att hitta, sortera och bläddra i din samling, kommer du inte någonsin känna ett behov av att jaga igenom filerna på din hårddisk för att hitta en bok igen. Genom att hantera böcker i sin egen katalogstruktur Författare -> Titel -> Boka filer är calibre kan uppnå en hög grad av tillförlitlighet och standardisering. För att illustrera varför en sökning / märkning baserat gränssnitt är överlägsen mappar, tänka på följande. Anta att din boksamling är snyggt sorterade i mappar med följande schema: 116 Kapitel 1. Avsnitten

121 Genre -> Author -> Series -> ReadStatus Nu gör det mycket enkelt att hitta till exempel alla science fiction böcker av Isaac Asimov i stiftelsen serien. Men antar att du vill hitta alla olästa science fiction böcker. Det finns inget enkelt sätt att göra detta med den här mappen system, du måste i stället ha en mapp system som ser ut som: ReadStatus -> Genre -> Author -> Series I calibre, skulle du istället använda etiketter för att markera genre och läsa status och sedan bara använda en enkel sökfråga som etikett: scifi och inte : läsa. calibre har även en fint grafiskt gränssnitt, så att du inte behöver lära sig sitt sökspråk istället kan du bara klicka på etiketter för att inkludera eller exkludera dem från sökningen. Till er som hävdar att du behöver tillgång till filsystemet, på så att du kan få tillgång till dina böcker över nätet, har calibre en utmärkt innehållsserver som ger dig tillgång till ditt calibre-biblioteket över nätet. Om du är orolig att en dag calibre kommer att upphöra att utvecklas och att lämna alla dina böcker strandsatta i sin mappstruktur, utforska den kraftfulla :guilabel: Spara till disk -funktionen i calibre som låter dig exportera alla dina filer i en mappstruktur för godtycklig komplexitet baserat på sina metadata. Slutligen, anledningen finns det siffror i slutet av varje titelmapp är för robusthet. Det antalet är ID-nummer av bokregistreringen i calibre-databasen. Med närvaron av numret kan du ha flera poster med samma titel och författarnamn. Det är också en del av det som gör calibre magiskt regenerera databas med all metadata om databasfilen blir korrupt. Med tanke på att calibre uppdrag är att få dig att sluta lagra metadata i filnamn och sluta använda filsystemet för att hitta saker, är den ökade robust ges av id-nummer väl värt de fulare mappnamn. Om du fortfarande inte övertygad, så jag är rädd calibre är inte för dig. Leta någon annanstans för din bok katalogisering behov. Bara så att vi är klara, detta kommer inte att förändras. Vänligen kontakta inte oss i ett försök att få oss att ändra på detta. Varför inte calibre har en foo-kolumn? calibre är konstruerad för att ha kolumner för de mest frekvent och mest använda fälten. Dessutom kan du lägga till några kolumner som du gillar. Kolumner kan läggas till via Inställningar->Gränssnitt->Lägg till dina egna kolumner. Titta på handledningen UI Power tips 46 för att lära sig att skapa egna kolumner, eller läs detta blogginlägg 47. Du kan också skapa virtuella kolumner som innehåller kombinationer av metadata från andra kolumner. I dialogrutan Lägg till kolumnen använda :guilabel: Snabb create-länkar för att enkelt skapa kolumner för att visa bokens ISBN eller format. Du kan använda kraftfulla calibre mallspråk att göra mycket mer med kolumner. För mer information, se calibre språkmall (sida 133). Kan jag ha en kolumn som visar format eller ISBN? Ja, det kan du. Följ instruktionerna i svaret ovan för att lägga till egna kolumner. Hur flyttar jag min app -data från en dator till en annan? Du kan exportera alla calibre data (böcker, inställningar och plugins) och dem importera den på en annan dator. Låt användning se hur man exporterar data: Högerklicka på ikonen calibre i calibres huvudverktygsfält och välj Exportera/Importera allt calibre-data. Klicka sedan på knappen märkt Exporterar allt ditt calibre-data. Du kommer att se en lista över alla dina calibrebibliotek. Klicka på OK och välj en tom mapp någonstans på din dator. Exporterade data sparas i den här mappen. Bara kopiera den här mappen till den nya datorn och följ instruktionerna nedan för att importera data Vanliga frågor och svar 117

122 Installera calibre på den nya datorn och gå igenom Välkomstguiden, det spelar ingen roll vad du gör där, eftersom du kommer att importera dina gamla inställningar i nästa steg. Du kommer nu att ha en tom calibre, med bara Komma igång guide i ditt bibliotek. Än en gång, högerklicka på calibre-knappen och välj Exportera/Importera allt calibre-data. Klicka sedan på knappen märkt Importera tidigare exporterat data. Välj mapp med exporterade data som du har kopierat över tidigare. Du kommer nu att ha en lista med bibliotek som du kan importera. Gå igenom listan en efter en, och välj ny plats för varje bibliotek (en plats är bara en tom mapp någonstans på din dator). Klicka på OK. Efter importen är klar, kommer calibre starta, med alla dina gamla bibliotek, inställningar och calibre-tillägg. Observera: Denna import/export-funktion är endast tillgänglig från calibre version 2.47 och framåt. Om du har en äldre version av calibre, eller om du stöter på problem med import/export, kan du bara kopiera över din calibrebiblioteksmapp manuellt som beskrivs i nästa stycke. Bara kopiera mappen med calibre-biblioteket från den gamla till den nya datorn. Du kan ta reda på var biblioteksmappen är genom att klicka på ikonen calibre i verktygsfältet. Den allra första punkten är sökvägen till biblioteksmappen. Nu på den nya datorn, starta calibre för första gången. Det kommer Välkomstguiden att köras som ber dig om placeringen av calibre-biblioteket. Hänvisa den till den tidigare kopierade mappen. Om datorn du överför till redan har en calibre-installation, kommer inte Välkomstguiden att köras. I så fall, högerklicka på ikonen calibre i verktygsfältet och led den till den nyligen kopierade katalogen. Du kommer nu att ha två calibre-bibliotek på din dator och du kan växla mellan dem genom att klicka på ikonen calibre i verktygsfältet. Överföra ditt bibliotek på detta sätt bevarar alla dina metadata, etiketter, anpassade kolumner, etc. Listan över böcker i calibre är tom! För att förstå varför det hände, måste du förstå vad calibre-biblioteket är. På den mest grundläggande nivån, är ett calibre-bibliotek bara en mapp. När du lägger till en bok till calibre, är att bokens filer kopieras till denna mapp (ordnade i undermappar efter författare och titel). Inne i calibre-biblioteksmappen, på den högsta nivån, kommer du att se en fil som heter metadata.db. Den här filen är där calibre lagrar metadata som titel / författare / betyg / etiketter etc. för varje bok i ditt calibre-biblioteket. Listan över böcker som calibre visar skapas genom att läsa innehållet i denna metadata.db filen. Det kan finnas två skäl till att calibre visar en tom lista över böcker: Din calibre-biblioteksmapp bytte plats. Detta kan hända om det var på en extern hårddisk och enhetsbeteckningen för den disken förändrats. Eller om du av misstag flyttat mappen. I detta fall kan calibre inte hitta sitt bibliotek och så startar med ett tomt bibliotek istället. För att råda bot på detta, gör en högerklicka på ikonen calibre i calibre-verktygsfältet och välj Växla/skapa bibliotek. Klicka på den lilla blå ikonen för att välja den nya platsen för ditt calibre-biblioteket och klicka på OK. Om du inte vet den nya platsen söka igenom datorn efter filen metadata.db. Din metadata.db raderades / skadades. I så fall kan du be calibre att bygga om metadata.db från sina säkerhetskopior. Högerklicka på ikonen calibre i calibre-verktygsfältet och välj Biblioteksunderhålls> Återställ databas. calibre kommer automatiskt återuppbygga metadata.db. Jag får fel med min calibre-biblioteket på en nätverksenhet/nas? Lägg inte ditt calibre-bibliotek på en nätverksenhet. Ett filsystem är ett komplext odjur. De flesta nätverksfilsystem saknar olika filsystemsfunktioner som calibre använder. Vissa stöder inte fillåsning, vissa stöd inte hårda länkar, vissa är bara opålitliga. Dessutom är calibre en enda användare program, om du råkar köra två kopior av calibre på samma nätverksbiblioteket, kommer dåliga saker hända. Slutligen olika operativsystem införa olika begränsningar av filsystem, så om du delar din nätverksenhet över flera operativsystem, kommer återigen dåliga saker hända. 118 Kapitel 1. Avsnitten

123 Överväg att använda calibre mediaserver för att göra dina böcker tillgängliga på andra datorer. Kör calibre på en enda dator och komma åt den via mediaserver eller en Remote Desktop-lösning. Om du måste dela det faktiska biblioteket, använd ett filsynkroniseringsverktyg som DropBox eller rsync istället för en nätverksenhet. Om du använder ett filsynkroniseringsverktyg är det viktigt att du ser till att både calibre och filsynkroniseringsverktyget inte försöker komma åt calibre bibliotek samtidigt. Med andra ord, kör inte filsynkroniseringsverktyget och calibre samtidigt. Även med dessa verktyg finns det risk för datakorruption eller förlust, så gör bara detta om du är villig att leva med den risken. Framför allt, tänk på att Google Drive är oförenlig med calibre, om du sätter ditt calibre biblioteket i Google Drive, du kommer att drabbas dataförlust. Se this thread < Diverse Innehåll Jag vill att calibre hämtar nyheter från min favoritnyhetssajten. (sida 119) Varför namnet Calibre? (sida 119) Varför visar calibre bara några av mina typsnitt på OS X? (sida 120) calibre startar inte på Windows? (sida 120) caliber fryser / kraschar ibland? (sida 121) Användning av läsare eller att göra några omvandlingar resulterar i en tillåtelse nekas fel i Windows (sida 121) calibre startar inte eller kraschar på OS X? (sida 122) Jag laddade ner installationsprogrammet, men det fungerar inte? (sida 122) Mitt antivirusprogram påstår calibre är ett virus / trojan? (sida 122) Hur säkerhetskopierar calibre? (sida 123) Hur använder jag köpta EPUB-böcker med calibre (eller vad ska jag göra med.acsm filer)? (sida 123) Jag får ett Permission Denied fel? (sida 123) Kan jag få kommentarsmetadata att dyka upp på min läsare? (sida 123) Hur får jag calibre att använda min HTTP-proxy? (sida 124) Jag vill ha lite funktionstilllägg i calibre. Vad kan jag göra? (sida 124) Varför har inte calibre en automatisk uppdatering? (sida 124) Hur är calibre licensierad? (sida 125) Hur kör jag calibre från mitt USB-minne? (sida 125) Hur kör jag delar av calibre som nyhetsnedladdning och mediaservern på min egen Linux-server? (sida 125) Jag vill att calibre hämtar nyheter från min favoritnyhetssajten. Om du är någorlunda skicklig med datorer, kan du lära calibre att hämta nyheter från en webbplats som du väljer. Om du vill veta hur du gör detta se Lägga till din favorit nyhetswebbplats (sida 23). Annars kan du begära en viss nyhetssajt genom att posta i calibre Recipes forum 48. Varför namnet Calibre? Gör ditt val: Convertor And LIBRary for Ebooks Vanliga frågor och svar 119

124 En stor calibre produkt En hyllning till SONY Librie som var den första e-bokläsare baserade på elektroniskt bläck Min fru valde det ;-) calibre uttalas som kal-i-ber inte ka-li-bre. Om du undrar, calibre är den brittiska/ samväldets stavning för caliber. Att vara indisk, det är den naturliga stavningen för mig. Varför visar calibre bara några av mina typsnitt på OS X? calibre bäddar in typsnitt i e-bokfiler som skapas. E-bokfiler stöder endast inbäddning av Truetype och Opentype (.ttf och.otf) typsnitt. De flesta typsnitt på OS X-system är i.dfont format, vilket de inte kan bäddas in. calibre visar endast Truetype och Opentype-typsnitt som finns på ditt system. Du kan få många sådana typsnitt på webben. Helt enkelt ladda ner.ttf /.otf filer och lägga till dem i Bibliotek / Fonts katalogen i din hemkatalog. calibre startar inte på Windows? Det kan finnas flera orsaker för detta: Om du är på Windows XP, eller på en dator med en processor som inte stödjer SSE2 (t.ex. AMD-processorer från före 2003) försöka installera calibre version 1.48 < _. calibre 2.0 och nyare använda Qt 5 som är känd för att vara kompatibelt med Windows XP-maskiner, och kräver SSE2. Helt enkelt avinstallera calibre och sedan installera version 1.48, detta kommer inte att påverka dina böcker / inställningar. Om du får ett felmeddelande om att calibre inte kunna öppna en fil eftersom den används av ett annat program, gör följande: Avinstallera calibre Boota om din dator Återinstallera calibre, men starta inte calibre från installationsguiden. Tillfälligt deaktivera ditt antivirus program (koppla bort från internet innan du gör det, för att vara säker) Titta inne i mappen du valt till ditt calibre-bibliotek. Om du ser en fil vid namn metadata.db, ta bort den. Starta calibre Från och med nu bör du kunna starta calibre normalt. Om du får ett fel i en Python-funktion som avslutas oväntat efter en uppgradering av calibre, först avinstallera calibre, sedan ta bort mappar (om det finns några) C:\Program Files\Calibre och C:\Program Files\Calibre2. Nu återinstallera och du bör vara OK. Om du får ett fel i välkomstguiden vid en initieringsköring av calibre, försök välja en mapp som C:\library för calibre-biblioteket (eftersom ibland har calibre problem med biblioteksplatser om sökvägen innehåller ickeengelska tecken, eller bara siffror etc.) Försök köra som administratör (högerklicka på ikonen och välj Kör som administratör ) Om det fortfarande inte startar, starta en kommandotolk (tryck på Windows-tangenten och R, skriv sedan: kommando: cmd.exe i dialogrutan Kör som visas). I kommandotolken skriver du följande kommando och tryck på Retur calibre-debug -g Lägg upp något utdata som du ser i ett hjälpmeddelande på Forum Kapitel 1. Avsnitten

125 caliber fryser / kraschar ibland? Det finns flera möjliga saker som jag känner till, som kan orsaka detta: Du kopplade nyligen en extern bildskärm eller TV till datorn. I detta fall, när calibre öppnas ett nytt fönster som metadataredigerinsfönstret eller konverteringsdialogrutan, visas det på den andra bildskärmen där du inte märker det, och så du tror calibre har frusit. Koppla bort din andra bildskärmen och starta om calibre. Om du använder RoboForm är det känt för att orsaka calibre kraschar. Lägg calibre till den svarta listan över program i RoboForm för att fixa detta. Eller avinstallera RoboForm. Logitechs inställningsprogram orsakar slumpmässiga krascher i calibre när den är öppen. Stäng det innan calibre. Constant Guard Protection från Xfinity orsakar krascher i calibre. Du måste manuellt tillåta calibre i det eller avinstallera Constant Guard Protection. Spybot - Search & Destroy hindrar calibre från att komma åt sina temporära filer som förstör visning och konvertering av böcker. Du använder en Wacom märkes USB-mus. Det finns en inkompatibilitet mellan Wacom-möss och grafisk verktygslåda calibre använder. Försök att använda en icke-wacom-mus. På vissa 64-bitarsversioner av Windows finns säkerhetsprogramvara / inställningar som hindrar 64-bitars calibre från att fungera korrekt. Om du använder 64-bitarsversionen av calibre försöka byta till 32-bitarsversionen. Om krascher händer speciellt när du använder en filöppningsdialog, som att klicka på knappen Lägg till böcker eller spara till disk-knappen, då kan du ha ett problem med fönstren filöppningsdialoger på din dator. Vissa calibre användare har rapporterat att avinstallera SpiderOak krypterings backup-programvara fixar även dessa krascher. Om du inte vill avinstallera SpiderOak kan du också stänga av Aktivera OS integration i SpiderOakinställningar. Om inget av ovanstående gäller för dig, så finns det något annat program på datorn som stör calibre. Först starta om datorn i felsäkert läge, att ha så få program som körs som möjligt, och se om krascher fortfarande händer. Om de inte gör det, då vet du att det är något program som orsakar problemet. Den mest sannolika boven i dramat är ett sådant program som modifierar andra programs beteende, till exempel ett antivirusprogram, en drivrutin, något som RoboForm (en automatisk ifyllnings app) eller hjälpmedel som röststyrning eller en skärmläsare. Det enda sättet att hitta den skyldige är att eliminera program ett efter ett och se vilken som orsakar problemet. I grund och botten, stoppa ett program, köra calibre, kontrollera om det krascher. Om det fortfarande händer, stoppa ett annat program och upprepa. Användning av läsare eller att göra några omvandlingar resulterar i en tillåtelse nekas fel i Windows Något på datorn hindrar calibre från att komma åt sina egna temporära filer. Troligtvis behörighet på din Temp-mappen är felaktig. Gå till mappen filen: C:\Användare\ANVÄNDARNAMN\AppData\Local i Utforskaren och högerklicka på filen: Temp mapp, välj Egenskaper och gå till fliken Säkerhet. Se till att ditt användarkonto har full kontroll på den här mappen. Vissa användare har rapporterat att köra följande kommando i en administratörskommandotolk löser deras behörigheter. För att få en administratörskommandotolk sök efter cmd.exe i startmenyn, högerklicka på Kommandotolksposten och välj Kör som administratör. I kommandotolken skriver du följande kommando och tryck på Retur: icacls "%appdata%\..\local\temp" /reset /T Alternativt kan du köra calibre som administratör, men detta kommer att leda till vissa problem, till exempel dra och släppa inte fungerar. Slutligen har en del användare rapporterat att inaktivera UAC löser problemet Vanliga frågor och svar 121

126 calibre startar inte eller kraschar på OS X? En vanlig orsak till fel på OS X är användningen av tillgänglighetsteknik som är oförenliga med grafikverktygen calibre använder. Prova att stänga av VoiceOver om du har det på. Också gå till System Inställningar->System->Hjälpmedel och stäng av inställningen för att ge tillgång till hjälpmedel i alla flikar. En annan orsak kan vara en tredjepartsapps som modifierar systembeteende, såsom Smart Scroll. Du kan få felsökningsinformation om varför calibre inte startar genom att köra Console.app. Felsökningsinformation skrivs till den. Om felsökningsinformationen innehåller en rad som ser ut: Qt: internal: -108: Error ATSUMeasureTextImage text/qfontengine_mac.mm då problemet är troligen en skadad typsnittsbuffer. Du kan rensa bufferten genom att följa dessa instruktioner 50. Om det inte löser det, leta efter en skadad typsnitts-fil på datorn, i ~/Library/Fonts eller liknande. Ett enkelt sätt att kontrollera om det finns skadade typsnitt i OS X är att starta Font Book -programmet välja alla typsnitt och sedan på Arkivmenyn, välj Verifiera typsnitt. Jag laddade ner installationsprogrammet, men det fungerar inte? Nerladdning från Internet kan ibland resultera i en korrupt nedladdning. Om calibre-nstallationsprogram du hämtat inte startar, prova att ladda ner det igen. Om du laddar ner det och ändå inte fungerar, ladda ner det från en alternativ plats 51. Om installationsprogrammet fortfarande inte fungerar, så finns något på datorn som hindrar det från att köras. Försök att tillfälligt inaktivera antivirusprogrammet (Microsoft Security Essentials eller Kaspersky eller Norton eller McAfee eller vad). Detta är troligen den skyldige om uppgraderingen hänger i mitten. Försök att starta om datorn och köra ett registerrensninsprogram som Wise Registry Cleaner 52. Prova en ren installation. Det vill säga, avinstallera calibre ta bort: file: C:\Program\Calibre2 (eller var du tidigare valde att installera calibre). Därefter ominstallera calibre. Observera att avinstallering inte rör dina böcker eller inställningar. Prova att ladda ner installationsprogrammet med en alternativ webbläsare. Till exempel om du använder Internet Explorer, prova att använda Firefox eller Chrome istället. Om du får ett felmeddelande om en saknad DLL i Windows, så är troligen behörigheterna på din tillfälliga mapp är felaktig. Gå till mappen C:\Users\USERNAME\AppData\Local i Windows Explorer och högerklicka sedan på Temp-mappen och välj Egenskaper och gå till Säkerhet-fliken. Se till att ditt användarkonto har full kontroll för denna mapp. Om du fortfarande inte kan få installeraren att fungera och du använder Windows, kan du använda calibre portable install 53, som inte behöver en installering (det är bara en zip-fil). Mitt antivirusprogram påstår calibre är ett virus / trojan? Det första du bör kontrollera är att du laddar ner calibre från den officiella hemsidan: < _. Se till att du klicka på nedladdningslänkar till vänster, inte reklam till höger. calibre är ett mycket populärt program och skrupelfria människor försöker installations webbplatser som erbjuder den för nedladdning för att lura oförsiktiga. Om du har den officiella nedladdningen och antivirusprogrammet fortfarande hävdar calibre är ett virus är alltså felet antivirusprogrammet. Antivirusprogram använder heuristik, mönsterkod som ser misstänkt för att upptäcka virus. Det är ungefär som rasprofilering. calibre är en helt öppen källkodsprodukt. Du kan faktiskt bläddra i källkoden själv Kapitel 1. Avsnitten

127 (eller anlita någon att göra det åt dig) för att kontrollera att det inte är ett virus. Vänligen rapportera falska identifiering till vad företaget du köper ditt antivirusprogram från. Om antivirusprogram hindrar dig från att ladda ner / installera calibre inaktivera det temporärt, installera calibre och sedan återaktivera det. Hur säkerhetskopierar calibre? Det viktigaste för att säkerhetskopiera är calibre-biblioteksmapp som innehåller alla dina böcker och metadata. Detta är den mapp du valde för din calibre-biblioteket när du körde calibre för första gången. Du kan få sökvägen till biblioteksmappen genom att klicka på calibre-ikonen på verktygslisten. Du måste säkerhetskopiera den här hel mapp med alla filer och undermappar. Du kan växla calibre till att använda en säkerhetskopierad biblioteksmapp genom att klicka på calibre ikonen i verktygsfältet och välja din säkerhetskopierade biblioteksmapp. En säkerhetskopierad biblioteksmappen säkerhetskopierar dina egna kolumner och sparade sökningar samt alla dina böcker och metadata. Om du vill säkerhetskopiera calibres konfigurations/tillägg, måste du säkerhetskopiera konfigurationskatalogen. Du hittar den här konfiguring mappen via Inställningar->Diverse. Observera att återställa konfigurationskataloger inte officiellt stöds, men bör fungera i de flesta fall. Bara kopiera innehållet i backup-katalogen i den aktuella konfigurationen katalogen att återställa. Hur använder jag köpta EPUB-böcker med calibre (eller vad ska jag göra med.acsm filer)? Mest köpta EPUB böcker har DRM < _. Detta förhindrar calibre från att öppna dem. Du kan fortfarande använda calibre att lagra och överföra dem till eboksläsare. Först måste du tillåta dina läsare på en Windows-maskin med Adobe Digital Editions. När detta är gjort, överförs EPUB böcker med calibre kommer att fungera bra på din läsare. När du köper en epub bok från en webbplats, kommer du att få en.acsm filen. Denna fil ska öppnas med Adobe Digital Editions, som sedan kommer att hämta själva.epub ebook. Den e-bokfilen sparas i mappen Mina digitala upplagor, där du kan lägga till det till calibre. Jag får ett Permission Denied fel? En tillståndsnekningsfel kan uppstå på grund av många möjliga orsaker, ingen av dem har något att göra med calibre. Du kan få tillståndsnekningsfel om du använder ett SD-kort med skrivskydd aktiverat. Om du, eller något program du använde ändrat filrättigheter av filerna i fråga att bara läsas. Om det finns ett filsystemsfel på enheten som orsakade operativsystemet att montera filsystemet i skrivskyddat läge eller markera en viss fil som skrivskyddad för att återvinnas. Om filerna har sina ägare inställda till en annan användare än du. Om filen är öppen i ett annat program. Om filen finns på en enhet, kan du ha nått gränsen för maximalt 256 filer i roten på enheten. I det här fallet måste du formatera enheten/sd-kortet som avses i felmeddelandet med FAT32 filsystem, eller ta bort några filer från SD-kortet/enhetens minne. Du måste rätta till det underliggande orsaken till behörighetsfelen innan du fortsätter använda calibre. Läs felmeddelandet noggrant, se vilken fil det pekar på och fixa behörigheterna på den filen eller dess mappar. Kan jag få kommentarsmetadata att dyka upp på min läsare? De flesta läsare stöder inte detta. Du ska klaga hos tillverkaren om det och förhoppningsvis om tillräckligt många klagar, kommer saker och ting förändras. Under tiden kan du infoga metadata, med kommentarer till en skyddsomslagssida i början av e-bok, genom att använda alternativet Infoga metadata som sidan i början på boken under 1.8. Vanliga frågor och svar 123

128 konverteringen. Alternativet finns i Strukturdetektion-avsnittet av konverteringsinställningarna. Notera att för att detta ska gälla måste du konvertera boken. Om din bok är redan i ett format som inte behöver konvertering kan du konvertera från det formatet till samma format. Ett annat alternativ är att skapa en katalog i e-boksform innehållande en lista på alla böcker i ditt calibre-bibliotek, med sina metadata. Klicka och håll knappen Konvertera för att komma åt skapa katalog verktyget. Och innan du frågar, nej du kan inte ha den länken direkt till sortiment böcker på din läsare. Hur får jag calibre att använda min HTTP-proxy? Som standard använder calibre de tillgängliga proxyinställningar som är inställda i ditt operativsystem. Ibland dessa är felaktiga, till exempel i Windows om du inte använder Internet Explorer så kan proxyinställningar vara ouppdaterade. Du kan tala om för calibre att använda en viss proxyserver genom att ställa in http_proxy-miljövariabel. Formatet på variabeln är du bör fråga din nätverksadministratör för att ge dig rätt värde för denna variabel. Observera att calibre bara stödjer HTTP proxyer inte SOCKS proxy. Du kan se den aktuella proxy som används av calibre i Inställningar->Övrigt. Jag vill ha lite funktionstilllägg i calibre. Vad kan jag göra? Du har två val: 1. Skapa en lösning genom att hacka på calibre och skicka det till mig för granskning och inkludering. Se Development Öppna en bugg som begär funktionen < _. Kom ihåg att även om du tror att din funktion förfrågan är oerhört viktigt / mycket viktigt, calibre-utvecklare kanske inte håller med. Lyckligtvis är calibre öppen källkod, vilket innebär att du alltid har möjlighet att genomföra din funktion själv, eller anställa någon att göra det åt dig. Vidare calibre har en omfattande tilläggsarkitektur, så du kanske kan utveckla din funktion som ett tillägg, se Skriva dina egna tillägg för att utöka calibres funktionalitet (sida 170). Varför har inte calibre en automatisk uppdatering? För många orsaker: Det finns ingen anledning att uppdatera varje vecka. Om du är nöjd med hur calibre kör stäng av anmälan om uppdateringen och vara på god väg. Återkom för att se om du vill uppdatera en gång om året eller så. Det finns en kryssruta för att stänga av uppdateringsmeddelandet, på själva uppdateringsanmälan. calibre-nedladdningar använder idag omkring 100TB bandbredd per månad 55. Implementera automatiska uppdateringar skulle kraftigt öka det och resulltera kostnad på tusentals dollar i månaden, vilket någon måste betala. Om jag implementerar en dialogruta som hämtar uppdateringen och släpper det, istället för att gå till webbplatsen som det gör nu, som skulle rädda den ivrigaste calibre-uppdaterare, högst fem klick i veckan. Det finns betydligt högre prioritet att göra i calibre-utveckling. Om du verkligen, verkligen hatar att ladda ner calibre varje vecka, men ändå vill vara upp till den senaste, jag uppmuntrar dig att köra från källkod, vilket gör att uppdatera trivialt. Instruktioner: ref: finns här <utveckla>. Det finns automatiska tredjepartsuppdaterare för calibre gjorda av calibre användare på calibre forum Kapitel 1. Avsnitten

129 Hur är calibre licensierad? calibre licensieras under GNU General Public License v3 (en öppen källkod-licens). Det innebär att du är fri att distributera calibre så länge du gör källkoden tillgänglig. Så om du vill sätta calibre på en CD med din produkt, måste du också sätta calibre-källkod på CD. Källkoden är tillgänglig för nedladdning < _. Du är fri att använda resultaten av konverteringar från calibre hur du vill. Du kan inte använda någon kod eller bibliotek från calibre i programmet utan att göra din programvara med öppen källkod. För mer information, se GNU GPL v3 < _. Hur kör jag calibre från mitt USB-minne? En bärbar version av finns här 57. Hur kör jag delar av calibre som nyhetsnedladdning och mediaservern på min egen Linux-server? Först måste du installera calibre på din Linux-server. Om servern använder en modern Linux-distributioner, bör du inte ha några problem med att installera calibre på den. Observera: calibre behöver GLIBC >= 2.13 och libstdc++ >= Om du har en äldre server, kommer du antingen vara tvungen sammanställa dessa från källan, eller använda calibre 1.48 vilket kräver endast GLIBC >= Dessutom, även om calibres kommandoradsverktyg behöver inte ha en körande X-server, kräver en del av dem att X- serverns bibliotek ska installeras på ditt system. Detta beror på att användningen Qt, som länkar mot dessa bibliotek. Om du får en ImportError om några Qt moduler, är det sannolikt du saknar vissa X-bibliotek. Du kan köra calibre-servern med kommandot: /opt/calibre/calibre-server --with-library /path/to/the/library/you/want/to/share Du kan ladda ner nyheter och omvandla de till en e-bok med kommandot: /opt/calibre/ebook-convert "Title of news source.recipe" outputfile.epub Om du vill generera MOBI, använd outputfile.mobi istället och använd --output-profil Kindle. Du kan skicka e-post med nedladdade nyheter med kommandot: /opt/calibre/calibre-smtp Jag lämnar att lista ut exakt kommandorad som en övning för läsaren. Slutligen kan du lägga till nedladdade nyheter till calibre-biblioteket med: /opt/calibre/calibredb add --with-library /path/to/library outfile.epub Kom ihåg att läsa kommandoraden dokumentationsavsnittet av calibre i användarhandboken för mer information om dessa och andra kommandon. 1.9 Handledning Här hittar du handledningar för att komma igång med hjälp av calibrears mer avancerade funktioner, t.ex. XPath och mallar Handledning 125

130 1.9.1 Hantera undergrupper av böcker, till exempel genre Vissa människor vill organisera böcker i deras bibliotek i undergrupper, liknande undermappar. Den mest allmänt givna anledningen är att skapa genrehierarkier, men det finns många andra. En användare begärde ett sätt att organisera läroböcker efter ämne och kursnummer. En annan ville hålla reda på gåvor efter ämne och mottagare. Denna handledning kommer att använda genren exempel för resten av det här inlägget. Innan vi går vidare, observera att vi inte talar om mappar på hårddisken. Undergrupper är inte mappar. Böcker kopieras inte någonstans. Calibres bibliotek filstruktur påverkas inte. Istället presenterar vi ett sätt att organisera och visa undergrupper av böcker inom ett calibre bibliotek. Ställ in (sida 127) Sökning (sida 129) Begränsningar (sida 130) Användbara mallfunktioner (sida 130) De gemensamt som krav för undergrupper såsom genrer är: En undergrupp (t.ex. en genre) ska innehålla (pekare till) böcker, inte kategorier av böcker. Detta är vad som skiljer undergrupper från calibre användarkategorier. En bok kan vara i flera undergrupper (genrer). Detta skiljer grupper från fysiska mappar. Undergrupper (genrer) måste bilda en hierarki; undergrupper kan innehålla undergrupper. Etiketter ger dig de två första. Om du etiketterar en bok med genren kan du använda etikettläsaren (eller sök) för att hitta de böcker med den genren, vilket ger dig den första. Många böcker kan ha samma etikett(er), vilket ger dig den andra. Problemet är att etiketter inte uppfyller det tredje kravet. De ger inte en hierarki. Calibres hierarki funktion ger dig den tredje, förmågan att se de genrer i ett träd och möjligheten att enkelt söka efter böcker i genre eller undergenre. Antag till exempel att din genrestruktur är ungefär så här: 126 Kapitel 1. Avsnitten

131 Genre. History.. Japanese.. Military.. Roman. Mysteries.. English.. Vampire. Science Fiction.. Alternate History.. Military.. Space Opera. Thrillers.. Crime.. Horror etc. Genom att använda hierarkifunktionen kan du se dessa genrer i etikettläsaren i trädform, som visas på skärmbilden. I detta exempel den yttersta nivån (Genre) är en anpassad kolumn som innehåller genrer. Genrer som innehåller undergenrer visas med en liten triangel bredvid dem. Genom att klicka på den triangel ska öppna objektet och visa undergenrer, som ni kan se med Historia och Science Fiction. Genom att klicka på en genre kan sökning ske efter alla böcker med denna genre eller barn i samma genre. Till exempel kan klicka på science fiction ge alla tre av de underordnade genrer, alternativ historia, militär och rymdopera. Genom att klicka på alternativ historia kommer att ge böcker i denna genre, och ignorera de i militär and rymdopera. Naturligtvis kan en bok ha flera genres. Om en bok har både rymdopera -och militärgenrer, så kommer du se att boken om du klickar på någon av genrerna. Sökning diskuteras mer i detalj nedan. En annan sak du kan se från bilden är att genren militä visas två gånger, en gång i historia och en gång i science fiction. Eftersom genrer är i en hierarki, är dessa två skilda genrer. En bok kan vara i den ena, i den andra, eller (tveksamt i det här fallet) båda. Till exempel kan böckerna i Winston Churchills Andra världskriget vara i historia.militär. David Webers Honor Harrington böckerna kan vara i science fiction.militär, och för den delen även i science fiction.rymdopera. När en genre finns, det är att genren har minst en bok, kan du enkelt använda den på andra böcker genom att dra böcker från biblioteket vyn till genren som du vill att böckerna ska ha. Du kan också använda genrer i metadata redaktörer; mer om detta nedan. Ställ in Nu kan din fråga vara " Hur var allt detta upp&quot?; Det finns tre steg: 1) skapa den anpassade kolumnen, 2) berättar calibre att den nya kolumnen ska behandlas som en hierarki, och 3) lägga till genrer. Du skapar den anpassade kolumnen på vanligt sätt, med hjälp av Inställningar->Lägg till dina egna kolumner. Det här exemplet använder #genre som uppslagsnamn och Genre som kolumnrubriken. Kolumntypen är kommaseparerad text, liksom etiketter, som visas i etikett webbläsaren Handledning 127

132 Sedan efter omstart av calibre måste du tala om för calibre att kolumnen ska behandlas som en hierarki. Gå till Inställningar->Utseende och känsla->etikettläsare och anger uppslagsnamn #genre i Kategorier med hierarkiska objekt rutan. Tryck på Verkställ och du är klar med att ställa in. Vid den punkt det inte finns genres i kolumnen. Vi är kvar med det sista steget: hur man tillämpar en genre till en bok. En genre finns inte i calibre tills det visas på minst en bok. För att lära sig att tillämpa en genre för första gången, måste vi gå in i detalj om vad en genre ser ut i metadata för en bok. En hierarki av saker är byggd genom att skapa ett objekt som består av fraser åtskilda av punkter. Fortsätt genren exempel dessa poster skulle historia.militär, mysterier. vampyr, science fiction.rymdopera, etc. Alltså för att skapa en ny genre, väljer du en bok som borde ha den genren, redigera dess metadata och ange den nya genren i kolumnen du skapat. Fortsätter vårt exempel, om du vill tilldela en ny genre Comics med en sub-genre superhjältar till en bok, skulle du redigera metadata för det (komiker) bok väljer fliken Anpassad metadata och ange Comics.superhjältar som visas i det följande (ignorera andra anpassade kolumner): 128 Kapitel 1. Avsnitten

133 Efter att ha gjort ovanstående, ser du i etikettlläsaren: Från och med nu, tillämpa denna nya genre till en bok (en serietidning, förmodligen), kan du antingen dra boken på genre eller lägga till det i boken med hjälp av redigera metadata på exakt samma sätt som görs ovan. Sökning Det enklaste sättet att söka efter genrer använder etikettläsare, klicka på den genre du vill se. Genom att klicka på en genre med barn kommer att visa dig böcker med denna genre och alla underordnade genrer. Detta kan dock ta upp 1.9. Handledning 129

134 en fråga. Bara för att en genre har barn betyder inte att det inte är en genre i sig. Till exempel kan en bok ha genren historia, men inte historia.militär. Hur du söka efter böcker med endast historia Etikettläsarens sökmekanism vet om ett objekt har barn. Om den gör det, klicka på posten utförs 5 sökningar i stället för som normalt tre. Den första är den normala gröna plus, vilket visar böcker med denna genre bara (t.ex. historia). Den andra är en fördubblad plus (visas ovan), vilket visar böcker med denna genre och alla undergenrer (t.ex. Historia och historia.militär). Den tredje är den normala röd minus, vilket visar böcker utan att exakt genre. Den fjärde är en fördubblad minus, vilket visar böcker utan att genre eller undergenrer. Den femte är tillbaka till början, inget märke, vilket innebär ingen sökning. Begränsningar Om du söker efter en genre och sedan skapar en sparad sökning för det, kan du använda Begränsa till rutan för att skapa ett virtuellt bibliotek med böcker med genren. Detta är användbart om du vill göra andra sökningar inom genren eller hantera / uppdatera metadata för böcker i genren. Fortsätter vårt exempel kan du skapa en sparad sökning som heter historia.japansk genom att först klicka på genre japanska i etikettläsare för att få en sökning i sökrutan, in historia.japansk i den sparade sökrutan trycka på spara sökning knappen (den gröna rutan med den vita plus, på höger sida). När du har skapat den sparade sökning kan du använda den som en begränsning. Användbara mallfunktioner Du kanske vill använda genreinformation i en mall, till exempel med spara till disk eller skicka till enhet. Frågan kan då vara " Hur får jag den yttersta genrenamn eller namn &quot?; En calibremallfunktion, underavdelningar, är nödvändig för att göra detta lättare. Antag till exempel att du vill lägga till det yttersta genrenivån till spara-till-disk mall för att göra genre mappar, som i Historia / The Gathering Storm - Churchill, Winston. För att göra detta måste du extrahera den första nivån i hierarkin och lägga till den i fronten tillsammans med ett snedstreck för att ange att den ska göra en mapp. Mallen nedan åstadkommer detta: 130 Kapitel 1. Avsnitten

135 {#genre:subitems(0,1) /}{title} - {authors} Se Mallspråket (sida 133) för mer information om mallar och subitems() funktioner XPath Handledning I den här handledning kommer du att få en mjuk introduktion till XPath 58, ett frågespråk som kan användas för att välja godtyckliga delar av HTML 59 dokument i calibre. XPath är en allmänt använd standard, och googling det kommer att ge en ton av information. Denna handledning, däremot fokuserar på att använda XPath för ebokrelaterade uppgifter som att hitta kapitelrubriker i ett ostrukturerad HTML-dokument. Innehåll Val baserat på etikettnamn (sida 131) Väljer baserat på attribut (sida 132) Väljer baserat på etikettinnehåll (sida 132) e-boksprov (sida 132) Inbyggda XPath-funktioner (sida 132) Val baserat på etikettnamn Den enklaste formen av val är att välja etikett efter namnet. Anta till exempel att du vill markera alla <h2> etiketter i ett dokument. XPath-fråga till detta är helt enkelt: //h:h2 (Selects all <h2> tags) Prefixet // betyder söka på alla nivåer i dokumentet. Anta nu att du vill söka efter <span> etiketter som är inne <a> etiketter. Detta kan uppnås med: //h:a/h:span (Selects <span> tags inside <a> tags) Om du vill söka efter etiketter på en viss nivå i dokumentet, ändrar prefixet: /h:body/h:div/h:p (Selects <p> tags that are children of <div> tags that are children of the <body> tag) Detta kommer bara passa <p>en mycket kort e-bok för att demonstrera användningen av XPath.</p> i e-boksprov (sida 132) men inte någon annan av de andra <p> etiketterna. h: prefix i ovan exempel behövs för att passa XHTML etiketter. Detta för att internt, calibre representerar allt innehåll som XHTML. I XHTML etiketter finns en namnrymd, och h: är namnrymdsprefix för HTML etiketter. Anta nu att du vill välja både <h1> och <h2> etiketter. För att göra det behöver vi en XPath konstruktion som kallas predikat. En : dfn: predikat är helt enkelt ett test som används för att välja etiketter. Tester kan vara godtyckligt kraftfullt och som denna handledning fortskrider, kommer du att se mer kraftfulla exempel. Ett predikat skapas genom att innesluta test uttryck inom hakparenteser: //*[name()='h1' or name()='h2'] Det finns flera nya funktioner i detta XPath-uttryck. Den första är användningen av tecknet *. Det betyder passar alla etiketter. Titta nu på prov uttrycket namn()="h1"eller namn()= h2. : term: namn() är ett exempel på en inbyggd funktion. Den utvärderar endast namnet på etiketten. Så genom att använda det, kan vi välja etiketter vars namn är antingen h1 eller h2. Notera att: termen: name() -funktionen ignoreras namnrymden, så att det inte finns Handledning 131

136 något behov av att h prefix. XPath har flera användbara inbyggda funktioner. Några fler kommer att införas i den här guiden. Väljer baserat på attribut För att välja etiketter baserat på deras attribut, användning av predikat krävs: //*[@style] (Select all tags that have a style attribute) //*[@class="chapter"] (Select all tags that have class="chapter") //h:h1[@class="booktitle"] (Select all h1 tags that have class="booktitle") Här operatören attributen för etiketten. Du kan använda en del av de XPath inbyggda funktioner _ att utföra mer avancerad ihoppassningar på attributvärden. Väljer baserat på etikettinnehåll Med hjälp av XPath kan du även välja etiketter som baseras på text de innehåller. Det bästa sättet att göra detta är att använda kraften i reguljära uttryck via den inbyggda funktionen: term:re: test(): //h:h2[re:test(., 'chapter section', 'i')] (Selects <h2> tags that contain the words chapter or section) Här hänvisar. operatör till innehållet i etiketten, precis operatör avser dess attribut. e-boksprov <html> <head> <title>a very short ebook</title> <meta name="charset" value="utf-8" /> </head> <body> <h1 class="booktitle">a very short ebook</h1> <p style="text-align:right">written by Kovid Goyal</p> <div class="introduction"> <p>a very short ebook to demonstrate the use of XPath.</p> </div> <h2 class="chapter">chapter One</h2> <p>this is a truly fascinating chapter.</p> <h2 class="chapter">chapter Two</h2> <p>a worthy continuation of a fine tradition.</p> </body> </html> Inbyggda XPath-funktioner name() Namnet av nuvarande etikett. contains() contains(s1, s2) returnerar sann om s1 innehåller s Kapitel 1. Avsnitten

137 re:test() re:test(src, pattern, flags) returnerar sant om strängen src passar med det reguljära ut- trycket mönster. En särskilt användbar flaggan är i, det gör ihoppassningen teckenokänslig. En bra grund på syntaxen för reguljära uttryck finns på regexp syntax calibre språkmall calibres mallspråket används på olika ställen. Den används för att styra mappstruktur och filnamn när du sparar filer från calibre-biblioteket till disk eller e-bokläsare. Det används också för att definiera virtuella kolumner som innehåller data från andra kolumner och så vidare. Den grundläggande mallspråket är mycket enkelt, men har mycket kraftfulla avancerade funktioner. Grundtanken är att en mall består av text och namnen i klammer som sedan ersätts av motsvarande metadata från boken som bearbetas. Så, till exempel, är standardmallen som används för att spara böcker till enheten i calibre: {author_sort}/{title}/{title} - {authors} För boken The Foundation av Isaac Asimov kommer det bli: Asimov, Isaac/The Foundation/The Foundation - Isaac Asimov Snedstrecken är texter, vilka sätts in i mallen var de dyker upp. Till exempel, om den mall är: {author_sort} Some Important Text {title}/{title} - {authors} För boken The Foundation av Isaac Asimov kommer det bli: Asimov, Isaac Some Important Text The Foundation/The Foundation - Isaac Asimov Du kan använda alla de olika metadatafält som finns i calibre i en mall, inklusive eventuella anpassade kolumner du har skapat själv. För att ta reda på mallnamnet för en kolumn håll bara musen över kolumnrubriken. Namn för anpassade fält (kolumner du har skapat själv) har alltid en # som första tecken. För egna fält av serietyp, det finns alltid ett extra fält som heter #seriesname_index som blir serieindex för den serien. Så om du har ett eget seriefält som heter #myseries, kommer det också att finnas ett fält som heter #myseries_index. Förutom de kolumnbaserade fälten, kan du också använda: {formats} - A list of formats available in the calibre library for a book {identifiers:select(isbn)} - The ISBN number of the book Om en viss bok inte har en särskild bit av metadata, är det område som automatiskt avlägsnas i mallen för att boken. Tänk till exempel: {author_sort}/{series}/{title} {series_index} Om en bok har en serie, kommer mallen att producera: Asimov, Isaac/Foundation/Second Foundation 3 och om en bok inte har en serie: Asimov, Isaac/Second Foundation (calibre tar automatiskt flera snedstreck och inledande eller avslutande blanksteg) Handledning 133

138 Advancerad formatering Du kan göra mer än bara enkel substitution med mallarna. Du kan också villkora inkludera text och styra hur den substituerade data formateras. Först, villkorad inkluderad text. Det finns fall där du kanske vill ha text som visas i utdata endast om ett fältet inte är tomt. Ett vanligt fall är series och series_index, var du vill antingen ingenting eller de två värdena med ett bindestreck mellan dem. Calibre hanterar det här fallet med hjälp av en specialfältsyntax. Anta till exempel att du vill använda mallen: {series} - {series_index} - {title} Om boken inte har någon serie, kommer svaret att vara - - title. Många människor skulle hellre vilja att resultatet blir helt enkelt title, utan bindestreck. För att göra detta, använd den utökade syntaxen {field: prefix_text suffix_text}. När du använder den här syntaxen, om fältet har värdet SERIES kommer resultatet då att bli prefix_textseriessuffix_text. Om fältet inte har något värde, då kommer resultatet att vara den tomma strängen (ingenting); prefixet och suffixet ignoreras. Prefixet och suffixet kan innehålla blanksteg. Använd inte subtemplates( {...} ) eller funktioner (se nedan) som prefix eller suffix. Med hjälp av denna syntax, kan vi lösa ovanstående serien problem med mallen: {series}{series_index: - - }{title} De bindestreck inkluderas endast om boken har ett serieindex, vilket den kommer att få endast om den har en serie. Observera: Du måste inkludera: tecken om du vill använda ett prefix eller ett suffix. Du måste antingen använda några tecken eller båda; med hjälp av någon, som i {field: -}, är inte tillåtet. Det är OK att inte ge någon text för den ena eller den andra, såsom i {serien: -}. Använda {title: } är detsamma som att använda {title}. Andra: formatering. Anta att du vill se till att series_index alltid är formaterad som tre siffror med inledande nollor. Detta bör göra susen: {series_index:0>3s} - Three digits with leading zeros Om istället för inledande noll vill ha inledande mellanslag, använd: {series_index:>3s} - Three digits with leading spaces För efterföljande nollor, använd: {series_index:0<3s} - Three digits with trailing zeros Om du använder indexserien med undervärden (t.ex. 1.1), kanske du vill se till att decimaler kommer i följd. Till exempel kanske du vill att index 1 och 2,5 framstå som och 02.50, så att de kommer att sorteras rätt. För att göra detta använd: {series_index:0>5.2f} - Five characters, consisting of two digits with leading zeros, a decimal point Om du vill bara ha de två första bokstäverna i uppgifterna, använd: {author_sort:.2} - Only the first two letter of the author sort name calibres mallspråk kommer från python och för mer information om syntaxen för dessa avancerade formaterings operationer, titta på Python dokumentation Kapitel 1. Avsnitten

139 Avancerade funktioner Använd mallar i anpassade kolumner Ibland finns det fall där man vill visa metadata som calibre normalt inte visar, eller för att visa data på ett sätt som skiljer sig från hur calibre gör normalt. Till exempel kanske du vill visa ISBN, ett fält som calibre inte visar. Du kan använda anpassade kolumner för detta genom att skapa en kolumn med typen Kolumn byggs från andra kolumner (nedan kallade sammansatta kolumner), och går in i en mall. Resultat: calibre kommer att visa en kolumn som visar resultatet av utvärderingen av den mallen. För att visa ISBN skapa kolumnen och skriv {identifierare: välj (isbn)} in i mallrutan. För att visa en kolumn som innehåller värdena för två serier anpassade kolumner separerade med ett kommatecken, använd {#series1:,}{#series2}. Sammansatta kolumner kan använda godtyckligt mallalternativ, även formatering. Du kan inte ändra uppgifterna i en sammansatt kolumn. Om du redigerar en sammansatt kolumn genom att dubbelklicka på ett objekt, kommer du öppna mallen för redigering, inte de underliggande data. Redigera mallen på gränssnittet är ett snabbt sätt att testa och ändra sammansatta kolumner. Använda funktioner i mallar - enkelfunktionsläge Anta att du vill visa värdet på ett fält i versaler, då detta område är normalt i rubrikformat. Du kan göra detta (och många fler saker) med hjälp av de funktioner som finns för mallar. Till exempel, för att visa titeln med versaler, använd {title:uppercase()}. För att via det i rubrikformat använd {title:titlecase()}. Funktionsreferenser återfinns i den del format, som går efter : och för första eller avslutande }. Om du har både ett format och en funktionsreferens, kommer funktionen efter den andra :. Funktioner måste alltid avslutas med (). Några funktioner använder extra värden (argument) och dessa ska finnas i (). Funktioner alltid tillämpas innan formatspecifikationer. Se längre ner för ett exempel på att använda både ett format och en funktion, där denna ordning demonstreras. Syntax för att använda funktioner är {field:function(arguments)}, eller {field:function(arguments) prefix suffix}. Arguments are separated by commas. Commas inside arguments must be preceeded by a backslash ( \ ). The last (or only) argument cannot contain a closing parenthesis ( ) ). Functions return the value of the field used in the template, suitably modified. Important: If you have programming experience, please note that the syntax in this mode (single function) is not what you might expect. Strings are not quoted. Spaces are significant. All arguments must be constants; there is no sub-evaluation. Do not use subtemplates ( {... } ) as function arguments. Instead, use template program mode (sida 137) and general program mode (sida 158). Många funktioner använder reguljära uttryck. I samtliga fall är passning med reguljära uttryck skiftlägeskänsliga. De funktioner som finns är listade nedan. Observera att den slutgiltiga dokumentationen för funktioner finns i avsnitt Funktionsklassificering (sida 143): lowercase() returnerar värde av fältet som gemener. uppercase() returnerar värde av fältet som versaler. titlecase() returnerar värde av fältet som rubrikformat. capitalize() returnerar värde av fältet med första bokstav versal och övriga gemener. contains(pattern, text if match, text if not match) kollar om fältet innehåller träffar för det reguljära uttrycket pattern. Returnerar text vid träff om träff hittas annars returneras text om ingen träff. count(separator) tolkar värde som en lista med objekt åtskilda med separator, returnerar antalet objekt i listan. De flesta listor använder kommatecken som skiljetecken, men författarna använder ett et-tecken. Exempel: {tags:count(,)}, {authors:count(&)} 1.9. Handledning 135

140 format_number(template) tolkar värdet som ett tal och formatera det numret med hjälp av en python formateringsmall som {0:5.2f} eller {0:,d} eller ${0:5,.2f}. FIELD_NAME del av mallen måste vara en 0 (noll) (den {0: i ovanstående exempel). Se mallspråk och python-dokumentation för fler exempel. Returnerar tom sträng om formatering misslyckas. human_readable() förväntar sig att värdet är ett nummer och returnerar en sträng som representerar det numret i kb, MB, GB, etc. ifempty(text) Om fältet inte är tomt, returnera värdet av fältet. annars returnera text. in_list(separator, pattern, found_val, not_found_val) tolkar fältet som en lista med objekt åtskilda med separator, jämför pattern mot varje värde i listan. Om mönstret passar ett värde, returneras found_val, annars returneras not_found_val. language_codes (lang_strings) - returnera språkkoder för strängar passerade i lang_strings. Strängarna ska vara på samma språk som den aktuella platsen. Lang_strings är en kommaseparerad lista. language_strings (lang_codes, lokalisera) - returnerar strängarna för de koder språk passerade i lang_codes. Om localize är noll, returnerar strängarna på engelska. Om lokalisera inte är noll, returnerar strängarna på språket på den aktuella platsen. Lang_codes är en kommaseparerad lista. list_item(index, separator) tolkar fältet som en lista med objekt åtskilda med separator, returnerar index objektet. Den första elementet är siffran noll. Den sista punkten kan returneras med list_item (-1, separator). Om elementet inte finns i listan, då returneras det tomma värdet. Separatorn har samma betydelse som i count funktionen. lookup(pattern, field, pattern, field,..., else_field) som switch-funktionen, förutom att argumenten är fältet (metadata) namn, inte text. Värdet på lämpligt fält att hämtas och används. Observera att eftersom sammansatta kolumnerna är fält, kan du använda den här funktionen i en sammansatt fält för att använda värdet av något annat sammansatt fält. Detta är mycket användbart när man konstruerar variabel spara sökvägar (mer senare). re(pattern, replacement) returnerar fältet efter applicering av reguljära uttryck. Alla förekomster av pattern ersätts med replacement. Som i alla calibre, är dessa python-kompatibla reguljära uttryck. select(key) tolkar fält som en kommaseparerad lista med objekten är av formen id:värde. Hitta det par med id lika med nyckel, och returnera motsvarande värde. Den här funktionen är särskilt användbar för att extrahera ett värde såsom ett isbn från uppsättningen av identifierare för en bok. shorten(left chars, middle text, right chars) Returnerar en förkortad version av fältet, som består av vänster chars tecken från början av fältet, följt av mellan text, följt av höger chars tecken från slutet av strängen. Vänster chars och höger chars måste vara heltal. Antag till exempel titeln på boken är Ancient English Lagar i Times of Ivanhoe, och du vill att den ska passa in i ett utrymme av högst 15 tecken. Om du använder {title:shorten(9, -, 5)}, kommer resultatet att bli Ancient E-nhoe. Om fältets längd är mindre än vänster chars + höger chars + längden på mellan text, då området kommer att användas intakt. Till exempel, den i rubriken Domen skulle inte ändras.. str_in_list(val, separator, string, found_val, not_found_val) behandla val som en lista med objekt åtskilda av separator, jämför strängen mot varje värde i listan. Om strängen passar ett värde, returneras found_val, annars returneras not_found_val. Om strängen innehåller separatorer, då behandlas det också som en lista och varje värde kontrolleras. subitems(val, start_index, end_index) Denna funktion används för att bryta isär listor över etikettlika hierarkiska poster såsom genrer. Det tolkar värde som en kommaseparerad lista med etikettliknande objekt, där varje objekt är en period separerad lista. Ger en ny lista görs genom att först hitta alla period separerad etikett liknande föremål, därefter för varje sådan post extrahera komponenterna från start_index till end_index, sedan kombinera resultaten tillbaka tillsammans. Den första komponenten i en period separerad lista har ett index på noll. Om ett index är negativ, så det räknas från slutet av listan. Som ett specialfall är en END_INDEX av noll antas vara längden av listan. Exempel: 136 Kapitel 1. Avsnitten

141 Assuming a #genre column containing "A.B.C": {#genre:subitems(0,1)} returns "A" {#genre:subitems(0,2)} returns "A.B" {#genre:subitems(1,0)} returns "B.C" Assuming a #genre column containing "A.B.C, D.E": {#genre:subitems(0,1)} returns "A, D" {#genre:subitems(0,2)} returns "A.B, D.E" sublist(val, start_index, end_index, separator) tolkar värde som en lista med objekt åtskilda med separator, återvänder en ny lista gjord av objekten från start_index till end_index. Den första punkten är siffran noll. Om ett index är negativ, så det räknas från slutet av listan. Som ett specialfall är en END_INDEX av noll antas vara längden av listan. Exempel om man antar att etikettkolumnen (som är kommaseparerade) innehåller A, B,C : {tags:sublist(0,1,\,)} returns "A" {tags:sublist(-1,0,\,)} returns "C" {tags:sublist(0,-1,\,)} returns "A, B" swap_around_comma(val) -- ges ett värde av formen B, A, returneras AB. Detta är mest användbart för att konvertera namnen i LN, FN-format till FN LN. Om det inte finns någon kommatecken returneras funktionen val oförändrad. switch(pattern, value, pattern, value,..., else_value) för varje pattern, value par, kontrollerar om fältet passar det reguljära uttrycket pattern och i så fall returnerar att value. Om inget pattern passar, då returneras else_value. Du kan ha så många pattern, value par som du vill. test(text if not empty, text if empty) returnerar text om inte empty om fältet inte är tomt, annars returneras text om empty. transliterate() Returnerar en sträng i ett latinskt alfabet som bildas genom en tillnärmning av ljudet av orden i källfältet. Till exempel, om källområdet är Фёдор Михaйлович Достоевский returnerar funktionen Fiodor Mikhailovich Dostoievskii. Nu, hur är det med funktioner och formatering inom samma område. Anta att du har en heltalsanpassad kolumn kallad #myint som du vill se med ledande nollor, som i 003. För att göra detta, skulle du använda ett format på 0>3s. Men som standard, om ett nummer (heltal eller flyttal) är lika med noll då producerar fältet tomt värde, så nollvärden kommer att producera någonting, inte 000. Om du verkligen vill se 000 värden, då använder du både formatsträngen och ifempty funktionen för att ändra det tomma värdet till noll. Fältreferens vore: {#myint:0>3s:ifempty(0)} bservera att du kan använda prefix och suffix också. Om du vill att numret ska visas som [003] eller [000], använd då fältet: {#myint:0>3s:ifempty(0) [ ]} Använda funktioner i mallar - mallprogramläge Mallens språk för programläge skiljer sig från enkelfunktionsläge genom att den tillåter dig att skriva malluttryck som refererar till andra metadatafält, ändra värden och utföra aritmetik. Det är en ganska komplett programmeringsspråk. Du kan använda de funktioner som dokumenterats ovan i mallprogramsläge. Se nedan för mer information. Från och med ett exempel, anta att du vill att din mall visar serien för en bok om den har en, annars visar värdet av ett anpassat fält #genre. Du kan inte göra det i den grundläggande språket eftersom du inte kan hänvisa till en annan metadatafält i ett malluttryck. I programläget kan du. Följande uttryck fungerar: 1.9. Handledning 137

142 {#series:'ifempty($, field('#genre'))'} Exemplet visar flera saker: programläge används om uttrycket börjar med : och slutar med. Något annat antas vara enkelfunktion. variabeln $ står för fältet uttrycket fungerar på, #series i detta fall. funktioner måste få alla deras argument. Det finns inget standardvärde. Till exempel måste de inbyggda standard funktioner ges en extra initial parameter som indikerar källområdet, vilket är en avsevärd skillnad från enkelfunktionsläge. blanktecken ignoreras och kan användas var som helst i uttrycket. konstanta strängar är inneslutna i passande citat, antingen eller. Språket liknar funktionella språk genom att det är byggt nästan helt från funktioner. En förklaring är en funktion. Ett uttryck är en funktion. Konstanter och kännetecken kan ses som funktioner som returnerar värdet indikeras av konstanten eller lagrad i identifieraren. Syntaxen för språket visas med följande grammatik: constant ::= " string " ' string ' number identifier ::= sequence of letters or ``_`` characters function ::= identifier ( statement [, statement ]* ) expression ::= identifier constant function assignment assignment ::= identifier '=' expression statement ::= expression [ ; expression ]* program ::= statement Kommentarer är rader med ett # tecknet i början av raden. Ett uttryck har alltid ett värde, antingen värdet på konstanten, det värde som finns i identifierare, eller det värde som returneras av en funktion. Värdet av ett påstående är värdet av det sista uttrycket i sekvensen av påståendet. Som sådan, värdet av programmet (påstående): 1; 2; 'foobar'; 3 är 3. Ett annat exempel på ett komplext men ganska dumt program kan bidra till att göra saker och ting tydligare: {series_index:' substr( strcat($, '->', cmp(divide($, 2), 1, assign(c, 1); substr('lt123', c, 0), 'eq', 'gt')), 0, 6) ' prefix suffix} Detta program gör följande: ange att det område som betraktas på är series_index. Detta ställer in värdet på variabeln $. anrop av substr funktionen, som tar 3 parametrar (str, start, slut). Den returnerar en sträng som bildas genom att extrahera start genom sluttecken från strängen, nollbaserad (det första tecknet är tecknet noll). I detta fall strängen kommer att beräknas av strcat funktionen, är början 0, och slutet är 6. I detta fall den ger de 6 första tecknen i strängen som returneras av strcat, vilket måste utvärderas innan substr kan återvända. 138 Kapitel 1. Avsnitten

143 anropar strcat (strängsammanfogning) funktionen. Strcat accepterar 1 eller flera argument, och returnerar en sträng som bildas genom att sammanfoga alla värden. I detta fall finns det tre argument. Den första parametern är värdet i $, vilket här är värdet på series_index. Den andra parametern är en konstantsträng ->. Den tredje parametern är värdet som returneras av cmp funktionen, som ska vara fullt utvärderad innan strcat kan returnera. cmp funktionen tar 5 argument (x, y, lt, eq, gt). Den jämför x och y och returnerar det tredje argumentet lt om x<y, den fjärde argumentet eq om x == y, och den femte argumentet gt om x>y. Som med alla funktioner kan alla parametrar vara påstående. I detta fall är den första parametern (värdet för x) är resultatet av att dividera series_index med 2. Den andra parametern y är konstant 1. Den tredje parametern lt är ett påstående (mer senare). Den fjärde parametern eq är konstantsträngen eq.. Den femte parametern är konstant sträng gt. Den tredje parametern (en för lt) är ett påstående, eller en sekvens av uttryck. Tänk på att ett påstående (en sekvens av semikolonseparerade uttryck) är också ett uttryck, returnerar värdet för det sista uttrycket i listan. I detta fall tilldelar programmet först värdet 1 till en lokal variabel c returnerar sedan en delsträng genom att extrahera c th karaktär till slutet. Sedan c innehåller alltid konstant 1, delsträngen kommer den andra returnera genom end th tecknet, eller t123. När påståendet som ger värdet till den tredje parametern utförs, cmp kan ett värde returneras. Vid den tidpunkten, kan strcat returnera ett värde, då substr kan returnera ett värde. Programmet avslutas därefter. Vid olika värden för series_index returnerar programmet: series_index == odefinerad, result = prefix ->t123 suffix series_index == 0.5, result = prefix 0.50-> suffix series_index == 1, result = prefix 1->t12 suffix series_index == 2, result = prefix 2->eq suffix series_index == 3, result = prefix 3->gt suffix Alla funktioner som listas under enkelfunktionsläge kan användas i programläge. För att göra det måste du ange det värde som funktionen ska verka på som första parameter, utöver de parametrar som dokumenterats ovan. Till exempel i programläge är parametrarna i test funktionen test(x, text_if_not_empty, text_if_empty). x parametern, vilket är det värde som ska testas, kommer nästan alltid att vara en variabel eller ett funktionsanrop, ofta field(). Följande funktioner finns tillgängliga utöver de som beskrivs i enkelfunktionsläge. Minns från exemplet ovan att enkelfunktionsläges funktionerna kräver att ytterligare första parameter anges för vilket område som ska användas. Med undantag för id parametertilldelning, kan alla parametrar vara satser (sekvenser av uttryck). Observera att den slutgiltiga dokumentationen för funktioner finns i avsnittet Funktionsklassificering (sida 143): and(value, value,...) returnerar strängen 1 om alla värdena är inte tomma, annars returneras en tom sträng. Den här funktionen fungerar bra med testet eller first_non_empty. Du kan ha så många värden som du önskar. add(x, y) returnerar x + y. Ger ett undantag om någon av x eller y inte är tal. assign(id, val) tilldelar val till id, returnerar sedan val. id måste vara en identifierare, inte ett uttryck approximate_formats() returnerar en kommaseparerad lista med format som vid ett tillfälle var förknippade med boken. Det finns ingen garanti att listan är korrekt, även om den antagligen är det. Denna funktion kan anropas i mallprogramläge med mallen {: approximate_formats() }. Observera att formatnamn är alltid versaler, som i EPUB. author_links(val_separator, pair_separator) returnerar en sträng som innehåller en lista över författare och att författarens länkvärden i form author1 val_separator author1link pair_separator author2 val_separator author2link etc. En författare är separerad från dess 1.9. Handledning 139

144 länk värde av val_separator sträng utan tillsatta mellanslag. author:linkvalue paren skiljs åt av pair_separator strängargument utan tillsatta platser. Det är upp till dig att välja skiljesträngar som inte förekommer i författarnamn eller länkar. En författare ingår, även om författaren länken är tom. author_sorts(val_separator) returnerar en sträng med en lista över författarens sorteringsvärden för författarna till boken. Sorteringen är författarens metadata (som skiljer sig från den author_sort i böcker). Den returnerade listan har formen författaren sortera 1 val_separator författare sort 2 etc. Författaren sortera värdena i denna lista är i samma ordning som författarna till boken. Om du vill ha mellanslag runt val_separator så inkludera dem i separatorsträngen booksize() returnerar värdet för den calibres storleks fält. Returnerar om det inte finns några format. cmp(x, y, lt, eq, gt) jämför x och y efter konvertering både siffror. Returnerar lt om x < y. Returnerar eq om x == y. Annars returnerar gt. current_library_name() -- returnerar efternamnet på sökvägen till den nuvarande calibre-biblioteket. Denna funktion kan anropas i mallprogramläge med mallen {: current_library_name() }. current_library_path() -- returnerar sökvägen till den aktuella calibre-biblioteket. Denna funktion kan anropas i mallprogramläge med mallen {: current_library_path() }.. days_between(date1, date2) returnera antalet dagar mellan date1 och date2. Numret är positivt om date1 är större än date2, annars negativt. Om någon date1 eller date2 inte datum, returnerar funktionen en tom sträng. divide(x, y) returnerar x / y. Ger ett undantag om någon x eller y inte är tal. eval(string) utvärderar strängen som ett program, som skickar de lokala variabler (de assign ade till). Detta gör det möjligt att använda mallprocessorn för att konstruera komplexa resultat från lokala variabler. Eftersom { och } tecken är speciella, måste du använda [[ för { tecken och ]] för } tecken; de omvandlas automatiskt. Observera också att prefix och suffix (det så kallade prefixet suffix syntax) inte kan användas i argumentet till funktionen när du använder mallprogramläge. field(name) returnerar metatdatafältet med namn name. first_matching_cmp(val, cmp1, result1, cmp2, r2,..., else_result) jämför val < cmpn i sekvens, returnerar resultn för första jämförelsen som lyckas. Returnerar else_result om ingen jämförelse lyckas. Till exempel: first_matching_cmp(10,5,"small",10,"middle",15,"large","giant") returnerar large. Samma exempel med ett första värde på 16 returnerar giant. first_non_empty (värde, värde,...) - returnerar det första värdet som inte är tomt. Om alla värden är tomma, då returneras det tomma värdet. Du kan ha så många värden som du vill. format_date(x, date_format) formatera värdet, vilket måste vara ett datumfält, som använder format_string, returnerar en sträng. Formateringskoder är: d : the day as number without a leading zero (1 to 31) dd : the day as number with a leading zero (01 to 31) ddd : the abbreviated localized day name (e.g. "Mon" to "Sun"). dddd : the long localized day name (e.g. "Monday" to "Sunday"). M : the month as number without a leading zero (1 to 12). MM : the month as number with a leading zero (01 to 12) MMM : the abbreviated localized month name (e.g. "Jan" to "Dec"). MMMM : the long localized month name (e.g. "January" to "December"). yy : the year as two digit number (00 to 99). yyyy : the year as four digit number. h : the hours without a leading 0 (0 to 11 or 0 to 23, depending on am/pm) 140 Kapitel 1. Avsnitten

145 hh : the hours with a leading 0 (00 to 11 or 00 to 23, depending on am/pm) m : the minutes without a leading 0 (0 to 59) mm : the minutes with a leading 0 (00 to 59) s : the seconds without a leading 0 (0 to 59) ss : the seconds with a leading 0 (00 to 59) ap : use a 12-hour clock instead of a 24-hour clock, with 'ap' replaced by the localized strin AP : use a 12-hour clock instead of a 24-hour clock, with 'AP' replaced by the localized strin iso : the date with time and timezone. Must be the only format present. Du kan få oväntade resultat om det datum du formaterar innehåller lokaliserade månadsnamn, vilket kan hända om du ändrade formatjusteringar att innehålla MMMM. I detta fall, istället för att använda något i stil med {pubdate:format_date(yyyy)}, skriv mallen med mallprogramläge som i {: format_date(raw_field( pubdate ), yyyy ) } finish_formatting(val, fmt, prefix, suffix) tillämpa format, prefix och suffix till ett värde på samma sätt som görs i en mall som {series_index:05.2f - - }. Denna funktion finns för att underlätta omvandlingen av komplexa enkelfunktions- eller mallprogrammods mallar till allmänna programläge (sida 158) (se nedan) för att dra nytta av GPM-mallskompilering. Till exempel ger följande program på samma utdata som ovanstående mall: program: finish_formatting(field("series_index"), "05.2f", " - ", " - ") Ytterligare exempel: för mallen {series:re(([^\s])[^\s]+(\s $),\1)}{series_index:0>2s - - }{title} använd: program: strcat( re(field('series'), '([^\s])[^\s]+(\s $)', '\1'), finish_formatting(field('series_index'), '0>2s', ' - ', ' - '), field('title') ) formats_modtimes(date_format) returnerar en kommaseparerad lista med kolonseparerade objekt som representerar modifieringstider för formaten i en bok. Den date_format parametern anger hur datumet ska formateras. Se date_format funktionen för detaljer. Du kan använda funktionen för val för att få modifieringstider för ett visst format. Observera att formatnamn är alltid versaler, som i EPUB. formats_paths() returnerar en kommaseparerad lista med kolonseparerade objekt som representerar fullständig sökväg till format i en bok. Du kan använda select-funktionen för att få sökvägen för ett visst format. Observera att formatnamn är alltid versaler, som i EPUB. formats_sizes() returnerar en kommaseparerad lista med kolonseparerade poster som representerar storlekar i oktetter av formaten i en bok. Du kan använda select-funktionen för att få storleken för ett visst format. Observera att formatnamn är alltid versaler, som i EPUB. has_cover() returnerar Yes om boken har ett omslag annars returneras tomma strängen not(value) returnerar strängen 1 om value är tom, annars returneras tomma strängen. Denna funktion fungerar bra med test eller first_non_empty. Du kan ha så många värden som du önskar. list_difference(list1, list2, separator) returnerar en lista gjord genom att ta bort från list1 alla poster som finns i list2, med hjälp av en skiftlägeskänslig jämförelse. Posterna i list1 och list2 separeras av separator, som är posterna i den returnerade listan. list_equals(list1, sep1, list2, sep2, yes_val, no_val) returnerar yes_val om list1 och list2 innehåller samma poster, annars returneras no_val. Posterna bestäms genom att dela upp varje lista med hjälp av lämplig avgränsningstecken (sep1 eller sep2). Ordningen på posterna i listorna är inte relevant. Jämförelsen är skiftlägesomkänslig Handledning 141

146 list_intersection(list1, list2, separator) returnerar en lista gjord genom att ta bort från list1 någon post som inte finns i list2, med hjälp av en skiftlägeskänsliga jämförelse. Posterna i list1 och list2 separeras av separator, som är poster i den returnerade listan. list_re(src_list, separator, include_re, opt_replace) Konstruera en lista genom att först separera src_list in poster med separator tecken. För varje post i listan, kolla om det passar include_re. Om den gör det, så lägga till den i listan som ska returneras. Om opt_replace inte är den tomma strängen, så tillämpa bytet innan du lägger till posten till den returnerade listan. list_re_group(src_list, separator, include_re, search_re, template_for_group_1, for_group_2,...) Liksom list_re utom ersättare inte är valbar. Den använder re_group (item, search_re, mall...) när man gör ersättning. list_sort(list, direction, separator) returerar lista sorterad med hjälp av en skiftlägeskänslig sortering. Om direction är noll, är listan sorteras stigande, annars fallande. Listposter är separerade med separator, likasom de poster i den returnerade listan. list_union(list1, list2, separator) returnerar en lista gjord genom att slå samman poster i lista1 och lista2, ta bort dubbletter med hjälp av en skiftlägesokänslig jämförelse. Om poster skiljer sig i skiftläge, är det i lista1 används. Posterna i lista1 och lista2 separeras av separator, likasom de poster i den returnerade listan. multiply(x, y) returnerar x * y. Ger ett undantag om någon x eller y inte är tal. ondevice() returnerar strängen Yes om ondevice ställs in, annars returneras den tomma strängen or(value, value,...) returnerar strängen 1, om något värde inte är tomt, annars returneras den tomma strängen. Den här funktionen fungerar bra med test eller first_non_empty. Du kan ha så många värden som du önskar. print(a, b,...) skriver ut argument till standard ut. Såvida du börjar calibre från kommandoraden ( calibre-debug -g ), kommer utdata att gå till ett svart hål. raw_field(name) returnerar metadatafält med namnet med name utan att tillämpa någon formatering. raw_list(name, separator) returnerar listan metadata med namnet name utan att tillämpa någon formatering eller sortering och med poster åtskilda av separator. re_group(val, pattern, template_for_group_1, for_group_2,...) returnerar en sträng med användande av reqular uttrycksmönstret för val och ersätter varje passande instans med strängen beräknad genom att ersätta varje passande grupp med värdet som returneras av motsvarande mall. Det ursprungliga passande värdet för gruppen finns som $. I mallprogramläge, som till mallen och de eval funktioner använder du [[för {och]] för}. Följande exempel på mallprogramläge letar efter serie med mer än ett ord och sätter det första ordet till versaler: {series:'re_group($, "(\S* )(.*)", "[[$:uppercase()]]", "[[$]]")'} series_sort() returnerar seriens sorterade värden. strcat(a, b,...) kan ta valfritt antal argument. Returnerar en sträng som bildas genom att sammanfoga alla argumenten. strcat_max(max, string1, prefix2, string2,...) Returnerar en sträng som bildas genom att sammanlänka argumenten. Det returnerade värdet initieras till string1. Prefix, string par som läggs till i slutet av värde så länge den resulterande strängens längd är mindre än max. String1 returneras även om string1 är längre än max. Du kan skicka så många prefix, string par som du vill. strcmp(x, y, lt, eq, gt) gör en skiftlägesokänslig jämförelse x och y som strängar. Returnerar lt om x <y. Retur eq om x == y. Annars returnerar gt. strlen(a) Returnerar längden på strängen som skickas som argument. 142 Kapitel 1. Avsnitten

147 substr(str, start, end) returnerar start genom end tecknen i str. Det första tecknet i str är nolltecken. Om slutet är negativt, då det tyder på att många tecken räknat från höger. Om slutet är noll, då det tyder på det sista tecknet. Till exempel, substr("12345", 1, 0) returnerar 2345 och substr("12345", 1, -1) returnerar "234. subtract(x, y) returnerar x - y. Ger ett undantag om någon x eller y inte är tal. today() returnerar en datumsträng för idag. Detta värde är konstruerad för användning i format_date eller days_between, men kan manipuleras precis som alla andra strängar. Datumet är i ISO-format. template(x) utvärderar x som mall. Bedömningen görs i en egen kontext, vilket innebär att variabler inte delas mellan den som anropar och utvärderingsmallen. Eftersom { och } tecken är speciella, måste du använda [[ för { tecken och ]] för } tecken; de omvandlas automatiskt. Till exempel, mall( [[title_sort]] ) kommer att utvärdera mallen {title_sort} och returnera dess värde. Observera också att prefix och suffix (det så kallade prefix suffix syntax) inte kan användas i argumentet till funktionen när du använder mallprogramläge. Funktionsklassificering Reference for all built-in template language functions Here, we document all the built-in functions available in the calibre template language. Every function is implemented as a class in python and you can click the source links to see the source code, in case the documentation is insufficient. The functions are arranged in logical groups by type Handledning 143

148 144 Arithmetic (sida 145) add(x, y) (sida 145) divide(x, y) (sida 145) multiply(x, y) (sida 145) subtract(x, y) (sida 145) Boolean (sida 145) not (värde) (sida 145) och (värde, värde,...) (sida 145) or (värde, värde,...) (sida 145) Date functions (sida 145) days_between (datum1, datum2) (sida 145) today() (sida 145) Formatting values (sida 146) finish_formatting(val, fmt, prefix, suffix) (sida 146) format_date (val, format_string) (sida 146) format_number(v, template) (sida 146) human_readable (v) (sida 146) Get values from metadata (sida 146) approximate_formats() (sida 146) author_links(val_separator, pair_separator) (sida 146) author_sorts(val_separator) (sida 147) booksize() (sida 147) current_library_name() (sida 147) current_library_path () (sida 147) field(namn) (sida 147) formats_modtimes(date_format) (sida 147) formats_paths () (sida 147) formats_sizes() (sida 148) has_cover () (sida 148) language_codes(lang_strings) (sida 148) language_strings(lang_codes, localize) (sida 148) ondevice() (sida 148) raw_field (namn) (sida 148) raw_list(name, separator) (sida 148) series_sort() (sida 148) user_categories() (sida 148) virtual_libraries() (sida 149) If-then-else (sida 149) contains(val, mönster, text om träff, text om inte träff) (sida 149) ifempty(val, text om den är tom) (sida 149) test(val, text om inte tom, text om den är tom) (sida 149) Iterating over values (sida 149) first_non_empty (värde, värde,...) (sida 149) lookup(val, mönster, fält, mönster, fält,..., else_field) (sida 149) switch(val, mönster, värde, mönster, värde,..., else_value) (sida 149) List lookup (sida 149) identifier_in_list(val, id, found_val, not_found_val) (sida 150) in_list (Val, separator, mönster, found_val, not_found_val) (sida 150) list_item(val, index, separator) (sida 150) select(val, key) (sida 150) str_in_list (Val, separator, sträng, found_val, not_found_val) (sida 150) List manipulation (sida 150) count(val, separator) (sida 150) list_difference (List1, List2, sorterare) (sida 150) list_equals(list1, sep1, list2, sep2, yes_val, no_val) (sida 151) list_intersection (List1, List2, sorterare) (sida 151) list_re(src_list, separator, include_re, opt_replace) (sida 151) Kapitel 1. Avsnitten list_re_group(src_list, separator, include_re, search_re, group_1_template,...) (sida 151) list_sort (lista, riktning, sorterare) (sida 151) list_union (List1, List2, sorterare) (sida 151)

149 Arithmetic add(x, y) class calibre.utils.formatter_functions.builtinadd add(x, y) - returnerar x + y. Ger ett undantag om antingen x eller y är inte siffror. divide(x, y) class calibre.utils.formatter_functions.builtindivide divide(x, y) - returnerar x / y. Ger ett undantag om antingen x eller y är inte siffror. multiply(x, y) class calibre.utils.formatter_functions.builtinmultiply multiply(x, y) - returnerar x * y. Ger ett undantag om antingen x eller y är inte siffror. subtract(x, y) class calibre.utils.formatter_functions.builtinsubtract subtract(x, y) - returnerar x - y. Ger ett undantag om antingen x eller y är inte siffror. Boolean not (värde) class calibre.utils.formatter_functions.builtinnot not (värde) - returnerar strängen 1 om värdet är tom, annars returneras en tom sträng. Denna funktion fungerar bra med test eller first_non_empty. Du kan ha så många värden som du vill. och (värde, värde,...) class calibre.utils.formatter_functions.builtinand och (värde, värde,...) - returnerar strängen 1 om alla värden är inte tom, annars returneras en tom sträng. Denna funktion fungerar bra med test eller first_non_empty. Du kan ha så många värden som du vill. or (värde, värde,...) class calibre.utils.formatter_functions.builtinor or (värde, värde,...) - returnerar strängen 1 om något värde inte är tomt, annars returneras en tom sträng. Denna funktion fungerar bra med test eller first_non_empty. Du kan ha så många värden som du vill. Date functions days_between (datum1, datum2) class calibre.utils.formatter_functions.builtindaysbetween days_between (datum1, datum2) - returnerar antalet dagar mellan datum1 och datum2. Numret är positivt om date1 är större än date2, annars negativ. Om någon datum1 eller datum2 inte datum, returnerar funktionen en tom sträng. today() class calibre.utils.formatter_functions.builtintoday today() - returnera en datumsträng för idag. Detta värde är avsedd för användning i format_date eller days_between, men kan manipuleras som alla andra strängen. Datumet är i ISO-format Handledning 145

150 Formatting values finish_formatting(val, fmt, prefix, suffix) class calibre.utils.formatter_functions.builtinfinishformatting finish_formatting(val, fmt, prefix, suffix) tillämpa formatet, prefix och suffix till ett värde på samma sätt som görs i en mall som {series_index: 05.2f - -}. Till exempel ger följande program samma resultat som ovanstående mall: program:finish_formatting(field( series_index ), 05.2f, -, - ) format_date (val, format_string) class calibre.utils.formatter_functions.builtinformatdate format_date (val, format_string) - formaterar värdet, vilket måste vara ett datum, genom att använda format_string, returneras en sträng. De formateringskoder är: d: den dag som tal utan inledande nolla (1 till 31) dd: dagen som tal med inledande nolla (01 till 31) MMM: den förkortade lokaliserade dag namn (t.ex. Mon till Sun ). dddd: den långa lokaliserade dag namn (t.ex. måndag till sönday ). M: månaden som tal utan inledande nolla (1 till 12). MM: månad som tal med inledande nolla (01 till 12) MMM: den förkortade lokaliserade månaden namn (t.ex. Jan till Dec ). MMMM: den långa lokaliserade månaden namn (t.ex. Januari till December ). yy: året som två siffror (00 till 99). dd: året som fyra siffror. h: timmar utan inledande 0 (0 till 11 eller 0 till 23, beroende på am / pm) hh: de timmar med en inledande 0 (00 till 11 eller 00 till 23, beroende på am / pm) m: protokollet utan inledande 0 (0 till 59) mm: protokollet med en inledande 0 (00 till 59) s: de sekund utan inledande 0 (0 till 59) ss: sekunderna med en inledande 0 (00 till 59) AP: använd en 12-timmars klocka istället för en 24-timmars klocka, med ap ersättas med lokaliserad strängen för am eller pm AP: använd en 12-timmars klocka istället för en 24-timmars klocka, med AP ersättas med lokaliserad sträng för AM eller PM iso: datum med tid och tidszon. Måste vara det enda närvarande formatet format_number(v, template) class calibre.utils.formatter_functions.builtinformatnumber format_number(v, template) format numret v med hjälp av ett python formatering mall som {0:5.2f} eller {0:,d} eller ${0:5,.2f}. field_name del av mallen ska vara en 0 (noll) ( {0: i exemplen ovan). Se språkmallen och python-dokumentationen för fler exempel. Returnerar tom sträng om formatering misslyckas. human_readable (v) class calibre.utils.formatter_functions.builtinhumanreadable human_readable (v) - returnerar en sträng som representerar antalet v i KB, MB, GB, etc. Get values from metadata approximate_formats() class calibre.utils.formatter_functions.builtinapproximateformats approximate_formats() returnerar en kommaseparerad lista med format som vid ett tillfälle var i samband med boken. Det finns ingen garanti för att denna lista är korrekt, även om den antagligen är det. Denna funktion kan anropas i mallprogramläge med mallen {: approximate_formats () }. Observera att formatnamnen alltid är versaler, som i EPUB. Den här funktionen fungerar bara i grafiska gränssnittet. Om du vill använda dessa värden på spara-till-disk eller skicka-till-enhet-mallar måste du göra en egen kolumn byggd från andra kolumner, använder du funktionen i kolumnmallen och använda den kolumnens värde i din spar/skicka mallar author_links(val_separator, pair_separator) class calibre.utils.formatter_functions.builtinauthorlinks author_links(val_separator, pair_separator) returnerar en sträng som innehåller en lista av författare och denna författares länkvärde i formen author1 val_separator author1link pair_separator author2 val_separator author2link etc. En författare är separerad från dess länkvärde med val_separator sträng utan tillagda mellanrum. 146 Kapitel 1. Avsnitten

151 author:linkvalue par är separerade med pair_separator strängargument utan tillagda mellanrum. Det är upp till dig att välja separatorsträngar som inte uppträder i författarnamn eller länkar. En författare är inkluderad även om författarlänken är tom. author_sorts(val_separator) class calibre.utils.formatter_functions.builtinauthorsorts author_sorts(val_separator) returnerar en sträng med en lista över författarens sorteringsvärden för författarna till boken. Sorteringen är ett i författarens metadata (som skiljer sig från den author_sort i böcker). Den returnerade listan har formen författaren sorterings 1 val_separator författare sort 2 etc. Författaren sortera värdena i denna lista är i samma ordning som författarna till boken. Om du vill ha utrymmen runt val_separator sedan inkludera dem i separatorn strängen booksize() class calibre.utils.formatter_functions.builtinbooksize booksize() returnera värdet av storleken fältet. Den här funktionen fungerar bara i grafiska gränssnittet. Om du vill använda detta värde i Save-to-disk eller skicka-till-enhet-mallar måste du göra en egen kolumn byggd från andra kolumner, använder du funktionen i kolumnmallen och använda den kolumnens värde i din spara/skicka mallar current_library_name() class calibre.utils.formatter_functions.builtincurrentlibraryname current_library_name() returnera efternamnet på sökvägen till den nuvarande calibre-biblioteket. Denna funktion kan anropas i mallprogrammeringsläget genom att använda mallen {: current_library_name () }. current_library_path () class calibre.utils.formatter_functions.builtincurrentlibrarypath current_library_path () - returnera sökvägen till den aktuella calibre-biblioteket. Denna funktion kan anropas i mallens programmeringsläget genom att använda mallen {: current_library_path () }. field(namn) class calibre.utils.formatter_functions.builtinfield field(namn) - returnerar metadatafält med namnet efter namn formats_modtimes(date_format) class calibre.utils.formatter_functions.builtinformatsmodtimes formats_modtimes(date_format) returnen kommaseparerad lista med kolon_separateradeobjekt som representerar förändrings tider för formaten i en bok.. date_format parametern anger hur datum ska formateras. Se date_format funktionen för mer information. Du kan använda val funktionen för att få ändringstiden för ett visst format. Observera att formatnamn alltid är versaler, som i EPUB. formats_paths () class calibre.utils.formatter_functions.builtinformatspaths formats_paths () - returnera en kommaseparerad lista över colon_separated objekt som representerar fullständig sökväg till format i en bok. Du kan använda Select-funktionen för att få söktvägen i ett visst format. Observera att formatet namn alltid är versaler, som i EPUB Handledning 147

152 formats_sizes() class calibre.utils.formatter_functions.builtinformatssizes formats_sizes() returnera en kommaseparerad lista med kolon_separaterade objekt som representerar storleken i byte av format i en bok. Du kan använda välja funktionen för att få storleken för ett visst format. Observera att formatnamn alltid är versaler, som i EPUB. has_cover () class calibre.utils.formatter_functions.builtinhascover has_cover () - returnera Ja om boken har ett omslag, annars tillbaka den tomma strängen language_codes(lang_strings) class calibre.utils.formatter_functions.builtinlanguagecodes language_codes(lang_strings) returnera språkkoderna för strängarna som finns i lang_strings. Strängarna ska vara på samma språk som den aktuella platsen. Lang_strings är en kommaseparerad lista. language_strings(lang_codes, localize) class calibre.utils.formatter_functions.builtinlanguagestrings language_strings(lang_codes, localize) returnera strängarna för språkkoder som finns i lang_codes. Om lokalisera är noll, returneras strängarna på engelska. Om lokalisera inte är noll, returneras strängarna tillbaka på språket på den aktuella platsen. Lang_codes är en kommaseparerad lista. ondevice() class calibre.utils.formatter_functions.builtinondevice ondevice() returnerar tillbaka Ja om ondevice är satt, annars returneras den tomma strängen. Den här funktionen fungerar bara i grafiska gränssnittet. Om du vill använda detta värde i Save-to-disk eller skicka-till-enhetmallar måste du göra en egen kolumn byggd från andra kolumner, använder du funktionen i kolumnmallen och använder den kolumnen värde i din spara/skicka mallar raw_field (namn) class calibre.utils.formatter_functions.builtinrawfield raw_field (namn) - returnerar metadata fält med namnet på namn utan att tillämpa någon formatering. raw_list(name, separator) class calibre.utils.formatter_functions.builtinrawlist raw_list(name, separator) returnerar metadatalistan namngiven av namn utan att använda någon formatering eller sortering och med poster separerade med separator. series_sort() class calibre.utils.formatter_functions.builtinseriessort series_sort() returnerar seriesorteringsvärde user_categories() class calibre.utils.formatter_functions.builtinusercategories user_categories() returnerar en kommaseparerad lista med de användarkategorier som den här boken innehåller. Denna funktion fungerar endast i grafiska gränssnittet. Om du vill använda dessa värden i Save-to-disk eller skicka-till-enhet-mallar måste du göra en egen kolumn byggd från andra kolumner, använd funktionen i den kolumnen mall, och använda kolumnens värden i din spara / skicka mallar 148 Kapitel 1. Avsnitten

153 virtual_libraries() class calibre.utils.formatter_functions.builtinvirtuallibraries virtual_libraries() returnera en kommaseparerad lista med virtuella bibliotek som innehåller den här boken. Den här funktionen fungerar bara i grafiska gränssnitt. Om du vill använda dessa värden på spara-till-disk eller skicka-till-enhet-mallar måste du göra en egen kolumn byggd från andra kolumner, använder du funktionen i kolumnmallen och använd den kolumnens värde i din spar/skicka mallar If-then-else contains(val, mönster, text om träff, text om inte träff) class calibre.utils.formatter_functions.builtincontains contains(val, mönster, text om träff, text om inte träff) - kontrollerar om fältet innehåller träffar för det reguljära uttrycket mönster. Returnerar text om träff om träffar hittas annars returnerar text om ingen träff ifempty(val, text om den är tom) class calibre.utils.formatter_functions.builtinifempty ifempty(val, text om den är tom) - Returnerar val om val inte är tom, annars returneras texten om den är tom test(val, text om inte tom, text om den är tom) class calibre.utils.formatter_functions.builtintest test(val, text om inte tom, text om den är tom) - returvärde text om inte tom Om fältet inte är tomt, annars returnera texten om den är tom Iterating over values first_non_empty (värde, värde,...) class calibre.utils.formatter_functions.builtinfirstnonempty first_non_empty (värde, värde,...) - returnerar det första värdet som inte är tomt. Om alla värden är tomma, då returneras det tomma värdet. Du kan ha så många värden som du vill. lookup(val, mönster, fält, mönster, fält,..., else_field) class calibre.utils.formatter_functions.builtinlookup lookup(val, mönster, fält, mönster, fält,..., else_field) - som switch, förutom argumenten fält (metadata) namn, inte text. Värdet på lämpligt fält kommer att hämtas och användas. Observera att eftersom sammansatta kolumn är fält, kan du använda denna funktion i ett sammansatt fält och använda värdet av vissa andra sammansatta området. Detta är mycket användbart vid konstruerandet av variabla sparvägar switch(val, mönster, värde, mönster, värde,..., else_value) class calibre.utils.formatter_functions.builtinswitch switch(val, mönster, värde, mönster, värde,..., else_value) - för varje mönster, värde par, kontrollerar om fältet överensstämmer med det reguljära uttrycket mönster och i så fall avkastning som värde. Om inget mönster passar, då returneras else_value. Du kan ha så många mönster, värdes par som du vill List lookup 1.9. Handledning 149

154 identifier_in_list(val, id, found_val, not_found_val) class calibre.utils.formatter_functions.builtinidentifierinlist identifier_in_list(val, id, found_val, not_found_val) behandla val som en lista med identifierare separerade med kommatecken och jämför strängen mot varje värde i listan. En identifierare har formatet ID: värde. IDparametern ska vara antingen id eller id: RegExp. Det första fallet ger träff om det finns någon identifierare med detta ID. Det andra fallet ger träff om regexp passar identifierare värde. Om det är en träff, returneras found_val, annars returneras not_found_val. in_list (Val, separator, mönster, found_val, not_found_val) class calibre.utils.formatter_functions.builtininlist in_list (Val, separator, mönster, found_val, not_found_val) - behandla val som en lista med poster avdelade med separator, att jämföra mönstret mot varje värde i listan. Om mönstret passar ett värde, avkastning found_val, annars återvänder not_found_val. list_item(val, index, separator) class calibre.utils.formatter_functions.builtinlistitem list_item(val, index, separator) - tolka värdet som en lista av element åtskilda av separator, returnerar indexet :e objekt. Den första punkten är siffran noll. Den sista komponenten kan återsändas med hjälp av list_item (-1, separator). Om objektet inte finns i listan, kommer det tomma värdet returneras. Avskiljaren har samma betydelse som i funktionen ANTAL. select(val, key) class calibre.utils.formatter_functions.builtinselect select(val, key) tolka värdet som en kommaseparerad lista, med den post som id: värde. Hitta paret med ID lika med nyckel, och returnera motsvarande värde. str_in_list (Val, separator, sträng, found_val, not_found_val) class calibre.utils.formatter_functions.builtinstrinlist str_in_list (Val, separator, sträng, found_val, not_found_val) - behandla val som en lista med poster avdelade med separator, att jämföra strängen mot varje värde i listan. Om strängen passar ett värde, avkastning found_val, annars återvänder not_found_val. Om strängen innehåller separatorer, då är det också behandlas som en lista och varje värde är markerat. List manipulation count(val, separator) class calibre.utils.formatter_functions.builtincount count(val, separator) - tolkar värdet som en lista av element åtskilda av separator, returnerar antalet objekt i listan. De flesta listor använder kommatecken som avgränsare, men författarna använder ett et-tecken. Exempel: {Tags: (,)}, räkna {författare: räknare (&)} list_difference (List1, List2, sorterare) class calibre.utils.formatter_functions.builtinlistdifference list_difference (List1, List2, sorterare) - returnera en lista genom att ta bort List1 alla objekt som finns i List2 med en skiftlägesokänslig jämförelse. Objekten i List1 och List2 skiljs åt av separator, liksom de artiklar i den returnerade listan. 150 Kapitel 1. Avsnitten

155 list_equals(list1, sep1, list2, sep2, yes_val, no_val) class calibre.utils.formatter_functions.builtinlistequals list_equals(list1, sep1, list2, sep2, yes_val, no_val) returnerar yes_val om list1 och list2 innehåller samma poster, annars returneras no_val. Föremålen bestäms genom att dela upp varje lista med lämpliga avgränsare (sep1 eller sep2). Ordningen på objekten i listorna inte är relevant. Jämförelsen är inte skiftlägeskänslig. list_intersection (List1, List2, sorterare) class calibre.utils.formatter_functions.builtinlistintersection list_intersection (List1, List2, sorterare) - returnera en lista görs genom att ta bort List1 varje punkt som inte finns i List2 med en skiftlägesokänslig jämföra. Objekten i List1 och List2 skiljs åt av separator, liksom de artiklar i den returnerade listan. list_re(src_list, separator, include_re, opt_replace) class calibre.utils.formatter_functions.builtinlistre list_re(src_list, separator, include_re, opt_replace) Konstruera en lista genom att först separera src_list till poster med hjälp av avgränsningstecken. För varje post i listan, kontrollera om det passar include_re. Om den gör det, sedan lägga till den i listan som ska returneras. Om opt_replace inte är den tomma strängen, tillämpa sedan bytet innan du lägger till objekt åter till listan. list_re_group(src_list, separator, include_re, search_re, group_1_template,...) class calibre.utils.formatter_functions.builtinlistregroup list_re_group(src_list, separator, include_re, search_re, group_1_template,...) Som list_re utom ersättare är inte valfritt. Den använder re_group(list_item, search_re, group_1_template,...) när du gör ersättare på den resulterande listan. list_sort (lista, riktning, sorterare) class calibre.utils.formatter_functions.builtinlistsort list_sort (lista, riktning, sorterare) - Returnera lista sorterad med en skiftlägesokänslig sortering. Om riktningen är noll, listan är sorterad stigande, annars fallande. Listan objekt skiljs åt av separator, liksom de artiklar i den returnerade listan. list_union (List1, List2, sorterare) class calibre.utils.formatter_functions.builtinlistunion list_union (List1, List2, sorterare) - returnera en lista som görs av en sammanslagning av poster i List1 och List2, ta bort dubbletter med en skiftlägesokänslig jämförelse. Om objekt skiljer sig i fallet är den i List1 används. Objekten i List1 och List2 skiljs åt av separator, liksom de artiklar i den returnerade listan. subitems(val, start_index, end_index) class calibre.utils.formatter_functions.builtinsubitems subitems(val, start_index, end_index) Denna funktion används för att bryta isär listor över objekt som genrer. Det tolkar värdet som en kommaseparerad lista, där varje objekt är en period-separerad lista. Returnerar en ny lista genom att först hitta alla period-separerade objekt, då för varje sådan post utvinna start_index till end_index komponenter, och sedan kombinera resultaten tillbaka tillsammans. Den första komponenten i en periodseparerad lista har ett index på noll. Om ett index är negativ, så det räknas från slutet av listan. Som ett specialfall, är en end_index på noll antas vara längden på listan. Exempel med grundlägande mallläge och antar ett #genre värde av A.B.C : {#genre:subitems(0,1)} returnerar A. {#genre:subitems(0,2)} returnerar A.B. {#genre:subitems(1,0)} returnerar B.C. Förutsatt ett #genre värde av A.B.C, D.E.F, {#genre:subitems(0,1)} returnerar A, D. {#genre:subitems(0,2)} returnerar A.B, D.E 1.9. Handledning 151

156 sublist(val, start_index, end_index, separator) class calibre.utils.formatter_functions.builtinsublist sublist(val, start_index, end_index, separator) tolka värdet som en lista med objekt separerade av separator, returnerar en ny lista görs från start_index till end_index objekt. Den första punkten är nummer noll. Om ett index är negativt, då det räknas från slutet av listan. Som ett specialfall, är, om end_index är noll antas vara längden på listan. Exempel med grundmall läge och förutsatt att taggarna kolumnen (som är kommaseparerad) innehåller A, B, C : {tags:sublist(0,1 )} returnerar A. {tags:sublist(-1,0 )} returnerar C. {tags:sublist(0,- 1 )} returnerar A, B. Other assign(id, Val) class calibre.utils.formatter_functions.builtinassign assign(id, Val) - tilldelar val till id, sedan återgår val. id måste vara en identifierare, inte ett uttryck print(a, b,...) class calibre.utils.formatter_functions.builtinprint print(a, b,...) - skriver ut argument till standard ut. Såvida du startar calibre från kommandoraden (calibredebug-g), kommer utdata att gå till ett svart hål. Recursion eval (mall) class calibre.utils.formatter_functions.builtineval eval (mall) - utvärderar mallen, sänder de lokala variablerna (de assign ed till) i stället för bokens metadata. Detta möjliggör användning av mallenprocessorn för att konstruera komplexa resultat från lokala variabler. Eftersom {and} tecken är speciella, måste du använda [[ for the { character and ]] for the } karaktär; de konverteras automatiskt. Notera också att prefix och suffix (i prefix suffix syntax) inte kan användas i argumentet för denna funktion när du använder mallprogramläget. template(x) class calibre.utils.formatter_functions.builtintemplate template(x) - utvärderar x som en mall. Utvärderingen görs i sitt eget sammanhang, vilket innebär att variabler inte delas mellan den som anropande och mallutvärderingen. Eftersom {and} tecken är speciella, måste du använda [[ for the { character and ]] for the } tecken, och de konverteras automatiskt. Till exempel, template( [[title_sort]] ) kommer att utvärdera mallen {title_sort} och returnera dess värde. Notera också att prefix och suffix (i prefix suffix syntax) inte kan användas i argumentet för denna funktion när du använder mallprogramläget. Relational CMP (x, y, LT, eq, GT) class calibre.utils.formatter_functions.builtincmp CMP (x, y, LT, eq, GT) - jämför x-och y efter konvertering till både siffror. Returnerar LT om x <y. Returnerar eq om x == y. Annars returneras gt. 152 Kapitel 1. Avsnitten

157 first_matching_cmp(val, cmp1, result1, cmp2, r2,..., else_result) class calibre.utils.formatter_functions.builtinfirstmatchingcmp first_matching_cmp(val, cmp1, result1, cmp2, r2,..., else_result) - jämför val <cmpn i följd, returnerar resultn för den första jämförelsen som lyckas. Returnerar else_result om ingen jämförelse lyckas. Exempel: first_matching_cmp (10,5, liten, 10, mitten, 15, stor, jätte ) returnerar large. Samma exempel med ett första värde på 16 returnerar jätte. strcmp (x, y, LT, eq, GT) class calibre.utils.formatter_functions.builtinstrcmp strcmp (x, y, LT, eq, GT) - gör en skiftlägesokänslig jämförelse mellan X och Y som strängar. Returnerar LT om x <y. Returnerar eq om x == y. Annars returneras gt. String case changes capitalize(val) class calibre.utils.formatter_functions.builtincapitalize capitalize(val) - Returnerar värdet av fältet med versaler lowercase(val) class calibre.utils.formatter_functions.builtinlowercase lowercase(val) - Returnerar värdet i fältet med gemener titlecase(val) class calibre.utils.formatter_functions.builtintitlecase titlecase(val) - returvärde på fältet i titelformat uppercase(val) class calibre.utils.formatter_functions.builtinuppercase uppercase(val) - Returnerar värdet i fältet med versaler String manipulation re(val, mönster, ersättning) class calibre.utils.formatter_functions.builtinre re(val, mönster, ersättning) - Returvärdet på området efter applicering av reguljära uttryck. Alla förekomster av mönster ersättas med ersättning. Som allid i calibre, dessa är python-kompatibla reguljära uttryck re_group(värde, mönster, mall_för_grupp_1, för_grupp_2,...) class calibre.utils.formatter_functions.builtinregroup re_group(värde, mönster, mall_för_grupp_1, för_grupp_2,...) returnerar en sträng med användande av reguljära uttrycksmönstret för värdet och ersätter varje passande instans med strängen beräknas genom att ersätta varje passande grupp med det värde som returneras av motsvarande mall. Det ursprungliga passande värdet för gruppen finns som $. I mallprogramläge, som till mallen och de eval funktioner använder du [[för {och]] för}. Följande exempel på mall programläget ser ut för serier med flera ord och versaler det första ordet: {series: re_group($, (S* )(.*), [[$:uppercase()]], [[$]] ) } 1.9. Handledning 153

158 shorten(val, vänster tecken, mitten text, rätt tecken) class calibre.utils.formatter_functions.builtinshorten shorten(val, vänster tecken, mitten text, rätt tecken) - Returnerar en förkortad version av området, som består av vänster tecken, tecken från början av fältet, följt av mitten text följt av rätt tecken tecken från slutet av strängen. Vänster tecken och rätt tecken måste vara heltal. Antag exempelvis titeln på boken är Ancient engelska lag i Times of Ivanhoe, och du vill att den ska passa i ett utrymme på högst 15 tecken. Om du använder {titel: förkorta (9, -, 5)}, kommer resultatet att bli Ancient E-nhoe. Om fältets längd är mindre än vänster chars + höger chars + längden på mitt text, då området kommer att användas intakt. Till exempel titeln The Dome inte skulle ändras. strcat (a, b,...) class calibre.utils.formatter_functions.builtinstrcat strcat (a, b,...) - kan ta valfritt antal argument. Returnerar en sträng som bildas av sammanfogning med alla argument strcat_max(max, string1, prefix2, string2,...) class calibre.utils.formatter_functions.builtinstrcatmax strcat_max(max, string1, prefix2, string2,...) Returnerar en sträng som bildas genom att sammanfoga argumenten. Det returnerade värdet initieras till sträng1. Prefix, är sträng par till i slutet av värde så länge den resulterande strängens längd är mindre än max. Sträng1 returneras även om sträng1 är längre än max. Du kan skicka så många prefix, sträng par som du vill. strlen(a) class calibre.utils.formatter_functions.builtinstrlen strlen(a) - Returnerar längden av den sträng som skickas som argument substr(str, start, slut) class calibre.utils.formatter_functions.builtinsubstr substr(str, start, slut) - returnerar starttecknet till och med sluttecknet i str. Det första tecknet i STR är nollkaraktär. Om slutet är negativt, då det tyder på att för många tecken räknat från höger. Om slutet är noll, indikerar det sista tecknet. Till exempel substr ( 12345, 1, 0) returnerar 2345, och substr ( 12345, 1, -1) returnerar 234. swap_around_comma (Val) class calibre.utils.formatter_functions.builtinswaparoundcomma swap_around_comma (Val) - ges ett värde av blanketten B, A, retur AB. Detta är mest användbar för att konvertera namn i LN, FN-format till FN LN. Om det inte finns komma, returnerar funktionen Val oförändrad transliterate(a) class calibre.utils.formatter_functions.builtintransliterate transliterate(a) Returnerar en sträng i ett latinskt alfabet som bildas genom en tillnärmning av ljudet av orden i källsträngen. Till exempel, om källan är Фёдор Михaйлович Достоевский returnerar funktionen Fiodor Mikhailovich Dostoievskii API of the Metadata objects The python implementation of the template functions is passed in a Metadata object. Knowing it s API is useful if you want to define your own template functions. class calibre.ebooks.metadata.book.base.metadata(title, authors=(u Okxe4nd, ), other=none, template_cache=none, formatter=none) A class representing all the metadata for a book. The various standard metadata fields are available as attributes 154 Kapitel 1. Avsnitten

159 of this object. You can also stick arbitrary attributes onto this object. Metadata from custom columns should be accessed via the get() method, passing in the lookup name for the column, for example: #mytags. Use the is_null() (sida 155) method to test if a field is null. This object also has functions to format fields into strings. The list of standard metadata fields grows with time is in STANDARD_METADATA_FIELDS (sida 156). Please keep the method based API of this class to a minimum. Every method becomes a reserved field name. is_null(field) Return True if the value of field is null in this object. null means it is unknown or evaluates to False. So a title of _( Unknown ) is null or a language of und is null. Be careful with numeric fields since this will return True for zero as well as None. Also returns True if the field does not exist. deepcopy(class_generator=<function <lambda>>) Do not use this method unless you know what you are doing, if you want to create a simple clone of this object, use deepcopy_metadata() instead. Class_generator must be a function that returns an instance of Metadata or a subclass of it. get_identifiers() Return a copy of the identifiers dictionary. The dict is small, and the penalty for using a reference where a copy is needed is large. Also, we don t want any manipulations of the returned dict to show up in the book. set_identifiers(identifiers) Set all identifiers. Note that if you previously set ISBN, calling this method will delete it. set_identifier(typ, val) If val is empty, deletes identifier of type typ standard_field_keys() return a list of all possible keys, even if this book doesn t have them custom_field_keys() return a list of the custom fields in this book all_field_keys() All field keys known by this instance, even if their value is None metadata_for_field(key) return metadata describing a standard or custom field. all_non_none_fields() Return a dictionary containing all non-none metadata fields, including the custom ones. get_standard_metadata(field, make_copy) return field metadata from the field if it is there. Otherwise return None. field is the key name, not the label. Return a copy if requested, just in case the user wants to change values in the dict. get_all_standard_metadata(make_copy) return a dict containing all the standard field metadata associated with the book. get_all_user_metadata(make_copy) return a dict containing all the custom field metadata associated with the book. get_user_metadata(field, make_copy) return field metadata from the object if it is there. Otherwise return None. field is the key name, not the label. Return a copy if requested, just in case the user wants to change values in the dict Handledning 155

160 set_all_user_metadata(metadata) store custom field metadata into the object. Field is the key name not the label set_user_metadata(field, metadata) store custom field metadata for one column into the object. Field is the key name not the label template_to_attribute(other, ops) Takes a list [(src,dest), (src,dest)], evaluates the template in the context of other, then copies the result to self[dest]. This is on a best-efforts basis. Some assignments can make no sense. smart_update(other, replace_metadata=false) Merge the information in other into self. In case of conflicts, the information in other takes precedence, unless the information in other is NULL. format_field(key, series_with_index=true) Returns the tuple (display_name, formatted_value) to_html() A HTML representation of this object. calibre.ebooks.metadata.book.base.standard_metadata_fields The set of standard metadata fields. ''' All fields must have a NULL value represented as None for simple types, an empty list/dictionary for complex types and (None, None) for cover_data ''' SOCIAL_METADATA_FIELDS = frozenset([ 'tags', # Ordered list 'rating', # A floating point number between 0 and 10 'comments', # A simple HTML enabled string 'series', # A simple string 'series_index', # A floating point number # Of the form { scheme1:value1, scheme2:value2} # For example: {'isbn':' ', 'doi':'xxxx',... } 'identifiers', ]) ''' The list of names that convert to identifiers when in get and set. ''' TOP_LEVEL_IDENTIFIERS = frozenset([ 'isbn', ]) PUBLICATION_METADATA_FIELDS = frozenset([ 'title', # title must never be None. Should be _('Unknown') # Pseudo field that can be set, but if not set is auto generated # from title and languages 'title_sort', 'authors', # Ordered list. Must never be None, can be [_('Unknown')] 'author_sort_map', # Map of sort strings for each author # Pseudo field that can be set, but if not set is auto generated # from authors and languages 'author_sort', 'book_producer', 'timestamp', # Dates and times must be timezone aware 'pubdate', 156 Kapitel 1. Avsnitten

161 'last_modified', 'rights', # So far only known publication type is periodical:calibre # If None, means book 'publication_type', 'uuid', # A UUID usually of type 4 'languages', # ordered list of languages in this publication 'publisher', # Simple string, no special semantics # Absolute path to image file encoded in filesystem_encoding 'cover', # Of the form (format, data) where format is, for e.g. 'jpeg', 'png', 'gif'... 'cover_data', # Either thumbnail data, or an object with the attribute # image_path which is the path to an image file, encoded # in filesystem_encoding 'thumbnail', ]) BOOK_STRUCTURE_FIELDS = frozenset([ # These are used by code, Null values are None. 'toc', 'spine', 'guide', 'manifest', ]) USER_METADATA_FIELDS = frozenset([ # A dict of dicts similar to field_metadata. Each field description dict # also contains a value field with the key #value#. 'user_metadata', ]) DEVICE_METADATA_FIELDS = frozenset([ 'device_collections', # Ordered list of strings 'lpath', # Unicode, / separated 'size', # In bytes 'mime', # Mimetype of the book file being represented ]) CALIBRE_METADATA_FIELDS = frozenset([ 'application_id', # An application id, currently set to the db_id. 'db_id', # the calibre primary key of the item. 'formats', # list of formats (extensions) for this book # a dict of user category names, where the value is a list of item names # from the book that are in that category 'user_categories', # a dict of author to an associated hyperlink 'author_link_map', ) ] ALL_METADATA_FIELDS = SOCIAL_METADATA_FIELDS.union( PUBLICATION_METADATA_FIELDS).union( BOOK_STRUCTURE_FIELDS).union( USER_METADATA_FIELDS).union( DEVICE_METADATA_FIELDS).union( CALIBRE_METADATA_FIELDS) # All fields except custom fields 1.9. Handledning 157

162 STANDARD_METADATA_FIELDS = SOCIAL_METADATA_FIELDS.union( PUBLICATION_METADATA_FIELDS).union( BOOK_STRUCTURE_FIELDS).union( DEVICE_METADATA_FIELDS).union( CALIBRE_METADATA_FIELDS) # Metadata fields that smart update must do special processing to copy. SC_FIELDS_NOT_COPIED = frozenset(['title', 'title_sort', 'authors', 'author_sort', 'author_sort_map', 'cover_data', 'tags', 'languages', 'identifiers']) # Metadata fields that smart update should copy only if the source is not None SC_FIELDS_COPY_NOT_NULL = frozenset(['lpath', 'size', 'comments', 'thumbnail']) # Metadata fields that smart update should copy without special handling SC_COPYABLE_FIELDS = SOCIAL_METADATA_FIELDS.union( PUBLICATION_METADATA_FIELDS).union( BOOK_STRUCTURE_FIELDS).union( DEVICE_METADATA_FIELDS).union( CALIBRE_METADATA_FIELDS) - \ SC_FIELDS_NOT_COPIED.union( SC_FIELDS_COPY_NOT_NULL) SERIALIZABLE_FIELDS = SOCIAL_METADATA_FIELDS.union( USER_METADATA_FIELDS).union( PUBLICATION_METADATA_FIELDS).union( CALIBRE_METADATA_FIELDS).union( DEVICE_METADATA_FIELDS) - \ frozenset(['device_collections', 'formats', 'cover_data']) # these are rebuilt when needed Använder allmän programmod För mer komplicerade mallprogram, är det ibland lättare att undvika mallsyntax (alla { och } tecken), istället skriva i ett mer klassisk programutseende. Du kan göra detta i calibre genom att börja mallen med program:. I detta fall sker ingen mall behandling. Den speciella variabeln $ är inte satt. Det är upp till ditt program för att producera rätt resultat. En fördel med program: läget är att hakparanteser inte längre speciella. Till exempel är det inte nödvändigt att använda [[ och ]] när du använder template()-funktionen. En annan fördel är att programläges mallar sammanställs till Python och kan köras mycket snabbare än mallar i de andra två lägena. Hastighetsförbättring beror på komplexiteten i de mallar; ju mer komplicerad mall desto förbättringen. Kompileringen är avstängd eller om du använder justering compile_gpm_templates (Compile General Programläges mallar till Python). Det främsta skälet för att stänga av kompilering är om en sammanställd mall inte fungerar, i sådant fall skicka in en felrapport. Följande exempel är ett program: läge implementerande av ett recept på MobileRead forumet:. Placera serier i titeln, antingen med initialer eller en förkortad form Strip ledande artiklar från serienamnet (någon). Till exempel, för boken The Two Towers in the Lord of the Rings-serien, ger receptet LotR [02] The Two Towers. Genom att använda standardmallar, receptet kräver tre anpassade kolumner och en kontrollpanel, såsom förklaras i följande: Lösningen kräver att skapa tre sammansatta kolumner. Den första kolumnen används för att avlägsna de ledande artiklarna. Det andra används för att beräkna den korta formen. Den tredje är för att beräkna initials formen. När du har dessa kolumner, väljer kontrollpanel mellan dem. Du kan dölja någon eller alla av de tre kolumnerna på biblioteksvyn. 158 Kapitel 1. Avsnitten

163 First column: Name: #stripped_series. Template: {series:re(^(a The An)\s+,) } Second column (the shortened form): Name: #shortened. Template: {#stripped_series:shorten(4,-,4)} Third column (the initials form): Name: #initials. Template: {#stripped_series:re(([^\s])[^\s]+(\s $),\1)} Plugboard expression: Template:{#stripped_series:lookup(.\s,#initials,.,#shortened,series)}{series_index:0>2.0f [ ] }{titl Destination field: title This set of fields and plugboard produces: Series: The Lord of the Rings Series index: 2 Title: The Two Towers Output: LotR [02] The Two Towers Series: Dahak Series index: 1 Title: Mutineers Moon Output: Dahak [01] Mutineers Moon Series: Berserkers Series Index: 4 Title: Berserker Throne Output: Bers-kers [04] Berserker Throne Series: Meg Langslow Mysteries Series Index: 3 Title: Revenge of the Wrought-Iron Flamingos Output: MLM [03] Revenge of the Wrought-Iron Flamingos Följande program ger samma resultat som det ursprungliga receptet, med endast en anpassad kolumn för att hålla resultatet av ett program som beräknar den speciella titelvärdet: Custom column: Name: #special_title Template: (the following with all leading spaces removed) program: # compute the equivalent of the composite fields and store them in local variables stripped = re(field('series'), '^(A The An)\s+', ''); shortened = shorten(stripped, 4, '-',4); initials = re(stripped, '[^\w]*(\w?)[^\s]+(\s $)', '\1'); # Format the series index. Ends up as empty if there is no series index. # Note that leading and trailing spaces will be removed by the formatter, # so we cannot add them here. We will do that in the strcat below. # Also note that because we are in 'program' mode, we can freely use # curly brackets in strings, something we cannot do in template mode. s_index = template('{series_index:0>2.0f}'); # print(stripped, shortened, initials, s_index); 1.9. Handledning 159

164 # Now concatenate all the bits together. The switch picks between # initials and shortened, depending on whether there is a space # in stripped. We then add the brackets around s_index if it is # not empty. Finally, add the title. As this is the last function in # the program, its value will be returned. strcat( switch( stripped, '.\s', initials, '.', shortened, field('series')), test(s_index, strcat(' [', s_index, '] '), ''), field('title')); Plugboard expression: Template:{#special_title} Destination field: title Det skulle vara möjligt att göra ovanstående utan extra kolumner genom att sätta programmet i mallen av kontrollpanel. Men för att göra det, måste alla kommentarer tas bort på grund av att kontrlpanelens textrutan inte stöder redigering över flera rader. Det kan diskuteras om vinsten av att inte ha den anpassade kolumnen är värd den stora ökningen i svårigheter på grund av det program som en gigantisk rad. Användardefinierade mallfunktioner Du kan lägga till egna funktioner till mallprocessorn. Sådana funktioner är skrivna i Python, och kan användas i någon av de tre mallprogrammeringslägena. Funktionerna läggs genom att gå till Inställningar->Avancerat->Mallfunktioner. Instruktioner visas i denna dialog. Särskilda anvisningar för att spara/skicka mallar Särskilda bearbetning appliceras när en mall används i en spara på disk eller skicka till enhet produkt mall. Värdena på fälten städas, ersätter tecken som är speciella till filsystem med streck, inklusive snedstreck. Detta innebär att textfältet inte kan användas för att skapa mappar. Men snedstreck inte förändrats prefix eller suffix strängar, så snedstreck i dessa strängar kommer att orsaka mappar skapas. På grund av detta kan du skapa mappstruktur variabelt djup. Antag till exempel att vi vill ha mappstrukturen series/series_index - title, med förbehållet att om serien inte existerar, så bör titeln vara i topp-mappen. Mallen för att göra detta är: {series: /}{series_index: - }{title} Det snedstreck och bindestreck visas bara om serien inte är tom. Uppslagsfunktionen låter oss göra ännu snyggare bearbetning. Antag till exempel att om en bok har en serie, så vi vill att mappstrukturen series/series index - title.fmt. Om boken inte har en serie, så vi vill att mappstrukturen genre/author_sort/title.fmt. Om boken inte har någon genre, vill vi använda Unknown (Okänd). Vi vill två helt olika vägar, beroende på värdet av serien. För att åstadkomma detta, vi: 1. Skapa en sammansatt fält (kalla det AA) som innehåller {series}/{series_index} - {title }. Om serien inte är tom, så kommer den här mallen att producera series/series_index - title. 2. Skapa en sammansatt fält (kalla det BB) som innehåller {#genre:ifempty(unknown)}/{author_sort}/{title}. Denna mall ger genre/author_sort/title, där en tom genre ersätts med Unknown (okänd). 160 Kapitel 1. Avsnitten

165 3. Ställ spara mallen till {series:lookup(.,aa,bb)}. Denna mall väljer sammansatta fält AA om serien inte är tom, och sammansatta fält BB om serien är tom. Vi har alltså två helt olika sparvägar, beroende på om eller inte series är tom. Mallar och kontrollpaneler Kontrollpanel används för att ändra metadata som skrivs in böcker under skicka till enhet och spara till disk operationer. En kontrollpanel tillåter dig att ange en mall för att tillhandahålla de uppgifter att skriva in bokens metadata. Du kan använda kontrollpaneler att ändra följande fält: författare, author_sort, språk, förläggare, etiketter, titel, title_sort. Denna funktion hjälper människor som vill använda olika metadata i böcker på enheter för att lösa sortering- eller visningsproblem. När du skapar en kontrollpanel anger du format och enheten för vilken kontrollpanelen ska användas. En speciell anordning tillhandahålls, save_to_disk, som används när du sparar format (i motsats till att skicka dem till en enhet). När du har valt formatet och enheten, väljer du de metadatafälten att ändra, ger mallar för att leverera de nya värdena. Dessa mallar är anslutna till sina destinationsfält, därav namnet kontrollpanel. Du kan naturligtvis använda sammansatta kolumner i dessa mallar. När en kontrollpanel kan gälla (innehållsserver, spara till disk, eller skicka till enhet), söker calibre de definierade kontrollpaneler att välja den rätta för givet format och enhet. Till exempel, för att hitta rätt kontrollpanel för en EPUBbok som skickas till en Android-enhet, söker calibre dessa kontrollpaneler enligt följande sökordning: en kontrollpanel med en exakt passning på format och enhet, till exempel, EPUB och ANDROID en kontrollpanel med en exakt passning på format och den speciella any device val, till exempel, EPUB och any device en kontrollpanel med en exakt passning på format och den speciella any device val, och ANDROID en kontrollpanel med något format och någon enhet Etiketterna och författare fält har särskild behandling, eftersom båda dessa områden kan ha mer än en post. En bok kan ha många etiketter och många författare. När du anger att ett av dessa två områden ska ändras, är mallens resultat som undersöks för att se om mer än en post finns. För etiketter, skärs resultatet bort varhelst calibre finner ett kommatecken. Till exempel, om mallen producerar värdet Thriller, Horror, då blir resultatet två etiketter, Thriller och Horror. Det finns inget sätt att sätta ett kommatecken i mitten av en etikett. Samma sak händer för författare, men med en annan karaktär för snittet, en & (et-tecken) i stället för ett kommatecken. Till exempel, om mallen producerar värdet Blogs, Joe&Posts, Susan, då kommer boken att sluta med två författare, Blogs, Joe och Posts, Susan. Om mallen producerar värdet Blogs, Joe;Posts, Susan, då kommer boken att ha en författare med ett ganska konstigt namn. Kontrollpaneler påverkar metadata som skrivs in i boken när den sparas till disk eller skrivs till enheten. Kontrollpaneler påverkar inte metadata som används av spara till disk och skicka till enhet för att skapa filnamnen. Istället konstrueras filnamn med hjälp av mallar som anges i lämpliga inställningsfönster. Användbara tips Du kan hitta följande tips användbart. Skapa en anpassad sammansatt kolumn för att testa mallar. När du har kolumnen, kan du ändra dess mall genom att dubbelklicka på kolumnen. Dölj kolumnen när du inte testar. Mallar kan använda andra mallar genom att referera en sammansatt anpassad kolumn. I en kontrolpanel, kan du ställa in ett fält för att vara tomt (eller vad som motsvarar tom) med hjälp av särskild mall {}. Denna mall kommer alltid utvärderas till en tom sträng Handledning 161

166 Den teknik som beskrivs ovan för att visa siffror även om de har ett nollvärde fungerar med standardfält series_index Allt om att använda reguljära uttryck i calibre Reguljära uttryck är funktioner som används på många ställen i calibre för att utföra avancerad manipulation av e- bokens innehåll och metadata. Denna handledning är en mild introduktion till att få dig igång med att använda vanliga uttryck i calibre. Innehåll Först ett varningens ord och ett ord av mod (sida 162) Var i calibre kan du använda reguljära uttryck? (sida 162) Vad i hela världen är ett reguljärt uttryck? (sida 162) Vill du förklara? (sida 163) Det låter inte så illa. Vad händer nu? (sida 163) Hej, snyggt! Detta börjar låta vettigt! (sida 163) Tja, är dessa specialtecken är mycket snygga och allt, men vad händer om jag ville passa mot en punkt eller ett frågetecken? (sida 164) Så, vilka är de mest användbara uppsättningarna? (sida 164) Men om jag hade några olika strängar jag ville passa mot, blir inte saker komplicerade? (sida 164) Du missade... (sida 165) I början sa du att det var ett sätt att göra ett reguljärt uttryck teckenskiftsokänsligt? (sida 165) Jag tror jag börjar förstå dessa reguljära uttryck nu... hur använder jag dem i calibre? (sida 165) Omvandlingar (sida 165) Lägga till böcker (sida 166) Massredigera metadata (sida 166) Erkännande (sida 167) Först ett varningens ord och ett ord av mod Detta kommer, oundvikligen, att vara något teknisk- trots allt, reguljära uttryck är ett tekniskt verktyg för att göra tekniska saker. Jag kommer att behöva använda en del jargong och begrepp som kan verka komplicerat och invecklat. Jag ska försöka förklara dessa begrepp så tydligt som jag kan, men egentligen kan jag inte göra det utan att använda dem alla. Med detta sagt, förkasta inte detta på grund av all jargong, jag har försökt att förklara allt nytt. Och medan reguljära uttryck själva kan verka som en svårbegripliga, svart magi (eller för att vara mer prosaisk, en slumpmässig sträng av rappakalja bokstäver och tecken), jag lovar att det är inte så komplicerat. Även de som förstår vanliga uttryck riktigt bra kan ha problem med att läsa de mer komplexa, men att skriva dem är inte så svårt - du konstruerar uttrycket steg för steg. Så, ta ett steg och följa mig in i kaninhålet. Var i calibre kan du använda reguljära uttryck? Det finns ett fåtal platser calibre använder reguljära uttryck. Det finns Sök & Ersätt i konverteringsalternativ, metadatadetektering från filnamn i importinställningar och Sök och ersätt när du redigerar metadata för böcker i grupp. Calibre editorn kan även använda reguljära uttryck i sin sök och ersätt -funktion. Vad i hela världen är ett reguljärt uttryck? Ett reguljärt uttryck är ett sätt att beskriva en uppsättningar strängar. En enda reguljära uttryck kan passa flera olika strängar. Det är det som gör reguljära uttryck så kraftfulla - de är ett kortfattad sätt att beskriva ett potentiellt stort antal 162 Kapitel 1. Avsnitten

167 varianter. Observera: Jag använder sträng här i den mening den används i programspråk: en sträng av ett eller flera tecken, tecken inklusive faktiska tecken, siffror, skiljetecken och sk blanktecken (radbrytningar, tabulatorer etc.). Observera att i allmänhet anses inte stora och små bokstäver vara samma, alltså a som en annan karaktär från A och så vidare. I calibre, är reguljära uttryck skiftlägesokänslig i sökfältet, men inte i konverteringsalternativet. Det finns ett sätt att göra alla reguljära uttryck fall okänsligt, men vi kommer att diskutera det senare. Det blir komplicerat eftersom reguljära uttryck tillåter variationer i stråk det passar, så ett uttryck kan passa flera strängar, vilket är varför folk bryr sig att använda dem. Mer om det om ett tag. Vill du förklara? Tja, det är därför vi är här. För det första är detta det viktigaste konceptet i reguljära uttryck: En sträng i sig är ett reguljärt uttryck som passar mot sig själv. Det vill säga, om jag ville passa mot strängen Hej, värld! genom att använda ett reguljärt uttryck, skulle det reguljära uttrycket för att använda vara Hej, värld!. Och ja, det är verkligen så enkelt. Du kommer att märka dock att detta bara passar den exakta strängen Hej, värld!, Inte t.ex. Hej världen! Eller Hej, världen! Eller någon annan sådan variation. Det låter inte så illa. Vad händer nu? Nästa är början på riktigt bra grejer. Kom ihåg var jag sa att reguljära uttryck kan passa mot flera strängar? Det är här det blir lite mer komplicerat. Säg, som en något mer praktisk övning, e-boken du ville konvertera hade en otäck sidfot som räknar sidor, Sida 5 av 423. Uppenbarligen skulle sidnumret stiga 1-423, så du skulle behöva passa mot 423 olika strängar, eller hur? Fel, faktiskt: reguljära uttryck kan du definiera uppsättningar av tecken som passande: För att definiera en uppsättning, du lägger alla de tecken du vill vara i uppsättningen inom hakparenteser. Så, till exempel, uppsättningen [abc] skulle passa antingen tecknet a, b eller c. uppsättningarna kommer alltid bara passa en av karaktärerna i uppsättningen. De förstår teckenformattering, det vill säga om du ville passa mot alla små bokstäver, skulle du använda den inställda [az] för gemener och versaler som du skulle använda [a-za Z] osv. förstår du principen? Så, självklart, med hjälp av uttrycket Sida [0-9] i 423 du skulle kunna passa de första nio sidorna, vilket minskar uttrycken behövs för tre: Det andra uttrycket Sida [0-9] [0-9] av 423 skulle passa alla tvåsiffriga sidnummer, och jag är säker på att du kan gissa vad den tredje uttryck skulle se ut. Ja, gå vidare. Skriv ner det. Hej, snyggt! Detta börjar låta vettigt! Jag hoppades att du skulle säga det. Men förvänta dig själv, nu blir det ännu bättre! Vi såg precis att du använder apparater, kunde vi passa ett av flera tecken på en gång. Men du kan även upprepa ett tecken eller uppsättning, för att minska antalet uttryck som behövs för att hantera det ovan sidnummerexemplet till ett. Ja, ETT! Upphetsad? Du bör vara det! Det fungerar så här: En del så kallade specialtecken +,? och *, * upprepa enda element som föregår dem*. (Element antingen ett enda tecken, en teckenuppsättning, en escape-sekvens eller en grupp (vi ska lära oss om de två sista senare) -. Kort sagt, en enda enhet i ett reguljärt uttryck) är Dessa tecken kallas jokertecken eller kvantifikatorer. För att vara mer exakt,? passar 0 eller 1 förekomster av det föregående elementet, * passar 0 eller flera för det föregående elementet och + passar 1 eller flera av det föregående elementet. Några exempel:? Uttrycket a skulle passa antingen (som är den tomma strängen, inte strikt användbar i detta fall) eller a, uttrycket a* skulle passa mot, a, aa eller valfritt antal a: n i rad, och slutligen uttrycket a+ skulle passa a, aa eller valfritt antal a: n i rad (Obs: det skulle inte passa mot den tomma strängen!). Samma gäller för uppsättningar: Uttrycket [0-9]+ skulle passa varje heltal finns det! Jag vet vad du tänker, och du har rätt: Om du använder det i ovanstående fall passa mot sidnummer, skulle inte det vara det enda uttryck som passar alla sidnummer? Ja, uttrycket Page [0-9]+ av 423 skulle passa mot varje sidnummer i boken! 1.9. Handledning 163

168 Observera: En kommentar om dessa kvantifikatorer: De försöker i allmänhet att passa mot så mycket text som möjligt, så var försiktig när du använder dem. Detta kallas girigt beteende - Jag är säker på att du förstår varför. Det blir problematiskt när man, säg, försöker passa mot en etikett. Tänk till exempel, strängen "<p class ="calibre2"> Titel här </p>" och låt oss säga att du skulle vilja passa startmarkeringne (delen mellan det första paret vinkelfästen, lite mer om etiketter senare). Man skulle kunna tro att uttrycket <p.*> Skulle passa mot den markeringen, men faktiskt, passar det hela strängen! (Tecknet. Är ett annat specialtecken. Den passar något utom radbrytningar, så i grund och botten, uttrycket.* Skulle passa vilken rad du än kan tänka dig.) Försök istället att använda <p.*?> som gör kvantifierare * icke-giriga. Detta uttryck skulle bara passa den första öppningsmarkeringen, som avsett. Det finns faktiskt ett annat sätt att åstadkomma detta: Uttrycket <p[^>]*> passar denna öppningsmarkering- du kommer se varför efter nästa avsnitt. Bara konstatera att det ganska ofta finns mer än ett sätt att skriva ett reguljärt uttryck. Tja, är dessa specialtecken är mycket snygga och allt, men vad händer om jag ville passa mot en punkt eller ett frågetecken? Du kan givetvis göra det: Bara sätt ett omvänt snedstreck (bakåtsnedstreck) framför någon speciell karaktär och det tolkas som bokstavskaraktär, utan någon speciell betydelse. Detta par av ett omvänt snedstreck följt av ett enda tecken kallas en escape-sekvens (flyktsekvensen), och handlingen att sätta ett omvänt snedstreck framför ett specialtecken kallas escape-tecknet (flykttecken). En flyktsekvensen tolkas som ett enda element. Det finns naturligtvis flyktsekvensener som gör mer än att bara flyr specialtecken, till exempel t : en tabulator. Vi kommer till en del av de kontrollsekvenser senare. Åh, och förresten, om dessa specialtecken: Tänk alla tecken som vi diskuterar i denna introduktion som har någon funktion att vara speciell och därför kan behöva flyktmarkeras om du vill ha bokstavskaraktären. Så, vilka är de mest användbara uppsättningarna? Visste att du skulle fråga. Några användbara uppsättningar är [0-9] passar ett enda nummer, [az] passar en enda liten bokstav, [AZ] passar en enda versal [a-za Z] passar en enda bokstav och [a-za-z0-9] passar en enda bokstav eller siffra. Du kan också använda en flyktsekvens (escape-sekvens) som stenografer: \d is equivalent to [0-9] \w is equivalent to [a-za-z0-9_] \s is equivalent to any whitespace Observera: Blanktecken är en term för något som inte kommer att skrivas ut. Dessa tecken inkluderar utrymme, tabulator, radmatning, sidmatning och vagnretur. Som en sista anmärkning om grupper, du kan också definiera en uppsättning som alla tecken men de i uppsättningen. Du gör det genom att inkludera tecknet "^" som det första tecknet i uppsättningen. Således [^ a] skulle passa alla tecken utom a. Det kallas att komplettera uppsättningen. Dessa flyktsekvens stenografier vi såg tidigare kan också kompletteras: "\D": vilket betyder någon ickenummer-karaktär, vilket är ekvivalent med [^0-9]. De andra stenografier kan kompletteras med, du gissade rätt, med hjälp av respektive versal i stället för det gemena tecknet. Så, går tillbaka till exemplet <p[^>]* > från föregående avsnitt, nu kan du se till att teckenuppsättning det använder försöker passa alla tecken med undantag för ett avslutande vinkelparentes. Men om jag hade några olika strängar jag ville passa mot, blir inte saker komplicerade? Frukta inte, ändå är livet bra och lätt. Tänk på detta exempel: Boken du konverterar har Titel skrivet på varje udda sida och författare skrivet på varje jämn sida. Ser bra i tryck, eller hur? Men i e-böcker, är det irriterande. Du kan gruppen hela uttryck i normala parenteser och tecknet " " låter dig passa antingen uttrycket till höger eller det till vänster. Kombinera dessa och du är klar. För fort för dig? Okej, först ut, vi grupperar uttrycken för udda och jämna 164 Kapitel 1. Avsnitten

169 sidor och på så sätt få (titel) (författare) som våra två nödvändiga uttryck. Nu gör vi det enklare genom att använda det lodräta strecket (" " kallas lodrätt strecktecken): Om du använder uttrycket (Titel Författare) kommer du antingen få en passning för Titel (på udda sidor) eller du skulle passa mot författare (på jämna sidor). Tja, var inte så lätt? Du kan naturligtvis använda det lodräta strecket utan att använda grupperingsparenteser, lika så. Kommer du ihåg när jag sa att kvantifierare upprepar elementet som föregår dem? Tja, det vertikala strecket fungerar lite annorlunda: Uttrycket Titel Författare kommer också att passa antingen strängen Titel eller strängen Författare, precis som ovanstående exempel med hjälp av gruppering. Det vertikala strecket väljer mellan hela uttrycket före och efter den. Så, om du ville matcha strängarna Calibre och calibre och ville bara välja mellan det övre och små bokstäver c, skulle du behöva använda uttrycket (c C)alibre, där grupperingen säkerställer att endast c kommer att väljas. Om du skulle använda c Calibre, du skulle få en match på strängen c eller på strängen Calibre, vilket inte är vad vi ville ha. Kort sagt: Om du är osäker, använd gruppering tillsammans med det vertikala strecket. Du missade Vänta lite, det finns en sista, riktigt snygg sak du kan göra med uppsättningar. Om du har en uppsättning som du tidigare passade mot kan du använda referenser till uppsättningen senare i uttrycket: Uppsättningar är numrerade med början 1, och du refererar till dem genom att flyktnumret på den uppsättning som du vill referera till, alltså den femte gruppen skulle kallad \5. Så, om du sökte ([^]+)\1 i strängen Test Test, skulle du passa mot hela strängen! I början sa du att det var ett sätt att göra ett reguljärt uttryck teckenskiftsokänsligt? Ja, det gjorde jag, tack för att uppmärksammade och påminde mig. Du kan berätta för calibre hur du vill vissa saker hanteras med hjälp av något som kallas flaggor. Du inkluderar flaggor i ditt uttryck med hjälp av speciella konstruktionen (? Flaggor finns här) där, naturligtvis, skulle du byta ut flaggor finns här med de specifika flaggor du vill ha. För att ignorera teckenskiftsläge finns flaggan i därmed inkluderar du (?i) i ditt uttryck. Således test(?i) skulle passa mot Test, test, TEst, och varje fall variation du kan tänka dig. En annan användbar flagga tillåter att pricka in alla tecken, inklusive på ny rad, flaggan s. Om du vill använda flera flaggor i ett uttryck, bara sätta dem i samma gruppering: (?is) skulle ignorera teckenskiftsläge och göra passa alla. Det spelar ingen roll vilken flagga som du anger först, (?si) skulle motsvara den ovan. Förresten, skulle bra ställen för att sätta flaggor i ditt uttryck är antingen i början eller slutet. Då behöver de inte blandas ihop med något annat. Jag tror jag börjar förstå dessa reguljära uttryck nu... hur använder jag dem i calibre? Omvandlingar Låt oss börja med konverteringsinställningarna, vilket är riktigt snyggt. I Sök- och ersättsdel, kan mata in en regexp (kort för reguljära uttryck) som beskriver den sträng som kommer att bytas ut under omvandlingen. Den nätta delen är guiden. Klicka på guiden och du får en förhandsvisning av vad calibre ser under konverteringen. Bläddra ner till den sträng som du vill ta bort, markera och kopiera den, klistra in den i regexp fältet högst upp i fönstret. Om det finns variabla delar, t.ex. sidnummer eller så använder uppsättningar och kvantifierare för att täcka dem, och medan du ändå håller på, kom ihåg att undkomma specialtecken, om det finns några. Klicka på knappen Test och calibre belyser delarna som skulle ersättas om du använder regexp. När du är nöjd, klicka på OK och konvertera. Var försiktig om din konverteringskällan har etiketter som detta exempel Maybe, but the cops feel like you do, Anita. What's one more dead vampire? New laws don't change that. </p> <p class="calibre4"> <b class="calibre2">generated by ABC Amber LIT Conv <a href=" class="calibre3">erter, Handledning 165

170 <p class="calibre4"> It had only been two years since Addison v. Clark. The court case gave us a revised version of what life was (skamlöst utsliten denna tråd < > _). Du skulle behöva ta bort en del av de etiketter också. I det här exemplet jag skulle rekommendera börjar med etiketten <b class = calibre2 >, nu måste du sluta med motsvarande avslutande etikett (öppnande etikett är <tag>, avslutande etikett är </tag> ), som helt enkelt är nästa </b> i detta fall. (Se en bra HTML-handboken eller fråga i forumet om du är osäker på denna punkt.) Öppnande etiketter kan vara beskrivna med <b.*?>, den avslutande etiketter med hjälp av </b>, vilket vi kunde ta bort allt mellan dessa etiketter med hjälp av <b.*?>.*?</b>. Men att använda detta uttryck skulle vara en dålig idé, eftersom det tar bort allt som omges av <b> - etiketter (som förresten, gör den medföljande text i fetstil), och det är en rimlig satsning som vi kommer att ta bort delar av boken på det här sättet. Istället, omfattar början av den medföljande strängen också, vilket gör det reguljära uttrycket <b.*?>\s * Skapad \ s + med \ s + ABC \ s + Amber \ s + LIT. *?</b> det \s med kvantifierare ingår här i stället för explicit använder utrymmena som sett i strängen för att fånga några varianter av den sträng som kan uppstå. Kom ihåg att kontrollera vad calibre kommer att ta bort för att se till att du inte bort några delar som du vill behålla, om du testar ett nytt uttryck. Om du bara kolla en förekomst, kanske du missar en obalans någon annanstans i texten. Observera också att om du av misstag tar bort fler eller färre etiketter än du faktiskt ville, calibre försöker reparera den skadade koden efter avlägsnandet gjorts. Lägga till böcker En annan sak du kan använda reguljära uttryck för är att utvinna metadata från filnamn. Du hittar den här funktionen Lägga till böcker i en del av inställningarna. Det finns en speciell funktion här: Du kan använda fältnamn för metadatafält, till exempel (?P<titel>) tyder på att Calibre använder denna del av strängen som boktiteln. De tillåtna fält namn upptas i fönstren, tillsammans med en annan trevlig testfält. Ett exempel: Säg att du vill importera en hel massa filer namnges som Klassiska texter: Den gudomliga komedin av Dante Alighieri.mobi. (Uppenbarligen är detta redan i ditt bibliotek, eftersom vi alla älskar klassisk italiensk poesi) eller science epos: Stiftelsen Trilogy av Isaac Asimov.epub. Detta är naturligtvis ett namngivningssystem som calibre inte kommer att packa några meningsfulla uppgifter ur sitt standarduttryck för att extrahera metadata är (?P<title>.+) - (?P<author>[^_]+). Ett reguljärt uttryck som fungerar här skulle vara [a-za-z]+: (?P<title>.+) by (?P<author>.+). Observera att inom gruppen för metadatafält, måste du använda uttryck för att beskriva vad fältet verkligen ska passa. Och också notera att, vid användning av testfältet calibre ger, måste du lägga till filändelsen till testning filnamn, annars kommer du inte få några passningar alls, trots användningen av ett fungerande uttryck. Massredigera metadata Den sista delen är reguljära uttryck sök och ersätt i metadatafält. Du kan komma åt detta genom att markera flera böcker i biblioteket och genom massmetadataredigering. Var mycket försiktig när du använder denna sista funktion, eftersom det kan göra Mycket dåliga saker till ditt bibliotek! Dubbelkolla att dina uttryck verkligen gör vad du vill att de ska med hjälp av testfält, och bara markera de böcker du verkligen vill förändra! I det reguljära uttrycket sökläget kan du söka i ett fält, byta ut texten med något och till och med skriva in resultatet i ett annat fält. Ett praktiskt exempel: Anta ditt bibliotek innehöll böcker av Frank Herberts Dune-serien, uppkallad efter stilen Dune 1 - Dune, Dune 2 - Dune Messiah osv. Nu vill du få Dune in i serien fältet. Du kan göra det genom att söka efter \d+(*.?) -.* I titelfältet och ersätta den med \1 i serien fältet. Se vad jag gjorde där? Det är en referens till den första gruppen som du byter ut seriefält med. Nu när du har serien allt klart, bara måste du göra en ny sökning efter.*? - I titelfältet och ersätta den med (en tom sträng), en gång i titelfältet, och ditt metadata är allt snyggt och prydligt. Är inte det bra? Förresten, i stället för att byta ut hela fältet, kan du också bifoga eller lägga till fältet, så, om du ville att bokens titel ska infogas med serier info, kan du göra det också. Som ni nu har utan tvivel märkt, det finns en kryssruta märkt Skiftlägeskänslig, så att du inte behöver använda flaggor för att välja beteende här. 166 Kapitel 1. Avsnitten

171 Tja, det nästan avslutar en mycket kort introduktion till reguljära uttryck. Förhoppningsvis kommer jag ha visat dig tillräckligt för att åtminstone komma igång och så att du kan fortsätta lära dig själv - en bra utgångspunkt skulle vara Python dokumentationen för reguljära uttryck 62. Ett sista ord av varning, emellertid: Regexps är kraftfulla, men också riktigt lätt att göra fel. calibre ger riktigt bra testmöjligheter för att se om dina uttryck beter sig som du förväntar dig. Använd dem. Försök att inte skjuta dig själv i foten. (Gud, jag älskar det uttrycket...) Men om du trots varningen, skada foten (eller andra kroppsdelar), försök att lära av det. Erkännande Tack för hjälp med tips, rättningar och liknande: ldolse kovidgoyal chaley dwanthny kacir Starson17 För mer om reguljära uttryck se The Python User Manual _ Integrera calibre innehållsserver till andra servrar Här, vi kommer visa hur du integrerar calibre-innehållsserver till en annan server. Den vanligaste orsaken till detta är att använda sig av SSL eller mer sofistikerad autentisering. Det finns två huvudsakliga metoder: Köra calibreinnehållsserver som en fristående process och med hjälp av en omvänd proxy för att ansluta den med din huvudsakliga server eller kör innehållsservern i processen i huvudservern med WSGI. Exemplen nedan är alla för Apache 2.x på Linux, men bör vara lätt att anpassa till andra plattformar. Innehåll Använder en omvänd proxy (sida 167) Under bearbetning (sida 168) Observera: Detta gäller bara Calibre-versioner >= Använder en omvänd proxy En omvänd proxy är när din normala servern accepterar inkommande förfrågningar och skickar dem på calibre - servern. Det läser sedan svaret från calibre-servern och vidarebefordrar det till klienten. Detta innebär att du helt enkelt kan köra calibre-servern som vanligt utan att försöka integrera den nära med din huvudsakliga-server, och du kan dra nytta av oavsett autentiseringssystem din huvudservern har på plats. Detta är det enklaste tillvägagångssättet eftersom det tillåter dig att använda den binära calibre som installerats utan yttre beroenden / krav systemintegration. Nedan är ett exempel på hur detta kan uppnås med Apache som huvudserver, men det kommer att fungera med alla servrar som stöder Reverse Proxy Handledning 167

172 Först starta calibre-innehållsserver som visas nedan: calibre-server --url-prefix /calibre --port 8080 Nyckelparametern här är --url-prefix /calibre. Den får innehållsservern att serva alla URL:er som prefixas av Calibre. För att se detta i handling, besök i din webläsare. Du bör se den normala innehållsserverns hemsida, men nu kör den under /calibre. Nu antag att du använder Apache som huvudserver. Först tillåt proxy-moduler i apache genom att lägga till följande httpd.conf: LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so Den exakta tekniken för att möjliggöra proxymoduler varierar beroende på din Apache-installation. När du aktiverar proxy-modulerna, lägg till följande regler till httpd.conf (eller om du använder virtuella värdar till conf-filen för den virtuella värden i fråga): RewriteEngine on RewriteRule ^/calibre/(.*) [proxy] RewriteRule ^/calibre [proxy] SetEnv force-proxy-request SetEnv proxy-nokeepalive 1 Det är allt, du kommer nu kunna accessa calibre-innehållsservern under /calibre URL i din apache-server. Ovan regler vidarbefodrar alla begäran under /calibre till Calibre-server som kör på port 8080 och tack vare -url-prefixet valet ovan, kommer Calibre-server hantera dem transparent. Observera: Om du är villig att ägna en hel virtuellvärd till innehållsserver så kommer du inte behöva använda urlprefixet och skriva om regler utan bara använda ProxyPass direktivet. Observera: Servermotorn Calibre använder, CherryPy, kan ha problem med proxy och KeepAlive -begäran, så stäng av dem i Apache, med SetEnv direktivet som visas ovan. Under bearbetning Calibres innehållsserver kan köra direkt, i processen, i en värdserver som Apache genom att använda WSGI-ramverk. Observera: För att detta ska fungera, måste alla beroenden som behövs av Calibre vara installerade på ditt system. Att göra detta är en högst icke-trivialt och du uppmanas att inte använda i processervrar. Du kommer inte få någon hjälp med felsökning för serverprocessproblem. Först, måste vi skapa en WSGI anpassning för Calibres-innehållsserver. Här är en mall som du kan använda för detta syfte. Ersätt sökvägar som anvisas i kommentarerna # WSGI script file to run calibre content server as a WSGI app import sys, os # You can get the paths referenced here by running # calibre-debug --paths # on your server 168 Kapitel 1. Avsnitten

173 # The first entry from CALIBRE_PYTHON_PATH sys.path.insert(0, '/home/kovid/work/calibre/src') # CALIBRE_RESOURCES_PATH sys.resources_location = '/home/kovid/work/calibre/resources' # CALIBRE_EXTENSIONS_PATH sys.extensions_location = '/home/kovid/work/calibre/src/calibre/plugins' # Path to directory containing calibre executables sys.executables_location = '/usr/bin' # Path to a directory for which the server has read/write permissions # calibre config will be stored here os.environ['calibre_config_directory'] = '/var/www/localhost/calibre-config' del sys del os from calibre.library.server.main import create_wsgi_app application = create_wsgi_app( # The mount point of this WSGI application (i.e. the first argument to # the WSGIScriptAlias directive). Set to empty string is mounted at / prefix='/calibre', # Path to the calibre library to be served # The server process must have write permission for all files/dirs # in this directory or BAD things will happen path_to_library='/home/kovid/documents/demo library', ) # The virtual library (restriction) to be used when serving this # library. virtual_library=none del create_wsgi_app Spara denna anpassning som calibre-wsgi-adpater.py någonstans som din server har access till. Låt oss anta att vi vill använda WSGI i Apache. Först tillåt WSGI i Apache genom att lägga till följande httpd.conf: LoadModule wsgi_module modules/mod_wsgi.so Den exakta tekniken för att tillåta wsgi-modulen kommer variera beroende på din Apache-installation. När du har tillåtit proxy-moduler, lägg till följande regler till httpd.conf (eller om du använder virtuella värdar till conf-filen för den virtuella värden i fråga: WSGIScriptAlias /calibre /var/www/localhost/cgi-bin/calibre-wsgi-adapter.py Ändra sökväg till calibre-wsgi-adapter.py till vad oavset tdu sparade den tidigare (se bara till att Apache har access till den). Det är allt, du kommer nu kunna nå calibre-innehållsservern under /calibre-url i din apache-server. Observera: För mer hjälp med att använda mod_wsgi i Apache, se mod_wsgi Handledning 169

174 1.9.6 Skriva dina egna tillägg för att utöka calibres funktionalitet calibre är en väldigt modulär konstruktion. Nästan alla funktioner i calibre kommer i form av tilläggsprogram. Tilläggsprogram används för omvandling, för nedladdning av nyheter (även om dessa kallas för recept), för diverse komponenter av användargränssnitt, för anslutning av olika enheter, för bearbetning av filer när de läggs till calibre och så vidare. Du kan få en komplett lista av alla inbyggda tilläggsprogram i calibre genom att gå till Inställningar->Tillägg. Här kommer vi att lära dig att skapa dina egna tillägg för att lägga till nya funktioner för att calibre. Innehåll Anatomi av ett calibre-tillägg (sida 170) Ett gränssnittstillägg (sida 171) init.py (sida 172) ui.py (sida 173) main.py (sida 174) Att få resurser från tilläggs zip-filen (sida 177) Aktivera konfiguration användare av ditt tillägg (sida 177) Redigera boktillägg (sida 179) main.py (sida 179) Lägger till översättningar till ditt tillägg (sida 182) Tilläggs-API (sida 182) Felsök tilläggen (sida 183) Fler tilläggsexempel (sida 183) Dela dina tillägg med andra (sida 183) Observera: Detta gäller bara calibreversioner >= Anatomi av ett calibre-tillägg Ett calibre-tillägg är mycket enkel, det är bara en zip-fil som innehåller en del python-kod och alla andra resurser som bildfiler som behövs av tillägget. Utan vidare väsem, låt oss se ett grundläggande exempel. Anta att du har en installation av calibre som du använder för att själv publicera olika e-dokument i EPUB- och MOBIformat. Du vill att alla filer som genereras av calibre att få sin förläggare in som Hej världen, här är hur man gör det. Skapa en fil med namnet: file: init py (detta är ett särskilt namn och ska alltid användas för huvudfilen för ditt tillägg) och skriv in följande Python-kod i den.: import os from calibre.customize import FileTypePlugin class HelloWorld(FileTypePlugin): name = 'Hello World Plugin' # Name of the plugin description = 'Set the publisher to Hello World for all new conversions' supported_platforms = ['windows', 'osx', 'linux'] # Platforms this plugin will run on author = 'Acme Inc.' # The author of this plugin version = (1, 0, 0) # The version number of this plugin file_types = set(['epub', 'mobi']) # The file types that this plugin will be applied to on_postprocess = True # Run this plugin after conversion is complete minimum_calibre_version = (0, 7, 53) def run(self, path_to_ebook): 170 Kapitel 1. Avsnitten

175 from calibre.ebooks.metadata.meta import get_metadata, set_metadata file = open(path_to_ebook, 'r+b') ext = os.path.splitext(path_to_ebook)[-1][1:].lower() mi = get_metadata(file, ext) mi.publisher = 'Hello World' set_metadata(file, mi, ext) return path_to_ebook Det är allt. För att lägga till denna kod till calibre som ett tillägg, bara kör följande i katalogen där du skapade: file: init py ::. calibre-customize -b. Observera: På OS X, kommandoradverktyget är inne i calibre paketet, till exempel om du installerar Calibre i /Applications är kommandoradverktyget i /Applications/calibre.app/Contents/console.app/Contents/MacOS/. Du kan ladda ner Hello World plugin från helloworld_plugin.zip 64. Varje gång du använder calibre att konvertera en bok, kommer tillägget: meth: run metod att anropas och den konverterade boken kommer att ha sin förläggare satt till Hello World. Detta är ett trivialt tillägg, låt oss gå vidare till ett mer komplext exempel som faktiskt lägger till en komponent till användargränssnittet. Ett gränssnittstillägg Detta tillägg kommer att spridas över några filer (för att hålla koden ren). Det kommer att visa dig hur du får resurser (bilder eller datafiler) från tilläggs zip-filen, tillåta användare att konfigurera tillägg, hur man skapar element i calibres användargränssnittet och hur man kommer åt och söka i böcker databasen i calibre. Du kan ladda ner tillägg från interface_demo_plugin.zip 65 Det första att notera är att denna zip-filen har mycket fler filer i sig, som förklaras nedan, ta särskild hänsyn till plugin-import-name-interface_demo.txt. plugin-import-name-interface_demo.txt En tom textfil som används för att göra det möjligt för multifils tilläggsmagi. Filen måste finnas i alla tillägg som använder mer än en.py fil. Den ska vara tom och filnamnet måste vara på formen: plugin-import-namn - some_name txt Förekomsten av denna fil tillåter dig att importera koden från.py filerna som finns inne i zip-filen, med hjälp av ett uttalande. liknande: from calibre_plugins.some_name.some_module import some_object Prefixet calibre_plugins måste alltid vara närvarande. some_name kommer från filnamnet på den tomma textfilen. some_module avser :file: some_module.py fil inne i zip-filen. Observera att denna import är lika kraftfull som valig python-importering. Du kan skapa paket och underpaket för.py moduler inuti zip-filen, precis som du normalt skulle (genom att definiera init.py i varje underkatalog), och allt ska bara fungera. Namnet du använda för some_name går in i en globala namnrymden delas av alla plugins, så gör det så unikt som möjligt. Men kom ihåg att det måste vara en giltigt python-identifierare (endast alfabet, siffror och understreck). init.py Liksom tidigare filen som definierar tilläggsklassen Handledning 171

176 main.py Den här filen innehåller den faktiska koden som gör något nyttigt ui.py Denna fil definierar gränssnittsdelen av tillägget images/icon.png Ikonen för detta tillägg about.txt En textfil med information om tillägget translations En mapp innehåller.mo filer med översättningar av användargränssnittet i ditt tillägg till olika språk. Se nedan för detaljer. Låt oss nu titta på koden. init.py örst den obligatoriska init py för att definiera tilläggsmetadata.: # The class that all Interface Action plugin wrappers must inherit from from calibre.customize import InterfaceActionBase class InterfacePluginDemo(InterfaceActionBase): ''' This class is a simple wrapper that provides information about the actual plugin class. The actual interface plugin class is called InterfacePlugin and is defined in the ui.py file, as specified in the actual_plugin field below. The reason for having two classes is that it allows the command line calibre utilities to run without needing to load the GUI libraries. ''' name = 'Interface Plugin Demo' description = 'An advanced plugin demo' supported_platforms = ['windows', 'osx', 'linux'] author = 'Kovid Goyal' version = (1, 0, 0) minimum_calibre_version = (0, 7, 53) #: This field defines the GUI plugin class that contains all the code #: that actually does something. Its format is module_path:class_name #: The specified class must be defined in the specified module. actual_plugin = 'calibre_plugins.interface_demo.ui:interfaceplugin' def is_customizable(self): ''' This method must return True to enable customization via Preferences->Plugins ''' return True def config_widget(self): ''' Implement this method and :meth:`save_settings` in your plugin to use a custom configuration dialog. This method, if implemented, must return a QWidget. The widget can have an optional method validate() that takes no arguments and is called immediately after the user clicks OK. Changes are applied if and only if the method returns True. 172 Kapitel 1. Avsnitten

177 If for some reason you cannot perform the configuration at this time, return a tuple of two strings (message, details), these will be displayed as a warning dialog to the user and the process will be aborted. The base class implementation of this method raises NotImplementedError so by default no user configuration is possible. ''' # It is important to put this import statement here rather than at the # top of the module as importing the config class will also cause the # GUI libraries to be loaded, which we do not want when using calibre # from the command line from calibre_plugins.interface_demo.config import ConfigWidget return ConfigWidget() def save_settings(self, config_widget): ''' Save the settings specified by the user with config_widget. :param config_widget: The widget returned by :meth:`config_widget`. ''' config_widget.save_settings() # Apply the changes ac = self.actual_plugin_ if ac is not None: ac.apply_settings() Det enda anmärkningsvärda funktionen är planen actual_plugin. Eftersom calibre har både kommandoraden och användargränssnitt bör tilläggets användargränssnitt som denna inte läser in bibliotekets användargränssnitt i init.py. Den actual_plugin fältet gör detta åt dig, genom att berätta för calibre att det faktiska tillägget är att finna i en annan fil i ditt zip-arkiv, som endast kommer att laddas i ett användargränssnittssammanhang. Kom ihåg att för att detta ska fungera måste du ha ett plugin-import-name-some_name.txt filen i din tilläggs zip-fil, som diskuterats ovan. Också finns det ett par olika metoder för att möjliggöra konfiguration användare av tillägg. Dessa diskuteras nedan. ui.py Låt oss nu titta på ui.py som definierar själva användargränssnittstillägget. Källkoden är kraftigt kommenterade och bör vara självförklarande: # The class that all interface action plugins must inherit from from calibre.gui2.actions import InterfaceAction from calibre_plugins.interface_demo.main import DemoDialog class InterfacePlugin(InterfaceAction): name = 'Interface Plugin Demo' # Declare the main action associated with this plugin # The keyboard shortcut can be None if you dont want to use a keyboard # shortcut. Remember that currently calibre has no central management for # keyboard shortcuts, so try to use an unusual/unused shortcut. action_spec = ('Interface Plugin Demo', None, 1.9. Handledning 173

178 'Run the Interface Plugin Demo', 'Ctrl+Shift+F1') def genesis(self): # This method is called once per plugin, do initial setup here # Set the icon for this interface action # The get_icons function is a builtin function defined for all your # plugin code. It loads icons from the plugin zip file. It returns # QIcon objects, if you want the actual data, use the analogous # get_resources builtin function. # # Note that if you are loading more than one icon, for performance, you # should pass a list of names to get_icons. In this case, get_icons # will return a dictionary mapping names to QIcons. Names that # are not found in the zip file will result in null QIcons. icon = get_icons('images/icon.png') # The qaction is automatically created from the action_spec defined # above self.qaction.seticon(icon) self.qaction.triggered.connect(self.show_dialog) def show_dialog(self): # The base plugin object defined in init.py base_plugin_object = self.interface_action_base_plugin # Show the config dialog # The config dialog can also be shown from within # Preferences->Plugins, which is why the do_user_config # method is defined on the base plugin class do_user_config = base_plugin_object.do_user_config # self.gui is the main calibre GUI. It acts as the gateway to access # all the elements of the calibre user interface, it should also be the # parent of the dialog d = DemoDialog(self.gui, self.qaction.icon(), do_user_config) d.show() def apply_settings(self): from calibre_plugins.interface_demo.config import prefs # In an actual non trivial plugin, you would probably need to # do something based on the settings in prefs prefs main.py Själva logiken för att implementera gränssnittsdialogen för tilläggsdemon. from PyQt5.Qt import QDialog, QVBoxLayout, QPushButton, QMessageBox, QLabel from calibre_plugins.interface_demo.config import prefs class DemoDialog(QDialog): def init (self, gui, icon, do_user_config): QDialog. init (self, gui) self.gui = gui 174 Kapitel 1. Avsnitten

179 self.do_user_config = do_user_config # The current database shown in the GUI # db is an instance of the class LibraryDatabase from db/legacy.py # This class has many, many methods that allow you to do a lot of # things. For most purposes you should use db.new_api, which has # a much nicer interface from db/cache.py self.db = gui.current_db self.l = QVBoxLayout() self.setlayout(self.l) self.label = QLabel(prefs['hello_world_msg']) self.l.addwidget(self.label) self.setwindowtitle('interface Plugin Demo') self.setwindowicon(icon) self.about_button = QPushButton('About', self) self.about_button.clicked.connect(self.about) self.l.addwidget(self.about_button) self.marked_button = QPushButton( 'Show books with only one format in the calibre GUI', self) self.marked_button.clicked.connect(self.marked) self.l.addwidget(self.marked_button) self.view_button = QPushButton( 'View the most recently added book', self) self.view_button.clicked.connect(self.view) self.l.addwidget(self.view_button) self.update_metadata_button = QPushButton( 'Update metadata in a book\'s files', self) self.update_metadata_button.clicked.connect(self.update_metadata) self.l.addwidget(self.update_metadata_button) self.conf_button = QPushButton( 'Configure this plugin', self) self.conf_button.clicked.connect(self.config) self.l.addwidget(self.conf_button) self.resize(self.sizehint()) def about(self): # Get the about text from a file inside the plugin zip file # The get_resources function is a builtin function defined for all your # plugin code. It loads files from the plugin zip file. It returns # the bytes from the specified file. # # Note that if you are loading more than one file, for performance, you # should pass a list of names to get_resources. In this case, # get_resources will return a dictionary mapping names to bytes. Names that # are not found in the zip file will not be in the returned dictionary. text = get_resources('about.txt') QMessageBox.about(self, 'About the Interface Plugin Demo', text.decode('utf-8')) 1.9. Handledning 175

180 def marked(self): ''' Show books with only one format ''' db = self.db.new_api matched_ids = {book_id for book_id in db.all_book_ids() if len(db.formats(book_id)) == 1} # Mark the records with the matching ids # new_api does not know anything about marked books, so we use the full # db object self.db.set_marked_ids(matched_ids) # Tell the GUI to search for all marked records self.gui.search.setedittext('marked:true') self.gui.search.do_search() def view(self): ''' View the most recently added book ''' most_recent = most_recent_id = None db = self.db.new_api for book_id, timestamp in db.all_field_for('timestamp', db.all_book_ids()).iteritems(): if most_recent is None or timestamp > most_recent: most_recent = timestamp most_recent_id = book_id if most_recent_id is not None: # Get a reference to the View plugin view_plugin = self.gui.iactions['view'] # Ask the view plugin to launch the viewer for row_number view_plugin._view_calibre_books([most_recent_id]) def update_metadata(self): ''' Set the metadata in the files in the selected book's record to match the current metadata in the database. ''' from calibre.ebooks.metadata.meta import set_metadata from calibre.gui2 import error_dialog, info_dialog # Get currently selected books rows = self.gui.library_view.selectionmodel().selectedrows() if not rows or len(rows) == 0: return error_dialog(self.gui, 'Cannot update metadata', 'No books selected', show=true) # Map the rows to book ids ids = list(map(self.gui.library_view.model().id, rows)) db = self.db.new_api for book_id in ids: # Get the current metadata for this book from the db mi = db.get_metadata(book_id, get_cover=true, cover_as_data=true) fmts = db.formats(book_id) if not fmts: continue for fmt in fmts: fmt = fmt.lower() # Get a python file object for the format. This will be either # an in memory file or a temporary on disk file ffile = db.format(book_id, fmt, as_file=true) ffile.seek(0) # Set metadata in the format set_metadata(ffile, mi, fmt) 176 Kapitel 1. Avsnitten

181 ffile.seek(0) # Now replace the file in the calibre library with the updated # file. We dont use add_format_with_hooks as the hooks were # already run when the file was first added to calibre. db.add_format(book_id, fmt, ffile, run_hooks=false) info_dialog(self, 'Updated files', 'Updated the metadata in the files of %d book(s)'%len(ids), show=true) def config(self): self.do_user_config(parent=self) # Apply the changes self.label.settext(prefs['hello_world_msg']) Att få resurser från tilläggs zip-filen calibres tilläggsladdningsssystem definierar ett par inbyggda funktioner som gör att du bekvämt hämta filer från tilläggets zip-fil. get_resources(name_or_list_of_names) Denna funktion bör anropas med en lista av sökvägar till filer i zip-filen. Till exempel för att komma åt filen icon.png i katalogen bilder i zip-filen, skulle du använda: images / icon.png. Använd alltid ett snedstreck som sökvägsavgränsare, även på fönstren. När du skickar vidare ett enda namn, kommer funktionen returnera råa oktettfilen eller Ingen om namnet inte hittades i zip-filen. Om du skickar mer än ett namn så är det returneras en ordlista passande namn till oktett. Om ett namn inte hittas, kommer det inte att finnas i den returnerade listan. get_icons(name_or_list_of_names) Ett bekvämligt omslag för get_resources() som skapar QIcon objekt från rådata returneras av get_resources. Om ett namn inte finns i zip-filen blir motsvarande QIcon null. Aktivera konfiguration användare av ditt tillägg För att tillåta användare att konfigurera tillägg måste du definiera tre metoder i din bastilläggsklass, is_customizable, config_widget och save_settings enligt nedan: def is_customizable(self): ''' This method must return True to enable customization via Preferences->Plugins ''' return True def config_widget(self): ''' Implement this method and :meth:`save_settings` in your plugin to use a custom configuration dialog. This method, if implemented, must return a QWidget. The widget can have an optional method validate() that takes no arguments and is called immediately after the user clicks OK. Changes are applied if and only if the method returns True Handledning 177

182 If for some reason you cannot perform the configuration at this time, return a tuple of two strings (message, details), these will be displayed as a warning dialog to the user and the process will be aborted. The base class implementation of this method raises NotImplementedError so by default no user configuration is possible. ''' # It is important to put this import statement here rather than at the # top of the module as importing the config class will also cause the # GUI libraries to be loaded, which we do not want when using calibre # from the command line from calibre_plugins.interface_demo.config import ConfigWidget return ConfigWidget() def save_settings(self, config_widget): ''' Save the settings specified by the user with config_widget. :param config_widget: The widget returned by :meth:`config_widget`. ''' config_widget.save_settings() # Apply the changes ac = self.actual_plugin_ if ac is not None: ac.apply_settings() calibre har många olika sätt att lagra konfigurationsdata (ett arv av sin långa historia). Det rekommenderade sättet är att använda JSONConfig klass, som lagrar konfigurationsinformationen i en.json-fil. Koden för att hantera konfigurationsdata i demotillägget är i config.py: from PyQt5.Qt import QWidget, QHBoxLayout, QLabel, QLineEdit from calibre.utils.config import JSONConfig # This is where all preferences for this plugin will be stored # Remember that this name (i.e. plugins/interface_demo) is also # in a global namespace, so make it as unique as possible. # You should always prefix your config file name with plugins/, # so as to ensure you dont accidentally clobber a calibre config file prefs = JSONConfig('plugins/interface_demo') # Set defaults prefs.defaults['hello_world_msg'] = 'Hello, World!' class ConfigWidget(QWidget): def init (self): QWidget. init (self) self.l = QHBoxLayout() self.setlayout(self.l) self.label = QLabel('Hello world &message:') self.l.addwidget(self.label) self.msg = QLineEdit(self) self.msg.settext(prefs['hello_world_msg']) 178 Kapitel 1. Avsnitten

183 self.l.addwidget(self.msg) self.label.setbuddy(self.msg) def save_settings(self): prefs['hello_world_msg'] = unicode(self.msg.text()) Den prefs-objekt är nu tillgängligt i hela tilläggskoden med en enkel: from calibre_plugins.interface_demo.config import prefs Du kan se prefs-objekt användas i main.py: def config(self): self.do_user_config(parent=self) # Apply the changes self.label.settext(prefs['hello_world_msg']) Redigera boktillägg Nu ska växla för lite och ser till att skapa ett tillägg för att lägga verktyg till för calibre-bokeditorn. Tillägget finns här: editor_demo_plugin.zip 66. Det första steget, som för alla tillägg är att skapa importnamnet tom txt-fil, som beskrivs ovan (sida 171). Vi ska namnge filen plugin-import-name-editor_plugin_demo.txt. Nu skapar vi den obligatoriska init py-filen som innehåller metadata om tillägget -. Sitt namn, författare, version, etc. from calibre.customize import EditBookToolPlugin class DemoPlugin(EditBookToolPlugin): name = 'Edit Book plugin demo' version = (1, 0, 0) author = 'Kovid Goyal' supported_platforms = ['windows', 'osx', 'linux'] description = 'A demonstration of the plugin interface for the ebook editor' minimum_calibre_version = (1, 46, 0) En enda tilläggseditor kan ge flera verktyg varje verktyg motsvarar en knapp i verktygsfältet och posten i Tilläggsmenyn i editorn. Dessa kan ha undermenyer om verktyget har flera relaterade åtgärder. Verktygen bör definieras i filen main.py i ditt tillägg. Varje verktyg är en klass som ärver från calibre.gui2.tweak_book.plugin.tool (sida 280) klass. Låt oss titta på main.py från demotillägget, källkoden är tungt kommenterade och bör vara självförklarande. Läs API handlingar: class: calibre.gui2.tweak_book.plugin.tool klass för mer information. main.py Här kommer vi att se definitionen av ett enda verktyg som kommer att multiplicera alla teckenstorlekar i boken av ett nummer som användaren ger. Detta verktyg visar olika viktiga begrepp som du behöver för att utveckla dina egna tillägg, så du bör läsa (tungt kommenterade) källkoden noggrant Handledning 179

184 import re from PyQt5.Qt import QAction, QInputDialog from cssutils.css import CSSRule # The base class that all tools must inherit from from calibre.gui2.tweak_book.plugin import Tool from calibre import force_unicode from calibre.gui2 import error_dialog from calibre.ebooks.oeb.polish.container import OEB_DOCS, OEB_STYLES, serialize class DemoTool(Tool): #: Set this to a unique name it will be used as a key name = 'demo-tool' #: If True the user can choose to place this tool in the plugins toolbar allowed_in_toolbar = True #: If True the user can choose to place this tool in the plugins menu allowed_in_menu = True def create_action(self, for_toolbar=true): # Create an action, this will be added to the plugins toolbar and # the plugins menu ac = QAction(get_icons('images/icon.png'), 'Magnify fonts', self.gui) # noqa if not for_toolbar: # Register a keyboard shortcut for this toolbar action. We only # register it for the action created for the menu, not the toolbar, # to avoid a double trigger self.register_shortcut(ac, 'magnify-fonts-tool', default_keys=('ctrl+shift+alt+d',)) ac.triggered.connect(self.ask_user) return ac def ask_user(self): # Ask the user for a factor by which to multiply all font sizes factor, ok = QInputDialog.getDouble( self.gui, 'Enter a magnification factor', 'Allow font sizes in the book will be multiplie value=2, min=0.1, max=4 ) if ok: # Ensure any in progress editing the user is doing is present in the container self.boss.commit_all_editors_to_container() try: self.magnify_fonts(factor) except Exception: # Something bad happened report the error to the user import traceback error_dialog(self.gui, _('Failed to magnify fonts'), _( 'Failed to magnify fonts, click "Show details" for more info'), det_msg=traceback.format_exc(), show=true) # Revert to the saved restore point self.boss.revert_requested(self.boss.global_undo.previous_container) else: # Show the user what changes we have made, allowing her to # revert them if necessary self.boss.show_current_diff() # Update the editor UI to take into account all the changes we 180 Kapitel 1. Avsnitten

185 # have made self.boss.apply_container_update_to_gui() def magnify_fonts(self, factor): # Magnify all font sizes defined in the book by the specified factor # First we create a restore point so that the user can undo all changes # we make. self.boss.add_savepoint('before: Magnify fonts') container = self.current_container # The book being edited as a container object # Iterate over all style declarations in the book, this means css # stylesheets, <style> tags and style="" attributes for name, media_type in container.mime_map.iteritems(): if media_type in OEB_STYLES: # A stylesheet. Parsed stylesheets are cssutils CSSStylesheet # objects. self.magnify_stylesheet(container.parsed(name), factor) container.dirty(name) # Tell the container that we have changed the stylesheet elif media_type in OEB_DOCS: # A HTML file. Parsed HTML files are lxml elements for style_tag in container.parsed(name).xpath('//*[local-name="style"]'): if style_tag.text and style_tag.get('type', None) in {None, 'text/css'}: # We have an inline CSS <style> tag, parse it into a # stylesheet object sheet = container.parse_css(style_tag.text) self.magnify_stylesheet(sheet, factor) style_tag.text = serialize(sheet, 'text/css', pretty_print=true) container.dirty(name) # Tell the container that we have changed the styleshe for elem in container.parsed(name).xpath('//*[@style]'): # Process inline style attributes block = container.parse_css(elem.get('style'), is_declaration=true) self.magnify_declaration(block, factor) elem.set('style', force_unicode(block.getcsstext(separator=' '), 'utf-8')) def magnify_stylesheet(self, sheet, factor): # Magnify all fonts in the specified stylesheet by the specified # factor. for rule in sheet.cssrules.rulesoftype(cssrule.style_rule): self.magnify_declaration(rule.style, factor) def magnify_declaration(self, style, factor): # Magnify all fonts in the specified style declaration by the specified # factor val = style.getpropertyvalue('font-size') if not val: return # see if the font-size contains a number num = re.search(r'[0-9.]+', val) if num is not None: num = num.group() val = val.replace(num, '%f' % (float(num) * factor)) style.setproperty('font-size', val) # We should also be dealing with the font shorthand property and # font sizes specified as non numbers, but those are left as exercises # for the reader 1.9. Handledning 181

186 Låt oss bryta ner main.py. Vi ser att den definierar ett enda verktyg, som heter Förstora typsnitt. Detta verktyg kommer att be användaren om ett nummer och multiplicera alla teckenstorlekar i boken med det numret. Det första viktiga är verktygsnamnet som du måste ställa in till någon relativt unik sträng som den kommer att användas som nyckel för detta verktyg. Nästa viktiga inkörsport är calibre.gui2.tweak_book.plugin.tool.create_action() (sida 281). Denna metod skapar QAction objekt som visas i tilläggsverktygsfältet och tilläggsmenyn. Det också eventuellt tilldelar ett kortkommando som användaren kan skräddarsy. Den utlösta signalen från QAction är ansluten till ask_user() metoden som frågar användaren om teckenstorlekensmultiplikator och sedan kör förstoringskoden Förstoringskoden är väl kommenterad och ganska enkel. De viktigaste saker att notera är att du får en referens till redigeringsfönstret som self.gui och editorn Boss som self.boss. Boss är objektet som styr redigerarens användargränssnitt. Den har många användbara metoder, som dokumenteras i calibre.gui2.tweak_book.boss.boss (sida 282) klass. Slutligen finns det self.current_container som är en referens till boken som redigeras som calibre.ebooks.oeb.polish.container.container (sida 274) objekt. Detta representerar boken som en samling av sina konstituerande HTML / CSS / bildfiler och har bekvämliga metoder för att göra många användbara saker. Objektbehållaren och olika användbara nyttofunktioner som kan återanvändas i din tilläggskod är dokumenterade i API-dokumentation för e-bok redigeringsverktyg (sida 274). Lägger till översättningar till ditt tillägg Du kan ha alla användargränssnitts strängar i ditt tillägg översatta och visas i vilket språk som är satt för huvudanvändargränssnitt i calibre. Det första steget är att gå igenom din tilläggskällkod och markera alla användarsynliga strängar som översättningsbara, genom att omge dem _(). Till exempel: action_spec = (_('My plugin'), None, _('My plugin is cool'), None) Använd sedan något program för att generera.po-filer från din tilläggskällkod. Det bör finnas en.po fil för varje språk du vill översätta till. Till exempel: de.po för tyska, fr.po för franska och så vidare. Du kan använda poedit < _ programmet för detta. Skicka dessa.po-filer till översättarna. När du får tillbaka dem, sammanställ dem i.mo-filer. Du kan återigen använda poedit för det, eller bara göra: calibre-debug -c "from calibre.translations.msgfmt import main; main()" filename.po Placera.mo filer i translations mapp i ditt tillägg. Det sista steget är att helt enkelt kalla funktionen load_translations() högst upp av dina tilläggs.py-filer. Av prestandaskäl bör du bara kalla denna funktion i de.py-filer som faktiskt har översättbara strängar. Så i ett typiskt användargränssnittstillägg som du skulle kalla det högst upp i ui.py men inte init. py. Du kan testa översättningarna av dina tillägg genom att ändra språk i användargränssnittet i calibre i Inställningar- >Utseende eller genom att köra calibre så här: CALIBRE_OVERRIDE_LANG=de calibre Ersätt sv med språkkoden för det språk som du vill testa. Tilläggs-API Som ni kanske har märkt ovan, är ett tillägg i calibre en klass. Det finns olika klasser för de olika typer av tillägg i calibre. Detaljer om varje klass, inklusive basklassen för alla tillägg finns i API dokumentation för tilläggsprogram (sida 193). 182 Kapitel 1. Avsnitten

187 Ditt tillägg kommer nästan säkert att använda kod från calibre. Om du vill veta hur man hittar olika bitar av funktionalitet i calibres kodbas, läs avsnittet om calibre Kodutformning (sida 261). Felsök tilläggen Den första och viktigaste steget är att köra calibre i felsökningsläge. Du kan göra det från kommandoraden med: calibre-debug -g Eller inifrån calibre med kortkommandot att högerklicka på knappen inställningar eller genom att använda Ctrl + Skift + R. När du kör från kommandoraden, kommer felsäkningsutskrifter skrivas ut till konsolen, när man kör inifrån calibre kommer de att gå till en txt-fil. Du kan sätta in utskriftssatser var som helst i din tilläggskod, de kommer att vara utdata i felsökningsläge. Kom ihåg att det här är python, du borde verkligen inte behöver något mer än utskriftsatser för felsöka;) jag har utvecklat hela calibre med att använda just denna felsökningsteknik. Du kan snabbt testa ändringar i tillägget med hjälp av följande kommandorad: calibre-debug -s; calibre-customize -b /path/to/your/plugin/directory; calibre Detta kommer att stänga en köande calibre, vänta på avstängning för att slutföra och sedan uppdatera tillägg i calibre och starta om calibre. Fler tilläggsexempel Du kan finna en lista av många sofistikerade calibre tillägg här 67. Dela dina tillägg med andra Om du vill dela med dig dina tlllägg du skapat till andra, posta dem i en ny tråd i calibre plugins forum Typsättning Math i e-böcker calibre e-bokbläddraren har möjlighet att visa matte inbäddad i e-böcker (epub-och HTML-filer). Du kan typsätta matten direkt med TeX eller MathML eller AsciiMath. calibre visaren använder utmärkta MathJax 69 bibliotek för att göra detta. Detta är en kort genomgång på att skapa e-böcker med matematik och få dem att fungerar bra med den calibre visaren. En enkel HTML-fil med matematik Du kan skriva matematik infogat i en enkel HTML-fil och calibre visaren kommer att göra det i rätt typsätt matematik. I exemplet nedan använder vi TeX notation för matematik. Du kommer att se att du kan använda vanliga TeX-kommandon, med det lilla förbehållet att et-tecken och mindre än och större än tecken måste skrivas som & &lt och &gt. Det första steget är att berätta för calibre att detta kommer innehålla matematik. Det gör du genom att lägga till följande kodsträng till <head> delen av HTML-filen: Handledning 183

188 <script type="text/x-mathjax-config"></script> Det var det, nu kan du skriva matematik på samma sätt som i en.tex fil. Till exempel, här är Lorentz ekvationer: <h2>the Lorenz Equations</h2> <p> \begin{align} \dot{x} & = \sigma(y-x) \\ \dot{y} & = \rho x - y - xz \\ \dot{z} & = -\beta z + xy \end{align} </p> Detta klipp liknar som följande skärmbild i calibre visaren. Fig. 1.2: Lorenz ekvationer Den kompletta HTML-fil med flera ekvationer och infogad matematik återges nedan. Du kan konvertera den här HTML-filen till EPUB in calibre för att hamna en e-bok som du kan dela ut lätt till andra människor. <!DOCTYPE html> <html> <!-- Copyright (c) 2012 Design Science, Inc. --> <head> <title>math Test Page</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <!-- This script tag is needed to make calibre's ebook-viewer recpgnize that this file needs math typ <script type="text/x-mathjax-config"> // This line adds numbers to all equations automatically, unless explicitly suppressed. MathJax.Hub.Config({ TeX: { equationnumbers: {autonumber: "all"} } }); </script> <style> h1 {text-align:center} h2 { font-weight: bold; background-color: #DDDDDD; padding:.2em.5em; margin-top: 1.5em; border-top: 3px solid #666666; border-bottom: 2px solid #999999; } </style> </head> <body> 184 Kapitel 1. Avsnitten

189 <h1>sample Equations</h1> <h2>the Lorenz Equations</h2> <p> \begin{align} \dot{x} & = \sigma(y-x) \label{lorenz}\\ \dot{y} & = \rho x - y - xz \\ \dot{z} & = -\beta z + xy \end{align} </p> <h2>the Cauchy-Schwarz Inequality</h2> <p>\[ \left( \sum_{k=1}^n a_k b_k \right)^{\!\!2} \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right) \]</p> <h2>a Cross Product Formula</h2> <p>\[ \mathbf{v}_1 \times \mathbf{v}_2 = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ \frac{\partial X}{\partial u} & \frac{\partial Y}{\partial u} & 0 \\ \frac{\partial X}{\partial v} & \frac{\partial Y}{\partial v} & 0 \\ \end{vmatrix} \]</p> <h2>the probability of getting \(k\) heads when flipping \(n\) coins is:</h2> <p>\[p(e) = {n \choose k} p^k (1-p)^{ n-k} \]</p> <h2>an Identity of Ramanujan</h2> <p>\[ \frac{1}{(\sqrt{\phi \sqrt{5}}-\phi) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\ldots} } } } \]</p> <h2>a Rogers-Ramanujan Identity</h2> <p>\[ 1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for $ q <1$}. \]</p> <h2>maxwell's Equations</h2> <p> \begin{align} \nabla \times \vec{\mathbf{b}} -\, \frac1c\, \frac{\partial\vec{\mathbf{e}}}{\partial t} & = \f \nabla \cdot \vec{\mathbf{e}} & = 4 \pi \rho \\ \nabla \times \vec{\mathbf{e}}\, +\, \frac1c\, \frac{\partial\vec{\mathbf{b}}}{\partial t} & = \nabla \cdot \vec{\mathbf{b}} & = Handledning 185

190 \end{align} </p> <h2>in-line Mathematics</h2> <p>while display equations look good for a page of samples, the ability to mix math and text in a paragraph is also important. This expression \(\sqrt{3x-1}+(1+x)^2\) is an example of an inline equation. you see, equations can be used this way as well, without unduly disturbing the spacing between lines.</p> As <h2>references to equations</h2> <p>here is a reference to the Lorenz Equations (\ref{lorenz}). Clicking on the equation number will t </body> </html> Mer information Eftersom calibre visaren använder MathJax-biblioteket för att göra matematik, är det bästa stället att ta reda på mer om matematik i e-böcker och få hjälp MathJax website Skapa AZW3 EPUB MOBI kataloger calibres Skapa katalogfunktioner kan du skapa en katalog över biblioteket i en mängd olika format. Denna hjälpfil beskriver katalogiseringsalternativ när katalog skapas i AZW3, EPUB och MOBI format. Välja böcker att katalogisera (sida 186) Inkluderade sektioner (sida 187) Prefix (sida 188) Uteslutna böcker (sida 188) Uteslutna genrer (sida 189) Andra alternativ (sida 189) Utforma katalogomslag (sida 190) Ytterligare hjälpresurser (sida 190) Välja böcker att katalogisera Om du vill att alla dina bibliotek katalogiseras, ta bort valfri sökning eller filtrera villkor i huvudfönstret. Med en enkelt val bok, kommer alla böcker i ditt bibliotek bli kandidater för inkludering i den skapade katalogen. Individuella böcker kan kommas att exkluderas av diverse orsaker; se Uteslutna genrer (sida 189) sektionen nedan för mer information. Om du vill bara att några av dina bibliotek katalogiserade, har du två alternativ: Skapa ett flerval av böckerna du vill katalogisera. Med mer än en bok vald i calibres huvudfönster, kommer bara de valda böckerna katalogiseras. Använd sökfält eller etikettbläddraren för filtrera de visade böckerna. Bara de visade böckerna kommer katalogiseras Kapitel 1. Avsnitten

191 För att påbörja kataloggenerering, välj menyval Konvertera böcker > Skapa en katalog med böckerna i ditt calibrebibliotek. Du kan också lägga till en Skapa katalog-knapp i verktygsraden i Inställningar > Gränssnitt > Verktygsrad för att enklare nå dialogen för skapa kataloger. I Katalogalternativ, välj AZW3, EPUB eller MOBI som katalogformat. I Katalogtitel fältet, ge ett namn för att användas för den skapade katalogen. Om katalogen har samma namn och format som en existerande, kommer den ersättas med den nyligen skapade katalogen. Aktivering Skicka katalogen till enheten automatiskt kommer ladda ner skapad katalog till en ansluten enhet efter slutförandet. Inkluderade sektioner Sektionen aktiverade med bock kommer att inkluderas i den skapade katalogen: Författare - alla böcker, sorterade på författare, tillgängliga i ett listformat. Icke-serieböcker listas för serieböcker. Titlar - alla böcker, sorterade på titel, tillgänglig i ett listformat. Serier - alla böcker som är del av serien, sorterade på serier, tillgängliga i ett listformat. Genrer - individuella genrer, tillgängliga i en lista, sorterade på författare och serie. Nyligen tillagda - alla böcker, sorterade i omvänd kronologisk ordning. Listan innehåller böcker som tillkommit under de senaste 30 dagarna, sedan en månad för månad notering av tillagda böcker. Beskrivningar - detaljerad beskrivningssida för varje bok, inkluderar omslagsikon och kommentarer. Sorterade per författare, med icke-serieböcker listade före serieböcker Handledning 187

192 Prefix Prefixregler tillåter dig att lägga till ett prefix till boklistan när vissa villkor är uppfyllda. Till exempel, du kanske vill markera böcker du har läst med en bock, eller böcker på din önskelista med ett X. Kryssrutan i den första kolumnen aktiverar regeln. Namn är ett regelnamn som du lämnar. Fält är antingen Etikett eller en egen kolumn från biblioteket. Värde är innehållet i Fält för att passa mot. När en prefixregel är uppfylld, kommer boken vara märkt med den valda Prefix. Tre prefixregler har angivits i exemplet ovan: 1. Läs bok anger att en bok med godtyckligt datum i en anpassad kolumn namngiven Senast läst kommer att prefixas med en bocksymbol. 2. Önskelistprodukt objekt anger att godtycklig bok med en Önskelistprodukt etikett kommer att prefixas men en X-symbol. 3. Bibliotek böcker anger att godtycklig bok med ett sant(ja)-värde i en anpassad kolumn Available in Library kommer att prefixas med en dubbelpilsymbol. Den första passande regeln tillhandahåller prefixet. Inaktiverad eller ofullständig regel ignoreras. Uteslutna böcker Uteslutningsregler tillåter dig specificera böcker som inte ska katalogiseras. En kryssruta i första kolumnen aktiverar regeln. Namn är ett regelnamn du anger. Fält är antingen Etikett eller en anpassad kolumn i ditt bibliotek. Värde är innehållet av Fält att passa mot. När en uteslutningsregel är uppfylld, kommer boken uteslutas från genererad katalog. Två uteslutningsregler har specificerats i exemplet ovan: 1. Kataloger regeln anger att godtycklig bok med en Katalog etikett kommer att uteslutas från genererad katalog. 188 Kapitel 1. Avsnitten

calibre Användarhandbok

calibre Användarhandbok calibre Användarhandbok Utgåva 2.38.0 Kovid Goyal September 11, 2015 Innehåll 1 Avsnitten 3 1.1 Grafiska användargränssnittet...................................... 3 1.2 Lägga till din favorit nyhetswebbplats..................................

Läs mer

Användarhandbok för calibre

Användarhandbok för calibre Användarhandbok för calibre Utgåva 3.14.0 Kovid Goyal december 15, 2017 Innehåll 1 Det grafiska användargränssnittet 3 2 Lägg till din favorit nyhetswebbplats 25 3 E-bokvisaren 57 4 E-bokskonvertering

Läs mer

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel: www.minsajt.

Kom igång. Readyonet Lathund för enkelt admin. Logga in Skriv in adressen till din webbsida följt av /login. Exempel: www.minsajt. Kom igång Logga in Skriv in adressen till din webbsida följt av /login. Exempel: www.minsajt.se/login Nu dyker en ruta upp på skärmen. Fyll i ditt användarnamn och lösenord och klicka på "logga in". Nu

Läs mer

Grundkurs 1 IKT Filhantering

Grundkurs 1 IKT Filhantering Filhantering Dan Haldin Ålands lyceum I N N E H Å L L S F Ö R T E C K N I N G Innehållsförteckning... 2 Filhantering med Windows... 3 Skapa Mappar... 4 Spara rätt... 5 Öppna sparade filer... 7 Flytta och

Läs mer

Miljön i Windows Vista

Miljön i Windows Vista 1 Miljön i Windows Vista Windows Aero Windows Aero (Aero Glass), som det nya utseendet eller gränssnittet heter i Vista, påminner mycket om glas och har en snygg genomskinlig design. Det är enklare att

Läs mer

ALEPH ver. 16 Introduktion

ALEPH ver. 16 Introduktion Fujitsu, Westmansgatan 47, 582 16 Linköping INNEHÅLLSFÖRTECKNING 1. SKRIVBORDET... 1 2. FLYTTA RUNT M.M.... 2 3. LOGGA IN... 3 4. VAL AV DATABAS... 4 5. STORLEK PÅ RUTORNA... 5 6. NAVIGATIONSRUTA NAVIGATIONSTRÄD...

Läs mer

SENIORER SENIORER. Grundläggande IT för. Windows 7. Grundläggande IT för. Windows 7. Eva Ansell Marianne Ahlgren. Eva Ansell Marianne Ahlgren

SENIORER SENIORER. Grundläggande IT för. Windows 7. Grundläggande IT för. Windows 7. Eva Ansell Marianne Ahlgren. Eva Ansell Marianne Ahlgren 600 IT för seniorer Windows 7.qxp 2011-06-0 10:27 Sida 1 Eva Ansell Marianne Ahlgren Eva Ansell Marianne Ahlgren Grundläggande IT för SENIORER Windows 7 Det här är en bok för dig som behöver grundläggande

Läs mer

version 2.5 CONTENTO SVENSKA AB Introduktion till Kursbyggarverktyg

version 2.5 CONTENTO SVENSKA AB Introduktion till Kursbyggarverktyg version 2.5 CONTENTO SVENSKA AB Introduktion till Kursbyggarverktyg Introduktion till kursbyggarverktyg Contento Svenska AB Hornsgatan 103 117 28 Stocholm Table of Contents KAPITEL 1 Introduktion 2 Begrepp

Läs mer

Publicera taltidningen

Publicera taltidningen Publicera taltidningen Innehåll Publicera taltidningen...1 Två-stegs-raketen: Webbpubliceringen av taltidningen...1 Manual för publiceringsverktyget WaveFusion...2 Starta verktyget WaveFusion och skapa

Läs mer

Filbindningar. Mike McBride Översättare: Stefan Asserhäll

Filbindningar. Mike McBride Översättare: Stefan Asserhäll Mike McBride Översättare: Stefan Asserhäll 2 Innehåll 1 Filbindningar 4 1.1 Inledning........................................... 4 1.2 Hur det här modulen används.............................. 4 1.2.1

Läs mer

Krav: * Filen MpUpdate.exe får inte köras när du startar denna uppdatering.

Krav: * Filen MpUpdate.exe får inte köras när du startar denna uppdatering. Uppdatera Mobilus Professional till version 2.0.1 Krav: * Filen MpUpdate.exe får inte köras när du startar denna uppdatering. * Filen MP.exe (Mobilus programmet) får inte användas* under tiden uppdateringen

Läs mer

Handhavande manual problemhantering

Handhavande manual problemhantering av Handhavande manual problemhantering 1(9) av Flytta dina dokument från H: till OneDrive I och med att Norrtälje kommun går över till Office 365 för skolverksamheten så kommer den egna lagringsplatsen

Läs mer

2009-08-20. Manual för Typo3 version 4.2

2009-08-20. Manual för Typo3 version 4.2 2009-08-20 Manual för Typo3 version 4.2 1 2 Innehåll: 1. Allmänt 4 2. Grunderna i Typo3 5 2.1 Knappar 5 2.2 Inloggning 5 2.3 Den inledande vyn 6 2.4 Sidträdet 7 3. Sidor 8 3.1 Skapa en ny sida 8 3.1.1

Läs mer

BLI VÄN MED DIN DATOR ENHETER MAPPAR FILER

BLI VÄN MED DIN DATOR ENHETER MAPPAR FILER BLI VÄN MED DIN DATOR ENHETER MAPPAR FILER Innehållsförteckning ENHETER...2 MAPPAR...2 VISNINGSLÄGEN...3 SORTERING...4 MAPPAR OCH FILER...5 FILNAMN...6 FILTILLÄGG...6 FILHANTERING KOPIERA FLYTTA BYTA NAMN

Läs mer

Skapa mappar, spara och hämta dokument

Skapa mappar, spara och hämta dokument Skapa mappar, spara och hämta dokument Övningen görs på hårddisken i mappen Mina dokument 1a Starta programmet utforskaren 1 b Huvudgrupper i utforskaren 1c Expandera huvudgrupper, enheter och mappar Skapa

Läs mer

FIRSTCLASS. Innehåll:

FIRSTCLASS. Innehåll: FIRSTCLASS Innehåll: Hämta klient...2 Installera klient...2 Konfigurera klient...2 Koppla upp...3 Skrivbordet...3 Mailbox...3 Presentation...3 Skapa ett nytt meddelande...4 Söka mottagare för nytt meddelande...4

Läs mer

FOR BETTER UNDERSTANDING. Snabbguide. www.wordfinder.se

FOR BETTER UNDERSTANDING. Snabbguide. www.wordfinder.se FOR BETTER UNDERSTANDING Snabbguide www.wordfinder.se Tekniska förutsättningar WordFinder 10 Professional för Mac kräver följande: Processor: Intel Mac OS X 10.5 eller senare. Installation Installation

Läs mer

> Guide till Min webmail

> Guide till Min webmail > Guide till Min webmail Skriv och skicka e-post. Klicka på ikonen Skicka nytt meddelande.. Fältet Avsändare : Här visas vilken e-postadress som kommer att stå som avsändare i ditt mail.. Fältet Mottagare

Läs mer

E-post. A. Windows Mail. Öppna alternativ. Placera ikonen på skrivbordet.

E-post. A. Windows Mail. Öppna alternativ. Placera ikonen på skrivbordet. E-post A. Windows Mail Öppna alternativ Klicka på startknappen Startmenyn öppnas Klicka på Alla Program Leta reda på Windows Mail Dubbelklicka Windows Mail öppnas. Om ikonen ligger i Start-menyn Klicka

Läs mer

Huvudfönstret för GroupWise

Huvudfönstret för GroupWise Huvudfönstret för Det mesta arbetet i utförs i huvudfönster. Huvudfönstrets olika delar beskrivs nedan. HUVUDMENY visas längst upp i och innehåller menypunkter: Arkiv, Redigera, Visa, Åtgärder, Verktyg,

Läs mer

INSTALLATION AV VITEC MÄKLARSYSTEM

INSTALLATION AV VITEC MÄKLARSYSTEM INSTALLATION AV VITEC MÄKLARSYSTEM Studentversion september 2013 Innehållsförteckning 1. Installera VITEC Mäklarsystem... 2 2. Läs noga igenom manualen... 2 3. Systemkrav... 2 4. Kundservice/Teknisk support...

Läs mer

Novell Vibe 4.0. Mars 2015. Snabbstart. Starta Novell Vibe. Bekanta dig med gränssnittet och funktionerna i Novell Vibe

Novell Vibe 4.0. Mars 2015. Snabbstart. Starta Novell Vibe. Bekanta dig med gränssnittet och funktionerna i Novell Vibe Novell Vibe 4.0 Mars 2015 Snabbstart När du börjar använda Novell Vibe kanske du vill börja med att skapa en personlig arbetsyta och en teamarbetsyta. Det här dokumentet innehåller information om hur du

Läs mer

Internet. En enkel introduktion. Innehåll:

Internet. En enkel introduktion. Innehåll: Internet En enkel introduktion Innehåll: Datorns olika delar Starta datorn Så gör du om du kan webbadressen Så gör du om du inte kan webbadressen Kortfattad repetition Alingsås bibliotek, 2012 2 3 4 6

Läs mer

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll

FrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll FrontPage Express I programpaketet Internet Explorer 4.0 och 5.0 ingår också FrontPage Express som installeras vid en fullständig installation. Det är ett program som man kan använda för att skapa egna

Läs mer

Administration av lagets arbetsrum lathund

Administration av lagets arbetsrum lathund Administration av lagets arbetsrum lathund 1: Logga in Öppna din webbläsare och gå in på nya Skuru-webben (www.skuruik.se/handboll). 1. Gå till ditt lags arbetsrum (du hittar laget antingen under Barn/Ungdom

Läs mer

SORSELE KOMMUN. Handbok OEW. 28 sept 2012 Mari-Anne Englund Barbro Olofsson. Sorsele kommun Version 2012-09-28, rev 131101 1 (19)

SORSELE KOMMUN. Handbok OEW. 28 sept 2012 Mari-Anne Englund Barbro Olofsson. Sorsele kommun Version 2012-09-28, rev 131101 1 (19) Handbok i OEW 28 sept 2012 Mari-Anne Englund Barbro Olofsson Sorsele kommun Version 2012-09-28, rev 131101 1 (19) Använd det användarnamn och lösenord som du fått. Fungerar det inte hör av dig till Mari-Anne

Läs mer

Sidpanelen och gadgetar De är nya. De är smarta. Lär dig hur du använder dem.

Sidpanelen och gadgetar De är nya. De är smarta. Lär dig hur du använder dem. Kap 03.indd 444 KAPITEL TRE Sidpanelen och gadgetar De är nya. De är smarta. Lär dig hur du använder dem. Gadgetar och den nya Sidpanelen är nog mina favoriter bland de nya funktionerna i Windows Vista.

Läs mer

Migrera till PowerPoint 2010

Migrera till PowerPoint 2010 I den här guiden Microsoft Microsoft PowerPoint 2010 skiljer sig rent utseendemässigt mycket, så vi har skapat den här guiden för att hjälpa dig att snabbare lära dig programmet. Här kan du läsa om de

Läs mer

Kom igång med. Windows 8. www.datautb.se DATAUTB MORIN AB

Kom igång med. Windows 8. www.datautb.se DATAUTB MORIN AB Kom igång med Windows 8 www.datautb.se DATAUTB MORIN AB Innehållsförteckning Grunderna i Windows.... 1 Miljön i Windows 8... 2 Startskärmen... 2 Zooma... 2 Snabbknappar... 3 Sök... 4 Dela... 4 Start...

Läs mer

Operativsystem - Windows 7

Operativsystem - Windows 7 Uppgift 5 B Operativsystem - Windows 7 Skapa mappar och undermappar Det finns olika sätt att skapa nya mappar på. Alternativ. Högerklicka på en tom yta. Håll muspekaren över Nytt. Klicka på Mapp Alternativ.

Läs mer

Umgås på nätet KAPITEL 6. Chatta via webbläsaren

Umgås på nätet KAPITEL 6. Chatta via webbläsaren KAPITEL 6 Umgås på nätet Internet håller alltmer på att utvecklas till en parallellvärld med vår vanliga tillvaro. Man spelar spel över nätet, bygger upp virtuella världar med virtuella prylar och virtuella

Läs mer

Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet.

Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet. Programmets startmeny ser ut så här. För att få fram menyerna Avsluta, Inställningar och Användare måste du föra markören upp till det blåa fältet. Då du klickar på Användare öppnas denna bläddringslista.

Läs mer

Din guide till. Klientinstallation MS Driftservice

Din guide till. Klientinstallation MS Driftservice Din guide till Klientinstallation MS Driftservice September 2012 Innehåll ALLMÄNT... 3 Gamla klienter... 3 Installation... 3 Vid problem... 5 inställningar för brandväggar... 6 Inställningar för Windows

Läs mer

APA för nybörjare. Innan du börjar. Översikt

APA för nybörjare. Innan du börjar. Översikt APA för nybörjare Den här texten är tänkt som en snabb introduktion hur du kan använda publiceringssystemet APA (Advanced Publication Application) för att redigera webbplatser. Texten kräver inga förkunskaper

Läs mer

LÄR DIG ANVÄNDA DIN MAC. från grunden! Nu med Mac OS X Leopard! Harry Peronius

LÄR DIG ANVÄNDA DIN MAC. från grunden! Nu med Mac OS X Leopard! Harry Peronius Harry Peronius LÄR DIG ANVÄNDA Nu med Mac OS X Leopard! DIN MAC från grunden! Del 1 GRUNDFUNKTIONER 4. Finder... 6 5. Dock... 34 6. Hjälp... 36 7. Mappar och filer... 38 8. Time Machine... 4 9. Systeminställningar...

Läs mer

FirstClass Hur du använder FirstClass.

FirstClass Hur du använder FirstClass. OPEN TEXT FirstClass Hur du använder FirstClass. Mars 2008 Peter Gustafsson, Skf Logga in på FirstClass För att starta FirstClass, dubbelklicka på FirstClass ikonen på skrivbordet eller på start-menyn.

Läs mer

Infobank kvickguide. Kom i gång med Infobank. Logga in till Infobank. Installationsguiden

Infobank kvickguide. Kom i gång med Infobank. Logga in till Infobank. Installationsguiden Infobank kvickguide Kom i gång med Infobank Välkommen till SKL Kommentus webbaserad tjänst Infobank Arbetsrätten. Denna snabbguide ger dig en kort introduktion som användare av Infobank, så att du snabbt

Läs mer

Manual för webbpublicering. Enköpings kommun

Manual för webbpublicering. Enköpings kommun Manual för webbpublicering Enköpings kommun Innehåll ATT LOGGA IN I SWWWING 3 Inloggningsrutan 3 GRÄNSSNITTET 4 Filhanteraren 4 Content Management 4 Verktyget Notify - Dags att uppdatera 4 SKAPA OCH REDIGERA

Läs mer

Arbetsuppgifter. JPEG-filerna/kopiorna skall döpas om efter projektets mall: ÅÅ-MM-DD bildtitel Fotograf

Arbetsuppgifter. JPEG-filerna/kopiorna skall döpas om efter projektets mall: ÅÅ-MM-DD bildtitel Fotograf Arbetsuppgifter Tre bilder skall väljas ut från en dags fotografering för projektet 365 dagar. RAW-filer skall konverteras till JPEG (Vid fotografering i JPEG gör vi fullstora JPEG kopior för att inte

Läs mer

Manual för lokalredaktörer villaagarna.se

Manual för lokalredaktörer villaagarna.se Manual för lokalredaktörer villaagarna.se Version 2 Villaägarnas Riksförbund Sollentuna 2011 Innehåll Redigera befintlig sida... 3 Skriva text eller klistra in kopierad text... 5 Rubriker i brödtext...

Läs mer

Om Mappar... 2. Uppgift 1: Skapa en mapp på Skrivbordet... 2 Om enheter... 3 Uppgift 2: Byt namn på din nya Höst -mapp till Vår...

Om Mappar... 2. Uppgift 1: Skapa en mapp på Skrivbordet... 2 Om enheter... 3 Uppgift 2: Byt namn på din nya Höst -mapp till Vår... RIGMOR SANDER WINDOWS-ÖVN Sid 1 (9) Om Mappar... 2 Om mappars namn... 2 Uppgift 1: Skapa en mapp på Skrivbordet... 2 Om enheter... 3 Uppgift 2: Byt namn på din nya Höst -mapp till Vår... 3 Öva mer på att

Läs mer

Snabbmanual. för. Lärresurshanteringsverktyget

Snabbmanual. för. Lärresurshanteringsverktyget Snabbmanual för Lärresurshanteringsverktyget Beskrivning av olika vyer i Lärresurshanteringsverktyget Skapa I detta fönster skapar man nya sidor och/eller väljer struktur på sin lärresurs. Men man redigerar

Läs mer

Guide till att använda Audacity för uttalsövningar

Guide till att använda Audacity för uttalsövningar Guide till att använda Audacity för uttalsövningar Victoria Johansson Humlabbet, SOL-center, Lund IT-pedagog@sol.lu.se 28 mars 2006 1 Inledning Audacity är ett program som kan användas för att spela in

Läs mer

Din guide till. Digitala assistenten

Din guide till. Digitala assistenten Din guide till Digitala assistenten Dec 2012 Innehåll SÅ HÄR SÄTTER DU DIGITALA ASSISTENTEN I ARBETE... 3 Steg 1 Skapa en ny kalenderhändelse... 3 Steg 2 Välj vad du vill att Digitala assistenten ska göra...

Läs mer

Öppna EndNote varje gång när du vill samla referenser till ditt bibliotek.

Öppna EndNote varje gång när du vill samla referenser till ditt bibliotek. 1. Skapa ett EndNote-bibliotek Börja med att öppna EndNote och skapa ett bibliotek (Reference Library). Det gör du under File / New. Namnge ditt bibliotek och välj var på datorn du vill spara det. Nu kan

Läs mer

5HVLVWHQVWDEHOO 'DWD3DUWQHU. Er partner inom data

5HVLVWHQVWDEHOO 'DWD3DUWQHU. Er partner inom data 5HVLVWHQVWDEHOO Tack för att du valde programmet 5HVLVWHQVWDEHOO! Vi hoppas att programmet ska vara till stor hjälp i ditt arbete. Har du synpunkter på programmet är du mycket välkommen att höra av dig

Läs mer

Kortfattad instruktion för Crystal Reports. Kom i gång med Crystal Reports. Instruktion Crystal Reports 2014

Kortfattad instruktion för Crystal Reports. Kom i gång med Crystal Reports. Instruktion Crystal Reports 2014 Kortfattad instruktion för Crystal Reports Kom i gång med Crystal Reports När du ska logga in i Crystal Reports ska inloggning alltid ske via sidan om Crystal Reports på vårdgivarwebben. Det är viktigt

Läs mer

ANVÄNDARMANUAL, INTERAXO

ANVÄNDARMANUAL, INTERAXO ANVÄNDARMANUAL, INTERAXO 1 VARFÖR ÄR DET OLIKA FÄRG OCH UTSEENDE PÅ MAPPARNA? Gula mappar Blå mappar Blårandiga mappar Enkla mappar som man känner igen från Utforskaren. En gul mapp kan innehålla undermappar

Läs mer

Att arbeta med. Müfit Kiper

Att arbeta med. Müfit Kiper Att arbeta med Müfit Kiper Att skriva nya inlägg Alla inlägg som är postade visas i kronologisk ordning, det vill säga det senast postade inlägget kommer visas först om inget annat angetts i temafilerna.

Läs mer

Användarutbildning i SiteVision

Användarutbildning i SiteVision Användarutbildning i SiteVision Innehållsförteckning 1 Komma igång med SiteVision 2 1.1 Starta SiteVision 2 1.2 Redigeringsläget i SiteVision 3 1.2.1 Verktygsfält 3 1.2.2 Modulväljare 4 1.2.3 Navigator

Läs mer

Snabbstartsguide. Visa eller växla mellan onlinekonton Klicka på ditt konto-id för att ändra inställningar eller växla mellan konton.

Snabbstartsguide. Visa eller växla mellan onlinekonton Klicka på ditt konto-id för att ändra inställningar eller växla mellan konton. Snabbstartsguide Microsoft OneNote 2013 ser annorlunda ut jämfört med tidigare versioner, så vi har skapat den här guiden för att hjälpa dig minimera din inlärningskurva. Växla mellan pekskärm och mus

Läs mer

Innehåll. 1 Inledning 5. 2 Förinställning 6. 3 Anpassa användargränssnittet 7. 4 Anpassa interna inställningar 9. 5 Förbereda att bränna en skiva 10

Innehåll. 1 Inledning 5. 2 Förinställning 6. 3 Anpassa användargränssnittet 7. 4 Anpassa interna inställningar 9. 5 Förbereda att bränna en skiva 10 Det här dokumentet är konverterat från KDE:s användarbas K3b-sida 2011-01-20. Uppdatering till 2.0 av KDE:s dokumentationsgrupp Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 2 Förinställning 6

Läs mer

Beställning till Husfoto. Handledning

Beställning till Husfoto. Handledning Beställning till Husfoto Handledning Datum: 13 mars 2012 Innehåll Inställningar... 2 Så här gör du en beställning... 4 Så här hämtar du materialet... 7 Hur sparas filerna?... 8 Support...11 Kortkommandon

Läs mer

KARLSTADS UNIVERSITETSBIBLIOTEK

KARLSTADS UNIVERSITETSBIBLIOTEK 1 (7) Guide till Zotero Med referenshanteringsprogrammet Zotero kan du enkelt samla dina referenser till böcker, artiklar m.m. och infoga källhänvisningar samt skapa litteraturlistor i MS Word, OpenOffice

Läs mer

Hämta projektkonfiguration från SharePoint till ett lokalt projekt

Hämta projektkonfiguration från SharePoint till ett lokalt projekt Hämta projektkonfiguration från SharePoint till ett lokalt projekt Du kan använda synkroniseringsfunktionen för att hämta projektkonfiguration från ett SharePoint-bibliotek till ett tomt lokalt projekt.

Läs mer

Lathund för fakturaspecifikation med rapportverktyget BusinessObjects, version 4.0. Version 1.0, 2013-06-14

Lathund för fakturaspecifikation med rapportverktyget BusinessObjects, version 4.0. Version 1.0, 2013-06-14 Lathund för fakturaspecifikation med rapportverktyget BusinessObjects, version 4.0 Version 1.0, 2013-06-14 Utgivare: Trafikverket Kontakt: fakturering.jarnvag@trafikverket.se Distributör: Trafikverket,

Läs mer

KOM I GÅNG MED DIN HANDBOK STANDARD FRÅN THOLIN & LARSSON

KOM I GÅNG MED DIN HANDBOK STANDARD FRÅN THOLIN & LARSSON KOM I GÅNG MED DIN HANDBOK STANDARD FRÅN THOLIN & LARSSON Kom i gång med din handbok Standard Innehåll 1 Börja redigera 2 Arbetsbordet 3 Redaktörsfliken 3.1 Uppstart: Att-göra-listor 4 Redigera innehåll

Läs mer

Välj bort om du vill. 96 Internet och e-post. 2. Mail-programmet finns i datorn. 1. Skriv mail i sökrutan. Windows Live Mail i Aktivitetsfältet.

Välj bort om du vill. 96 Internet och e-post. 2. Mail-programmet finns i datorn. 1. Skriv mail i sökrutan. Windows Live Mail i Aktivitetsfältet. Välj bort om du vill Om du är nöjd med att ha din e-post på nätet, kan du lugnt hoppa över detta avsnitt. Har du tid och tycker att det är roligt, kan du testa att använda e-postprogrammet Windows Live

Läs mer

Egna genvägar. Subhashish Pradhan T.C. Hollingsworth Översättare: Stefan Asserhäll

Egna genvägar. Subhashish Pradhan T.C. Hollingsworth Översättare: Stefan Asserhäll Subhashish Pradhan T.C. Hollingsworth Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 4 2 Hantera genvägar och grupper 4 2.1 Lägga till grupper...................................... 4 2.2 Lägga till

Läs mer

IMPORTERA POSTER TILL DIVA Anvisning för export av poster från andra databassystem för import till DiVA

IMPORTERA POSTER TILL DIVA Anvisning för export av poster från andra databassystem för import till DiVA IMPORTERA POSTER TILL DIVA Anvisning för export av poster från andra databassystem för import till DiVA Universitetsbiblioteket Senast ändrad: 2016-12-12 2 Innehållsförteckning Linköpings universitetsbibliotek

Läs mer

STOCKHOLMS UNIVERSITET. Handbok 2. Funktionaliteter moveon 4

STOCKHOLMS UNIVERSITET. Handbok 2. Funktionaliteter moveon 4 STOCKHOLMS UNIVERSITET Handbok 2 Funktionaliteter moveon 4 Göteborgs Universitet 2013-11-04: Denna manual visar hur man söker i tabeller och sorterar i kolumner och andra bra tips för att förenkla användandet

Läs mer

Del 2 HANTERA MUSIKFILER. 5. Importera filer... 34 6. Skapa ordning i din musiksamling... 38 7. Skapa spellistor... 46 8. Bränna cd-skivor...

Del 2 HANTERA MUSIKFILER. 5. Importera filer... 34 6. Skapa ordning i din musiksamling... 38 7. Skapa spellistor... 46 8. Bränna cd-skivor... Del HANTERA MUSIKFILER. Importera filer... 6. Skapa ordning i din musiksamling... 8 7. Skapa spellistor... 6 8. Bränna cd-skivor... . IMPORTERA FILER När du använder samma ljudformat för alla dina musikfiler,

Läs mer

Användarutbildning i SiteVision

Användarutbildning i SiteVision Användarutbildning i SiteVision SiteVision AB Version 3 Innehållsförteckning 1 Komma igång med SiteVision...1 1.1 Starta SiteVision... 1 1.2 Redigeringsläget i SiteVision... 2 1.2.1 Verktygslisten...2

Läs mer

Microsoft. Excel 2010. Migrera till Excel 2001. från Excel 2003

Microsoft. Excel 2010. Migrera till Excel 2001. från Excel 2003 I den här guiden Migrera till Excel 2001 Microsoft skiljer sig rent utseendemässigt mycket, så vi har skapat den här guiden för att hjälpa dig att snabbare lära dig programmet. Här kan du läsa om de viktigaste

Läs mer

Manual för lokalredaktörer villaagarna.se

Manual för lokalredaktörer villaagarna.se Manual för lokalredaktörer villaagarna.se Version 1 Villaägarnas Riksförbund Sollentuna 2011 Postadress Besöksdress Telefon Fax E-post Hemsida Box 7118, 192 07 Sollentuna Johan Berndes väg 8-10 010-750

Läs mer

Ja, men resultatet blir inte lika bra. Det är att skapa genvägsikoner. Se anvisningar nedan:

Ja, men resultatet blir inte lika bra. Det är att skapa genvägsikoner. Se anvisningar nedan: Du måste ha WinZip installerat, eller ett annat program som kan hantera filer med filtillägget zip! Du måste packa upp filen innan du kan använda ikonerna eller bilderna här. Vad är WinZip? WinZip är ett

Läs mer

SLUNIK manual. SLUNIK version 2 2010-08-03

SLUNIK manual. SLUNIK version 2 2010-08-03 SLUNIK manual SLUNIK version 2 2010-08-03 Innehåll SLUNIK...1 Kursledare... 1 Lärare... 1 LOGGA IN... 1 Hjälp, inloggning... 2 Välj kurs att administrera... 2 Om du inte ser din kurs i listan... 3 Filtrera

Läs mer

Lathund. Joint Collaboration AB Korta Gatan 7 171 54 Stockholm Tel. 08 28 20 30. www.interaxo.se interaxo@joint.se. Org.nr.

Lathund. Joint Collaboration AB Korta Gatan 7 171 54 Stockholm Tel. 08 28 20 30. www.interaxo.se interaxo@joint.se. Org.nr. Lathund Joint Collaboration AB Korta Gatan 7 171 54 Stockholm Tel. 08 28 20 30 www.interaxo.se interaxo@joint.se Org.nr. 556565-2590 SE INNEHÅLL LATHUND, INTERAXO... 2 1 Varför är det olika färg och utseende

Läs mer

Revu handledning: Spara markeringsverktyg i Verktygslådan

Revu handledning: Spara markeringsverktyg i Verktygslådan Revu handledning: Spara markeringsverktyg i Verktygslådan Verktygslådan i Revu låter dig lägga till markeringar i dina PDF-filer på ett effektivt sätt. Verktygslådan sparar de verktyg du använder oftast

Läs mer

Administration av lagets arbetsrum. Lathund

Administration av lagets arbetsrum. Lathund Administration av lagets arbetsrum Lathund Innehåll 1 Logga in... 2 2 Koppla serier till ditt lag... 3 3 Koppla serier och matcher till lagets kalender... 4 4 Konfigurera välkomsttext... 5 5 Konfigurera

Läs mer

Kommunala Mediacentralen våren 2006. Lathund. för beställning av läromedel. via Svenska Läromedel på Internet (SLI) Läromedel Böcker

Kommunala Mediacentralen våren 2006. Lathund. för beställning av läromedel. via Svenska Läromedel på Internet (SLI) Läromedel Böcker Lathund för beställning av läromedel via Svenska Läromedel på Internet (SLI) Läromedel Böcker Kommunala Mediacentralen KMC Hur hittar jag till Läromedel via SLI: Gå till KMC:s hemsida www.kmc.sodertalje.se.

Läs mer

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8)

Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8) Gran Canaria - Arbetsbeskrivning knapplänkar (Mediator 8) I detta exempel kommer du att lära dig Att skapa en ny presentation från början Att skapa en enkel knapp Att använda händelseinställningar, events

Läs mer

IBM SmartCloud for Social Business. IBM SmartCloud Engage och IBM SmartCloud Connections Användarhandbok

IBM SmartCloud for Social Business. IBM SmartCloud Engage och IBM SmartCloud Connections Användarhandbok IBM SmartCloud for Social Business IBM SmartCloud Engage och IBM SmartCloud Connections Användarhandbok IBM SmartCloud for Social Business IBM SmartCloud Engage och IBM SmartCloud Connections Användarhandbok

Läs mer

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen.

6. Nu skall vi ställa in vad som skall hända när man klickar på knappen samt att markören skall ändra sig till en hand när markören är på knappen. Fiskar Arbetsbeskrivning knappmeny (Mediator 8) I detta exempel kommer du att lära dig Att göra en mastersida med knappar Att använda en mastersida på andra sidor Att använd funktionen Alignment Arbetsgång

Läs mer

Visma Proceedo. Att logga in - Manual. Version 1.3 / 140414 1

Visma Proceedo. Att logga in - Manual. Version 1.3 / 140414 1 Visma Proceedo Att logga in - Manual Version 1.3 / 140414 1 Innehållsförteckning 1) INLOGGNING VIA VERKTYG OCH SYSTEM... 3 2) INTERNET EXPLORER... 6 2.1 Java... 6 2.2 Popup-fönster... 8 2.3 Browser, 32-

Läs mer

Bevaka vetenskapliga tidskrifter med hjälp av RSS

Bevaka vetenskapliga tidskrifter med hjälp av RSS Bevaka vetenskapliga tidskrifter med hjälp av RSS Vad ska jag lära mig? Att använda en RSS-läsare, t ex Google Reader Bevaka nya tidskriftsartiklar inom ditt ämne Prenumerera på innehållsförteckningar

Läs mer

PHOCA GALLERY (v 3.2.3)

PHOCA GALLERY (v 3.2.3) Joomla Guide 2.5.11 PHOCA GALLERY Sida 1 av 37 PHOCA GALLERY (v 3.2.3) I denna guide får du veta mer om: Inledningen till PHOCA GALLERY: Vad är ett Phoca Gallery Phoca Gallery Kontrollpanelen Stegen i

Läs mer

Publicera material i Blackboard

Publicera material i Blackboard Marie Andersson, IKT-centrum E-post: iktcentrum@mdh.se 2012-06-25 (Bb Learn 9.1.8) Publicera material i Blackboard Innehåll Att tänka på... 2 Mappar och Lärmoduler... 2 Skapa en mapp... 2 Skapa en lärmodul...

Läs mer

Del 2 ARBETA MED DATORN

Del 2 ARBETA MED DATORN NY upplaga! Harry Peronius LÄR DIG ANVÄNDA DIN MACINTOSH Del ARBETA MED DATORN. Adressbok... 56 5. ical... 59 6. Dashboard... 65 7. Dvd-spelare... 69 8. itunes... 7 9. iweb... 8 0. Automator... 9. Kompatibilitet

Läs mer

Mobilus får inte användas under tiden uppdateringen genomförs.

Mobilus får inte användas under tiden uppdateringen genomförs. Uppdatera Mobilus Professional till version 1.0.6 Mobilus får inte användas under tiden uppdateringen genomförs. OBS! Innan du påbörjar uppdateringen till version 1.0.6 måste du ladda ner och installera

Läs mer

Verktygen i Fronter, för lärare

Verktygen i Fronter, för lärare Verktygen i Fronter, för lärare Denna manual beskriver hur man använder verktygen i Fronter och skapar innehållet, t ex nyheter, mappar och forum. Rev 2014-07-07 1 Innehållsförteckning Hitta mitt kursrum...

Läs mer

Handbok för Klipper. Philip Rodrigues Carsten Pfeiffer Översättare: Stefan Asserhäll

Handbok för Klipper. Philip Rodrigues Carsten Pfeiffer Översättare: Stefan Asserhäll Philip Rodrigues Carsten Pfeiffer Översättare: Stefan Asserhäll 2 Innehåll 1 Inledning 5 2 Att använda Klipper 6 2.1 Grundläggande användning................................ 6 2.1.1 Klippers grafiska komponent...........................

Läs mer

Till flera av ovanstående finns det dessutom varianter, vilka kommer att presenteras i de olika avsnitten.

Till flera av ovanstående finns det dessutom varianter, vilka kommer att presenteras i de olika avsnitten. LINGUS32 Handledning Anne Börjesson Introduktion Lingus32 är ett program som främst är avsett att användas för att göra multimedia-baserade språkövningar. Programmet är skrivet för PC. Det finns möjlighet

Läs mer

Ellibot 1.0. Interaktivmedia Content Management System. Publicera för webben

Ellibot 1.0. Interaktivmedia Content Management System. Publicera för webben Ellibot 1.0 Interaktivmedia Content Management System Publicera för webben Innehåll Logga in 3 Skapa en ny webbsida 4 o Publicering 5 o Information 5 o Standardfiler 6 o Innehåll 7 Hur man skapar en länk

Läs mer

Filhantering utforskaren avslöjar hur information lagras

Filhantering utforskaren avslöjar hur information lagras Filhantering utforskaren avslöjar hur information lagras 44 När man skriver ett brev eller ritar en bild skapas ett do kument, som måste sparas någonstans för att inte försvinna när datorn slås av. I datorn

Läs mer

Manual till publiceringsverktyg

Manual till publiceringsverktyg Manual till publiceringsverktyg Allmänt När man har loggat in hamnar man direkt på översikten över hela webbplatsen. Överst hittar man en meny som alltid ligger med i verktyget. Denna meny innehåller översikten

Läs mer

DynaPahlm är användbart på många olika typer av webbplatser. Denna handbok ger dig tips och vägledning till hur du bäst använder DynaPahlm

DynaPahlm är användbart på många olika typer av webbplatser. Denna handbok ger dig tips och vägledning till hur du bäst använder DynaPahlm Användarhandbok (testsite http://www.pahlm.com/dynapahlm/ Förord DynaPahlm är levererat tillsammans med din webbplats från KM-Företagsutveckling. DynaPahlm är ett Content Management System (CMS), fritt

Läs mer

Karlstads universitetsbibliotek

Karlstads universitetsbibliotek Karlstads universitetsbibliotek 2015 Guide till Zotero Med referenshanteringsprogrammet Zotero kan du enkelt samla dina referenser till böcker, artiklar m.m. och infoga källhänvisningar samt skapa litteraturlistor

Läs mer

Grunderna i Word. Identifiera gränssnittsobjekt som du kan använda för att utföra vanliga uppgifter.

Grunderna i Word. Identifiera gränssnittsobjekt som du kan använda för att utföra vanliga uppgifter. Grunderna i Word Word är ett effektivt ordbehandlings- och layoutprogram, men för att kunna använda det på bästa sätt måste du först förstå grunderna. I de här självstudierna beskrivs vissa av de aktiviteter

Läs mer

Använda Office 365 på en iphone eller en ipad

Använda Office 365 på en iphone eller en ipad Använda Office 365 på en iphone eller en ipad Snabbstartsguide Kontrollera e-post Konfigurera din iphone eller ipad så att du kan skicka och ta emot e-post från ditt Office 365-konto. Kontrollera din kalender

Läs mer

Software Translator 6.1 Manual

Software Translator 6.1 Manual Software Translator 6.1 Manual 1 Innehåll Sidan Inledning 3 Installation 4 Auktorisation 4 Översikt Programfönster 5 Menyer Arkiv 5 Visa 6 Språk 6 Verktyg 7 Hjälp 7 Handhavande Att lägga till ett program

Läs mer

INLEDNING MENYN FÖR FILNAVIGERING

INLEDNING MENYN FÖR FILNAVIGERING MEDIABANKEN Användarguide INLEDNING Att använda mediabanken är enkelt och intuitivt. När du loggat in har du en meny till vänster för navigering bland filerna i mediabanken och en meny överst funktioner

Läs mer

Använd WordFinder Pro för Mac optimalt! Snabbguide med nyttiga tips och trix.

Använd WordFinder Pro för Mac optimalt! Snabbguide med nyttiga tips och trix. Använd WordFinder Pro för Mac optimalt! Snabbguide med nyttiga tips och trix. Dokumentversion 2014-1 Tekniska förutsättningar För WordFinder 11 Pro för Mac krävs följande: Processor: Intel Mac OS X 10.8

Läs mer

Innehåll 2002:1 (011212) 1

Innehåll 2002:1 (011212) 1 I Innehåll A Introduktion... 3 B CD-FSD... 5 B.1 Uppbyggnad CD-FSD... 6 B.2 Startmenyer... 7 Startmeny FSD... 7 Startmeny... 8 B.3 Navigeringsram/Aktuell info... 9 Navigeringsram... 9 Aktuell info... 10

Läs mer

Verktygen i Fronter, för lärare

Verktygen i Fronter, för lärare Verktygen i Fronter, för lärare Denna manual beskriver hur man använder verktygen i Fronter och skapar innehållet, t ex nyheter, mappar och forum. 2012-07-18 Innehållsförteckning Hur hittar jag mitt kursrum?...

Läs mer

Filhantering utforskaren avslöjar

Filhantering utforskaren avslöjar Filhantering utforskaren avslöjar 1 hur information lagras När man skriver ett brev eller ritar en bild skapas ett do kument. Detta måste sparas någonstans för att inte försvinna när datorn slås av. I

Läs mer

2. Dels går det att klicka sig fram via appsamlingen (2a) (som liknar en rutig kvadrat). Klicka på E-post (2b). 2b.

2. Dels går det att klicka sig fram via appsamlingen (2a) (som liknar en rutig kvadrat). Klicka på E-post (2b). 2b. Google E-post I Google Apps for Education (GAFE) ingår motsvarande Googles G-mail som e-postprogram. Eftersom det är skolan som administrerar våra GAFE-konton samt att vi behåller vår gamla domän zonline.se

Läs mer

Uppdaterad: 2014-05-07. Lathund. ImageVault

Uppdaterad: 2014-05-07. Lathund. ImageVault Uppdaterad: 2014-05-07 Lathund ImageVault 1 Innehållsförteckning Inledning 3 Imagevault 4 Ladda upp fil 5 Ladda upp fler än fyra bilder samtidigt 7 Snabbuppladda bildalbum 9 Beskrivning kortkommando via

Läs mer

Laboration 2 i datorintro för E1 Detta dokument innehåller instruktioner och övningar för introduktion till E-programmets datorsystem och web-mail.

Laboration 2 i datorintro för E1 Detta dokument innehåller instruktioner och övningar för introduktion till E-programmets datorsystem och web-mail. Laboration 2 i datorintro för E1 Detta dokument innehåller instruktioner och övningar för introduktion till E-programmets datorsystem och web-mail. E-programmets datorsalar är utrustade med datorer som

Läs mer

Använd WordFinder från Mac App Store optimalt! Snabbguide med nyttiga tips och trix.

Använd WordFinder från Mac App Store optimalt! Snabbguide med nyttiga tips och trix. Använd WordFinder från Mac App Store optimalt! Snabbguide med nyttiga tips och trix. Tekniska förutsättningar För WordFinder från Mac App Store krävs följande: Processor: Intel Mac OS X 10.6.6 eller senare.

Läs mer