2017-10-26 22 views
1

Jede Hilfe ist willkommen!Mathematica: Layout mit Bild und Text

Ich habe viele Bilder und Texte, die zu jedem Bild gehören. Nun möchte Ich mag automatisch die folgende Handout für jedes Paar von Bild zu erzeugen und Text:

enter image description here

  • Das Bild oben ist.
  • Der Text sollte darunter platziert werden, sein Stil sollte "gerechtfertigt" und wenn möglich Silbentrennung aktiviert sein.
  • Dann sollte der Rest des Raumes ein Bereich sein, mit einem Titelnamen: "Notizen", um offensichtlich Notizen zu machen.

Wie kann ich es mit Mathematica tun?

Hier sind einige Bilder, um zu versuchen: https://www.dropbox.com/sh/o8x992dz9gg7q9e/AAAyli1pO2f4q35ULNDreC1ua?dl=0

Hier ist der Beispieltext, die mit ihm gehen könnte:

text={{"As there are several possibilities to perform lithography,", "I will start by providing some definitions", "and by explaining some general concepts that are recurring for all", "the lithography variations.", "Then I will dive into details how one fabricates the lithography masks", "using a direct write laser tool."},{"Lithography is the fundamental process of transferring geometric shape", "from a design to a thin layer of radiation sensitive material", "called resist.", "Which is covering the surface of a wafer substrate.", "These shapes or patterns define the various regions", "in an integrated circuit, such as the implantation regions,", "the contact windows, the metallic wiring etc."},{"Each lithography follows a well defined series of process steps,","called process flow.", "It may vary according to the lithography used", "and the materials involved.", "But a typical generic example is shown here", "where we go step by step through it.", "First the substrate, it can be a silicon wafer or glass plate,"}} 

Das ist, was ich versucht:

Labeled[images[[#]], Framed[text[[#]]], 
    LabelStyle -> 
    Directive[Bold, Alignment -> TextJustification, 
    Hyphenation -> False, FontFamily -> "Helvetica"]] & /@ 
Range[Length[images]] 

Dinge, die Ich weiß nicht, wie es geht:

  1. das zusätzliche Feld für Notizen
  2. A4-Format
  3. Make Bild und Text entsprechende Größen
  4. Hyphenation scheint nicht richtig zu arbeiten Hinzufügen von entweder
+0

Dies ist ein zuverlässiger Ansatz: https://stackoverflow.com/a/7138184/879601 –

Antwort

2

Hier ist ein Ansatz. Stellen Sie zuerst Ihren Druckbereich für die gewählte Ausgabe ein. PDF-Ränder können sich vom direkten Druck von Mathematica unterscheiden. Hinweis: Aufgrund der Einstellung $FrontEndSession bleiben diese Einstellungen nur für die aktuelle Sitzung bestehen.

SetOptions[$FrontEndSession, PrintingOptions -> { 
    "PrintingMargins" -> { 
     {10(* position left *), 40(* clip right *)}, 
     {30(* clip bottom *), 25(* position top *)}}, 
    "FirstPageHeader" -> False, 
    "FirstPageFooter" -> False, 
    "RestPagesHeader" -> False, 
    "RestPagesFooter" -> False, 
    "Magnification" -> 1}]; 

testpage = Graphics[{White, Rectangle[{0, 0}, {700, 1080}], Black, 
    Line[{{0, 0}, {700 - 1, 0}, {700 - 1, 1080}, {0, 1080}, {0, 0}}]}, 
    PlotRange -> {{0, 700}, {0, 1080}}, ImageSize -> 700]; 

nb = CreateDocument[ExpressionCell[testpage, "Print"], WindowSize -> 850]; 
Export[FileNameJoin[{$InitialDirectory, "testpage.pdf"}], nb]; 
NotebookClose[nb] 

enter image description here

eines der Bilder des OP mit, und Text, einen Bindestrich für Zeile-wrap Demonstration umfassen modifiziert.

image = Import[FileNameJoin[{$InitialDirectory, "p1.jpg"}]]; 

text1 = StringRiffle[StringReplace[StringRiffle[#, " "], {". " -> ". ", 
     "some definitions" -> "some-definitions"}] & /@ [email protected], "\n\n"]; 

Seitenerstellungsfunktion.

createPage[{image_, text_, number_, pdfname_}] := Module[{y = -200}, 
    page = Graphics[{White, Rectangle[{0, 0}, {700, 1080}], Black, 

    Inset[image, {0, 1080}, {Left, Top}, {700, Automatic}], 

    Inset[ 
     Graphics[{Blue, Thickness[0.005], 
     Line[{{0, 600 + 1 + y}, {700 - 1, 600 + 1 + y}, 
      {700 - 1, 800 + y}, {0, 800 + y}, {0, 0}}], 
     Black, 
     Inset[ 
     TextCell[text, LineSpacing -> {0, 16}, TextJustification -> 1], 
     Center, Center, {600, Automatic}] 
     }, 
     PlotRange -> {{0, 700}, {600 + y, 800 + y}}, ImageSize -> 700, 
     BaseStyle -> {FontFamily -> "Times", 
     FontWeight -> "Plain", FontSize -> 15.5}], 
     {0, 0}, {0, 0}, {700, Automatic}], 

    Inset[ 
     Graphics[{ 
     Red, 
     Line[{{570, 100 + 1}, {630 - 1, 100 + 1}, 
      {630 - 1, 160}, {570, 160}, {570, 100 + 1}}], 
     Black, 
     Inset[ToString[number], Center, Center, Automatic] 
     }, 
     PlotRange -> {{570, 630}, {100, 160}}, ImageSize -> 60, 
     BaseStyle -> {FontFamily -> "Times", 
     FontWeight -> "Plain", FontSize -> 32}], 
     {0, 0}, {0, 0}, {60, Automatic}] 
    }, 
    PlotRange -> {{0, 700}, {0, 1080}}, ImageSize -> 700, 
    BaseStyle -> {FontFamily -> "Times", 
     FontWeight -> "Plain", FontSize -> 15.5}]; 

    nb = CreateDocument[ExpressionCell[page, "Print"], WindowSize -> 850]; 
    Export[FileNameJoin[{$InitialDirectory, pdfname}], nb]; 
    NotebookClose[nb]] 

createPage[{image, text1, 4, "page.pdf"}] 

enter image description here

Hinweis. Die Einstellungen +1 und -1 dienen nur zum Rendern auf dem Bildschirm. Sie können zum Drucken oder für die Konvertierung in PDF ausgelassen werden.

Estimating Textblock Höhe

Wenn Ihr Texteinschübe in Höhe von Seite zu Seite variieren kann das Layout programmatisch eingestellt werden, um diese Routine.Hinweis, dies ist ungefähr, weil es in der "Working"screen style environment arbeitet, während PDF oder Drucken die "Printout" Umgebung verwendet, die sich leicht unterscheidet. Beispielsweise wird der erste Absatz auf vier Zeilen in der "Printout"-Umgebung umgebrochen.

makebox[wd_, ht_] := Graphics[{Green, Rectangle[{0, 0}, {wd, ht}], 
    Black, Inset[ 
    TextCell[text1, LineSpacing -> {0, 16}, TextJustification -> 1], 
    {0, 0}, {Left, Bottom}, {wd, Automatic}]}, 
    BaseStyle -> {FontFamily -> "Times", 
    FontWeight -> "Plain", FontSize -> 15.5}, 
    PlotRange -> {{0, wd}, {0, ht}}, ImageSize -> wd] 

box = makebox[600, 900]; 
raster = Rasterize[box, "Data"]; 
topline = raster[[1]] = raster[[2]]; 
newheight = Length[[email protected] /. {x__, topline ..} :> {x}] + 4; 

Row[{"Text block pixel height is ", newheight}] 
makebox[600, newheight] 

enter image description here

Mehrseitiges PDF

Um mehrere Seiten in einem einzigen PDF zu veröffentlichen.

nb = CreateDocument[{ 
    ExpressionCell[page1, "Print"], 
    ExpressionCell[page2, "Print"], 
    ExpressionCell[page3, "Print"]}, WindowSize -> 850]; 
Export[FileNameJoin[{$InitialDirectory, "allpages.pdf"}], nb]; 
NotebookClose[nb] 
+0

Das sieht wirklich nett !! Danke vielmals !!! Wissen Sie, wie Sie mehrere Bild-Text-Paare auf einer separaten Seite (wie hier dargestellt) exportieren und alles in einem PDF? – james

+0

Um mehrere separate Seiten zu veröffentlichen, ordnen Sie die Funktion 'createPage' über Listen mit Seitenparametern zu. Erstellen Sie für eine mehrseitige PDF-Datei mehrere Seiten, und exportieren Sie sie dann in einer einzigen PDF-Datei, wie oben gezeigt. –

+0

Vielen Dank! Das ist fantastisch ! :)) – james