diff --git a/src/main/dig/FullAdder_RC_CLA.dig b/src/main/dig/FullAdder_RC_CLA.dig
index ce3068615..3f9c8f67b 100644
--- a/src/main/dig/FullAdder_RC_CLA.dig
+++ b/src/main/dig/FullAdder_RC_CLA.dig
@@ -30,7 +30,7 @@
Label
- C_i-1
+ C0
@@ -242,7 +242,7 @@
Label
- C_i
+ C3
@@ -346,7 +346,7 @@
Label
- C_i-1
+ C0
@@ -638,10 +638,6 @@
Inputs
5
-
- Inputs
- 5
-
0
@@ -651,7 +647,7 @@
Label
- C_i
+ C3
diff --git a/src/main/java/de/neemann/digital/draw/graphics/GraphicSVG.java b/src/main/java/de/neemann/digital/draw/graphics/GraphicSVG.java
index ef39478fd..68476ea17 100644
--- a/src/main/java/de/neemann/digital/draw/graphics/GraphicSVG.java
+++ b/src/main/java/de/neemann/digital/draw/graphics/GraphicSVG.java
@@ -7,8 +7,7 @@ import java.util.Date;
* @author hneemann
*/
public class GraphicSVG implements Graphic, Closeable {
- private static final int TEXTSIZE = 20;
- private static final int DEF_SCALE = 100;
+ private static final int DEF_SCALE = 30;
private final BufferedWriter w;
public GraphicSVG(File file, Vector min, Vector max) throws IOException {
@@ -22,7 +21,7 @@ public class GraphicSVG implements Graphic, Closeable {
public GraphicSVG(File file, Vector min, Vector max, File source, int svgScale) throws IOException {
w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "utf-8"));
w.write("\n" +
- "\n");
+ "\n");
w.write("\n");
if (source != null) {
w.write("\n");
@@ -32,8 +31,8 @@ public class GraphicSVG implements Graphic, Closeable {
" xmlns:svg=\"http://www.w3.org/2000/svg\"\n" +
" xmlns=\"http://www.w3.org/2000/svg\"\n");
- double width = (max.x - min.x) * svgScale / 900;
- double height = (max.y - min.y) * svgScale / 900;
+ double width = (max.x - min.x) * svgScale / 100;
+ double height = (max.y - min.y) * svgScale / 100;
w.write(" width=\"" + width + "mm\"\n" +
" height=\"" + height + "mm\"\n" +
@@ -142,7 +141,7 @@ public class GraphicSVG implements Graphic, Closeable {
}
}
- private String getColor(Style style) {
+ public String getColor(Style style) {
return "#" + Integer.toHexString(style.getColor().getRGB()).substring(2);
}
diff --git a/src/main/java/de/neemann/digital/draw/graphics/GraphicSVGLaTeX.java b/src/main/java/de/neemann/digital/draw/graphics/GraphicSVGLaTeX.java
new file mode 100644
index 000000000..e3bb5af36
--- /dev/null
+++ b/src/main/java/de/neemann/digital/draw/graphics/GraphicSVGLaTeX.java
@@ -0,0 +1,49 @@
+package de.neemann.digital.draw.graphics;
+
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author hneemann
+ */
+public class GraphicSVGLaTeX extends GraphicSVG {
+ public GraphicSVGLaTeX(File file, Vector min, Vector max) throws IOException {
+ super(file, min, max);
+ }
+
+ @Override
+ public void drawText(Vector p1, Vector p2, String text, Orientation orientation, Style style) {
+ StringBuilder sb = new StringBuilder();
+ for (int i = 0; i < text.length(); i++) {
+ char c = text.charAt(i);
+ switch (c) {
+ case '~':
+ case '\u00AC':
+ sb.append("$\\neg$");
+ break;
+ case '\u2265':
+ sb.append("$\\geq$");
+ break;
+ case '&':
+ sb.append("\\&");
+ break;
+ default:
+ sb.append(c);
+ }
+ }
+ super.drawText(p1, p2, sb.toString(), orientation, style);
+ }
+
+ @Override
+ public void drawCircle(Vector p1, Vector p2, Style style) {
+ if ((style != Style.WIRE && style != Style.WIRE_OUT) || Math.abs(p1.x - p2.x) > 2)
+ super.drawCircle(p1, p2, style);
+ }
+
+ @Override
+ public String getColor(Style style) {
+ if (style == Style.WIRE) return super.getColor(Style.NORMAL);
+ if (style == Style.WIRE_OUT) return super.getColor(Style.NORMAL);
+ return super.getColor(style);
+ }
+}
diff --git a/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java b/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java
index 80480336d..b318d8d1d 100644
--- a/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java
+++ b/src/main/java/de/neemann/digital/draw/shapes/ClockShape.java
@@ -46,7 +46,7 @@ public class ClockShape implements Shape {
@Override
public void drawTo(Graphic graphic, boolean heighLight) {
- graphic.drawPolygon(new Polygon(true).add(-SIZE * 2 - 2, -SIZE).add(-2, -SIZE).add(-2, SIZE).add(-SIZE * 2 - 2, SIZE), Style.NORMAL);
+ graphic.drawPolygon(new Polygon(true).add(-SIZE * 2 - 1, -SIZE).add(-1, -SIZE).add(-1, SIZE).add(-SIZE * 2 - 1, SIZE), Style.NORMAL);
Vector textPos = new Vector(-SIZE * 3, 0);
graphic.drawText(textPos, textPos.add(1, 0), label, Orientation.RIGHTCENTER, Style.NORMAL);
diff --git a/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java b/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java
index 6107ccf49..7995df22b 100644
--- a/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java
+++ b/src/main/java/de/neemann/digital/draw/shapes/DemuxerShape.java
@@ -51,10 +51,10 @@ public class DemuxerShape implements Shape {
@Override
public void drawTo(Graphic graphic, boolean highLight) {
graphic.drawPolygon(new Polygon(true)
- .add(2, 3)
- .add(SIZE * 2 - 2, -2)
- .add(SIZE * 2 - 2, height + 2)
- .add(2, height - 3), Style.NORMAL);
+ .add(1, 3)
+ .add(SIZE * 2 - 1, -2)
+ .add(SIZE * 2 - 1, height + 2)
+ .add(1, height - 3), Style.NORMAL);
graphic.drawText(new Vector(SIZE * 2 - 2, 0), new Vector(SIZE * 2, 0), "0", Orientation.RIGHTTOP, Style.SHAPE_PIN);
}
}
diff --git a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java
index 007951045..15049e2fd 100644
--- a/src/main/java/de/neemann/digital/draw/shapes/InputShape.java
+++ b/src/main/java/de/neemann/digital/draw/shapes/InputShape.java
@@ -62,9 +62,9 @@ public class InputShape implements Shape {
}
}
- Vector center = new Vector(-2 - SIZE, 0);
+ Vector center = new Vector(-1 - SIZE, 0);
graphic.drawCircle(center.sub(RAD), center.add(RAD), style);
- graphic.drawPolygon(new Polygon(true).add(-SIZE * 2 - 2, -SIZE).add(-2, -SIZE).add(-2, SIZE).add(-SIZE * 2 - 2, SIZE), Style.NORMAL);
+ graphic.drawPolygon(new Polygon(true).add(-SIZE * 2 - 1, -SIZE).add(-1, -SIZE).add(-1, SIZE).add(-SIZE * 2 - 1, SIZE), Style.NORMAL);
Vector textPos = new Vector(-SIZE * 3, 0);
graphic.drawText(textPos, textPos.add(1, 0), label, Orientation.RIGHTCENTER, Style.NORMAL);
diff --git a/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java b/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java
index 15f152cac..effb4a359 100644
--- a/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java
+++ b/src/main/java/de/neemann/digital/draw/shapes/MuxerShape.java
@@ -46,10 +46,10 @@ public class MuxerShape implements Shape {
@Override
public void drawTo(Graphic graphic, boolean heighLight) {
graphic.drawPolygon(new Polygon(true)
- .add(2, -2)
- .add(SIZE * 2 - 2, 3)
- .add(SIZE * 2 - 2, inputCount * SIZE - 3)
- .add(2, inputCount * SIZE + 2), Style.NORMAL);
+ .add(1, -2)
+ .add(SIZE * 2 - 1, 3)
+ .add(SIZE * 2 - 1, inputCount * SIZE - 3)
+ .add(1, inputCount * SIZE + 2), Style.NORMAL);
graphic.drawText(new Vector(3, 0), new Vector(4, 0), "0", Orientation.LEFTTOP, Style.SHAPE_PIN);
}
}
diff --git a/src/main/java/de/neemann/digital/gui/Main.java b/src/main/java/de/neemann/digital/gui/Main.java
index e3e268e4e..d2040b2d8 100644
--- a/src/main/java/de/neemann/digital/gui/Main.java
+++ b/src/main/java/de/neemann/digital/gui/Main.java
@@ -5,10 +5,7 @@ import de.neemann.digital.core.wiring.Clock;
import de.neemann.digital.draw.elements.Circuit;
import de.neemann.digital.draw.elements.PinException;
import de.neemann.digital.draw.elements.PinOrder;
-import de.neemann.digital.draw.graphics.Exporter;
-import de.neemann.digital.draw.graphics.Graphic;
-import de.neemann.digital.draw.graphics.GraphicMinMax;
-import de.neemann.digital.draw.graphics.GraphicSVG;
+import de.neemann.digital.draw.graphics.*;
import de.neemann.digital.draw.library.ElementLibrary;
import de.neemann.digital.draw.model.ModelDescription;
import de.neemann.digital.draw.model.RealTimeClock;
@@ -164,6 +161,7 @@ public class Main extends JFrame implements ClosingWindowListener.ConfirmSave {
JMenu export = new JMenu(Lang.get("menu_export"));
export.add(new ExportAction(Lang.get("menu_exportSVG"), "svg", GraphicSVG::new));
+ export.add(new ExportAction(Lang.get("menu_exportSVGLaTex"), "svg", GraphicSVGLaTeX::new));
JMenu file = new JMenu(Lang.get("menu_file"));
diff --git a/src/main/resources/lang/lang_en.properties b/src/main/resources/lang/lang_en.properties
index ed9b4ca6c..348f36a7b 100644
--- a/src/main/resources/lang/lang_en.properties
+++ b/src/main/resources/lang/lang_en.properties
@@ -133,6 +133,7 @@ menu_fast=Run Fast
menu_fast_tt=Runs the model until a break is detected by the BRK element.
menu_export=Export
menu_exportSVG=Export SVG
+menu_exportSVGLaTex=Export SVG+LaTeX
menu_delete=Delete elements
menu_delete_tt=Delete selected single element or group of elements