mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 19:07:45 +00:00
Initial commit of Inkscape SVG LaTeX + PDF support
Based on Daniel Groger's work of five years ago, with minor changes http://www.mail-archive.com/lyx-devel%40lists.lyx.org/msg169820.html This extends the support for Xfig LaTeX + PDF to a more modern and actively developed vector graphics editor. Embedded Objects manual updated, also to include a workaround for an Inkscape 0.91 bug.
This commit is contained in:
parent
3fefbf7917
commit
10c88aa58f
@ -2316,6 +2316,8 @@ dist_scripts_DATA += \
|
||||
scripts/fen2ascii.py \
|
||||
scripts/fig2pdftex.py \
|
||||
scripts/fig2pstex.py \
|
||||
scripts/svg2pdftex.py \
|
||||
scripts/svg2pstex.py \
|
||||
scripts/fig_copy.py \
|
||||
scripts/html2latexwrapper.py \
|
||||
scripts/include_bib.py \
|
||||
|
@ -712,9 +712,9 @@ def checkFormatEntries(dtl_tools):
|
||||
\Format jlyx cjklyx "CJK LyX 1.4.x (euc-jp)" "" "" "" "document" ""
|
||||
\Format klyx cjklyx "CJK LyX 1.4.x (euc-kr)" "" "" "" "document" ""
|
||||
\Format lyxpreview lyxpreview "LyX Preview" "" "" "" "" ""
|
||||
\Format pdftex pdftex_t PDFTEX "" "" "" "" ""
|
||||
\Format pdftex "pdftex_t, pdf_tex" PDFTEX "" "" "" "" ""
|
||||
\Format program "" Program "" "" "" "" ""
|
||||
\Format pstex pstex_t PSTEX "" "" "" "" ""
|
||||
\Format pstex "pstex_t, ps_tex" PSTEX "" "" "" "" ""
|
||||
\Format wmf wmf "Windows Metafile" "" "" "" "vector" "image/x-wmf"
|
||||
\Format emf emf "Enhanced Metafile" "" "" "" "vector" "image/x-emf"
|
||||
\Format wordhtml "html, htm" "HTML (MS Word)" "" "" "" "document" ""
|
||||
@ -934,6 +934,8 @@ def checkConverterEntries():
|
||||
\converter fig ppm "fig2dev -L ppm $$i $$o" ""
|
||||
\converter fig svg "fig2dev -L svg $$i $$o" ""
|
||||
\converter fig png "fig2dev -L png $$i $$o" ""
|
||||
\converter svg pdftex "python -tt $$s/scripts/svg2pdftex.py $$i $$o" ""
|
||||
\converter svg pstex "python -tt $$s/scripts/svg2pstex.py $$i $$o" ""
|
||||
\converter fig pdftex "python -tt $$s/scripts/fig2pdftex.py $$i $$o" ""
|
||||
\converter fig pstex "python -tt $$s/scripts/fig2pstex.py $$i $$o" ""''')
|
||||
#
|
||||
|
@ -1,5 +1,5 @@
|
||||
#LyX 2.2 created this file. For more info see http://www.lyx.org/
|
||||
\lyxformat 508
|
||||
#LyX 2.3 created this file. For more info see http://www.lyx.org/
|
||||
\lyxformat 512
|
||||
\begin_document
|
||||
\begin_header
|
||||
\save_transient_properties true
|
||||
@ -171,6 +171,7 @@ graphicboxes
|
||||
\font_osf false
|
||||
\font_sf_scale 100 100
|
||||
\font_tt_scale 100 100
|
||||
\use_microtype false
|
||||
\graphics default
|
||||
\default_output_format pdf2
|
||||
\output_sync 0
|
||||
@ -38609,6 +38610,118 @@ target "http://en.wikipedia.org/wiki/Xfig"
|
||||
.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Description
|
||||
Inkscape
|
||||
\begin_inset space ~
|
||||
\end_inset
|
||||
|
||||
figure This experimental template supports images created with the program
|
||||
|
||||
\begin_inset CommandInset href
|
||||
LatexCommand href
|
||||
name "Inkscape"
|
||||
target "https://fi.wikipedia.org/wiki/Inkscape"
|
||||
|
||||
\end_inset
|
||||
|
||||
.
|
||||
It works very similarly to Xfig support, except that Inkscape is a more
|
||||
modern image editor than Xfig, which uses Scalable Vector Graphics (SVG)
|
||||
as its native format.
|
||||
\end_layout
|
||||
|
||||
\begin_deeper
|
||||
\begin_layout Standard
|
||||
LyX will process the image file in much the same way as it does an Xfig
|
||||
image, extracting the text into a separate TeX file for the text strings,
|
||||
and a PDF file for the rest.
|
||||
\end_layout
|
||||
|
||||
\begin_layout Description
|
||||
Warning: Unfortunately the latest version of Inkscape, 0.91, contains a bug:
|
||||
with multi-page PDFs, the TeX file will sometimes reference more pages
|
||||
than the PDF file contains.
|
||||
This is the version that ships with Ubuntu 16.04.
|
||||
Its use with LyX can therefore not be recommended, until the bug is fixed
|
||||
\begin_inset Foot
|
||||
status open
|
||||
|
||||
\begin_layout Plain Layout
|
||||
A workaround for those who have already SVG figures in their document is,
|
||||
to manually do the LaTeX+PDF output from Inkscape, edit the
|
||||
\family typewriter
|
||||
.pdf_tex
|
||||
\family default
|
||||
file to remove the erroneous references, and
|
||||
\family typewriter
|
||||
|
||||
\backslash
|
||||
input
|
||||
\family default
|
||||
it directly into LyX, i.e., not use the external-template mechanism:
|
||||
\end_layout
|
||||
|
||||
\begin_layout Plain Layout
|
||||
\begin_inset Graphics
|
||||
filename workaround.png
|
||||
scale 50
|
||||
|
||||
\end_inset
|
||||
|
||||
|
||||
\end_layout
|
||||
|
||||
\begin_layout Plain Layout
|
||||
Here, the child document input inset (
|
||||
\family sans
|
||||
Insert\SpecialChar menuseparator
|
||||
File\SpecialChar menuseparator
|
||||
Child Document
|
||||
\family default
|
||||
) was used, which allows you do directly edit the
|
||||
\family typewriter
|
||||
.pdf_tex
|
||||
\family default
|
||||
file in a text editor.
|
||||
The LaTeX output is based on this edited snippet as re-generation from
|
||||
the SVG file has been commented out.
|
||||
\end_layout
|
||||
|
||||
\end_inset
|
||||
|
||||
.
|
||||
\end_layout
|
||||
|
||||
\begin_deeper
|
||||
\begin_layout Standard
|
||||
The reason why we would use this complicated process at all, like in the
|
||||
case of Xfig, is that it makes the text strings inside the figure of the
|
||||
same font type and attributes as the surrounding text, which looks so much
|
||||
more professional.
|
||||
With Inkscape, even the
|
||||
\emph on
|
||||
size
|
||||
\emph default
|
||||
of the font is taken from the surrounding LaTeX document – in Xfig, you
|
||||
have to set it by hand to be the same.
|
||||
Of course you can always embed LaTeX modifiers like
|
||||
\family typewriter
|
||||
|
||||
\backslash
|
||||
Large
|
||||
\family default
|
||||
,
|
||||
\family typewriter
|
||||
|
||||
\backslash
|
||||
small
|
||||
\family default
|
||||
, etc.
|
||||
into your figure text strings.
|
||||
\end_layout
|
||||
|
||||
\end_deeper
|
||||
\end_deeper
|
||||
\begin_layout Standard
|
||||
\begin_inset Float table
|
||||
placement !h
|
||||
|
BIN
lib/doc/workaround.png
Normal file
BIN
lib/doc/workaround.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
@ -290,6 +290,48 @@ Template XFig
|
||||
TemplateEnd
|
||||
|
||||
|
||||
Template Inkscape
|
||||
GuiName "Inkscape figure"
|
||||
HelpText
|
||||
An Inkscape figure.
|
||||
This template should work flawlessly with Inkscape 0.48.
|
||||
For Inkscape 0.91, there is a bug in the LaTeX + PDF output
|
||||
which makes a workaround necessary, see Embedded Objects manual.
|
||||
HelpTextEnd
|
||||
InputFormat svg
|
||||
FileFilter "*.svg"
|
||||
AutomaticProduction true
|
||||
Transform Rotate
|
||||
Preview InstantPreview
|
||||
Format PDFLaTeX
|
||||
TransformCommand Rotate RotationLatexCommand
|
||||
# Resize is not desirable here, as fonts are sized to surrounding LaTeX font
|
||||
Product "$$RotateFront\\input{$$AbsOrRelPathMaster$$Basename.pdf_tex}$$RotateBack"
|
||||
UpdateFormat pdftex
|
||||
UpdateResult "$$AbsPath$$Basename.pdf_tex"
|
||||
Requirement "color"
|
||||
Requirement "graphicx"
|
||||
# Preamble WarnNotFound
|
||||
# Preamble InputOrWarn
|
||||
ReferencedFile pdflatex "$$AbsOrRelPathMaster$$Basename.pdf_tex"
|
||||
ReferencedFile pdflatex "$$AbsPath$$Basename.pdf"
|
||||
FormatEnd
|
||||
Format LaTeX
|
||||
TransformCommand Rotate RotationLatexCommand
|
||||
Product "$$RotateFront\\input{$$AbsOrRelPathMaster$$Basename.eps_tex}$$RotateBack"
|
||||
UpdateFormat pstex
|
||||
UpdateResult "$$AbsPath$$Basename.eps_tex"
|
||||
Requirement "color"
|
||||
Requirement "graphicx"
|
||||
# Preamble WarnNotFound
|
||||
# Preamble InputOrWarn
|
||||
ReferencedFile latex "$$AbsOrRelPathMaster$$Basename.eps_tex"
|
||||
ReferencedFile latex "$$AbsPath$$Basename.eps"
|
||||
ReferencedFile dvi "$$AbsPath$$Basename.eps"
|
||||
FormatEnd
|
||||
TemplateEnd
|
||||
|
||||
|
||||
Template ChessDiagram
|
||||
GuiName "Chess diagram"
|
||||
HelpText
|
||||
|
57
lib/scripts/svg2pdftex.py
Normal file
57
lib/scripts/svg2pdftex.py
Normal file
@ -0,0 +1,57 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# file svg2pdftex.py
|
||||
#
|
||||
# This script converts an SVG image to something that pdflatex can process
|
||||
# into high quality PDF.
|
||||
|
||||
# Usage:
|
||||
# python svg2pdftex.py ${base}.svg ${base}.pdft
|
||||
# This command generates
|
||||
# ${base}.pdf the converted pdf file
|
||||
# ${base}.pdft a tex file that can be included in your latex document
|
||||
# using '\input{${base}.pdft}'
|
||||
#
|
||||
# Note:
|
||||
# Do not use this command as
|
||||
# python svg2pdftex.py file.svg file.pdf
|
||||
# the real pdf file will be overwritten by a tex file named file.pdf.
|
||||
#
|
||||
|
||||
|
||||
|
||||
import os, sys, re
|
||||
|
||||
|
||||
def runCommand(cmd):
|
||||
''' Utility function:
|
||||
run a command, quit if fails
|
||||
'''
|
||||
if os.system(cmd) != 0:
|
||||
print "Command '%s' fails." % cmd
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
# We expect two args, the names of the input and output files.
|
||||
if len(sys.argv) != 3:
|
||||
sys.exit(1)
|
||||
|
||||
input, output = sys.argv[1:]
|
||||
|
||||
# Fail silently if the file doesn't exist
|
||||
if not os.path.isfile(input):
|
||||
sys.exit(0)
|
||||
|
||||
# Strip the extension from ${output}
|
||||
outbase = os.path.splitext(output)[0]
|
||||
|
||||
|
||||
|
||||
# Inkscape 0.48 can output the image as a PDF file ${base}.pdf and place the text
|
||||
# in a LaTeX file ${base}.pdf_tex, which is renamed to ${output}, for typesetting
|
||||
# by pdflatex itself.
|
||||
runCommand('inkscape --file=%s --export-pdf=%s.pdf --export-latex' % (input, outbase))
|
||||
|
||||
os.rename('%s.pdf_tex' % outbase, output)
|
||||
|
49
lib/scripts/svg2pstex.py
Normal file
49
lib/scripts/svg2pstex.py
Normal file
@ -0,0 +1,49 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# file svg2pstex.py
|
||||
#
|
||||
# This script converts an SVG image to something that latex can process
|
||||
# into high quality PostScript.
|
||||
|
||||
# Usage:
|
||||
# python svg2pstex.py ${base}.fig ${base}.pstex
|
||||
# This command generates
|
||||
# ${base}.eps the converted eps file
|
||||
# ${base}.pstex a tex file that can be included in your latex document
|
||||
# using '\input{${output}}'.
|
||||
#
|
||||
# Note:
|
||||
# Do not use this command as
|
||||
# python svg2pstex.py file.fig file.eps
|
||||
# the real eps file will be overwritten by a tex file named file.eps.
|
||||
#
|
||||
|
||||
import os, sys
|
||||
|
||||
def runCommand(cmd):
|
||||
''' Utility function:
|
||||
run a command, quit if fails
|
||||
'''
|
||||
if os.system(cmd) != 0:
|
||||
print "Command '%s' fails." % cmd
|
||||
sys.exit(1)
|
||||
|
||||
# We expect two args, the names of the input and output files.
|
||||
if len(sys.argv) != 3:
|
||||
sys.exit(1)
|
||||
|
||||
input, output = sys.argv[1:]
|
||||
|
||||
# Fail silently if the file doesn't exist
|
||||
if not os.path.isfile(input):
|
||||
sys.exit(0)
|
||||
|
||||
# Strip the extension from ${output}
|
||||
outbase = os.path.splitext(output)[0]
|
||||
|
||||
# Inkscape 0.48 can output the image as a EPS file ${base}.pdf and place the text
|
||||
# in a LaTeX file ${base}.eps_tex, which is renamed to ${output}, for typesetting
|
||||
# by latex itself.
|
||||
runCommand('inkscape --file=%s --export-eps=%s.eps --export-latex' % (input, outbase))
|
||||
os.rename('%s.eps_tex' % outbase, output)
|
Loading…
Reference in New Issue
Block a user