|
Warning: this is an htmlized version!
The original is here, and the conversion rules are here. |
-- This file:
-- https://anggtwu.net/LUA/DiagTeX1.lua.html
-- https://anggtwu.net/LUA/DiagTeX1.lua
-- (find-angg "LUA/DiagTeX1.lua")
-- Author: Eduardo Ochs <eduardoochs@gmail.com>
-- Version: 2026may24
-- Used by:
--
-- A partial replacement for:
-- (find-dn6 "diagtex.lua")
-- (find-dn6 "diagtex.lua" "arrow_to_TeX")
-- (find-dn6 "diagtex.lua" "DxyArrow" "arrow_to_TeX")
-- (find-dn6 "diagforth.lua")
-- This file overrides some functions from diagtex.lua and defines a
-- new word in forths[].
-- New:
diag_wrap = function (fmt,body)
return format(fmt or "%s", body)
end
-- Overrides for functions from:
-- (find-dn6 "diagtex.lua" "DxyArrow" "arrow_to_TeX")
--
node_to_TeX = function (node)
local tex = node.tex or node.tag
local TeX = node.TeX or (tex and unabbrev(tex))
return (TeX and "{"..TeX.."}") or ""
end
arrow_to_TeX = function (arrow)
local node1 = nodes[arrow.from]
local node2 = nodes[arrow.to]
local x1, y1 = realxy(node1.x, node1.y)
local x2, y2 = realxy(node2.x, node2.y)
local dx, dy = x2 - x1, y2 - y1
local N1 = node_to_TeX(node1)
local N2 = node_to_TeX(node2)
--
-- 2026may24:
N1 = diag_wrap(arrow.wrap_from, N1)
N2 = diag_wrap(arrow.wrap_to, N2)
--
-- Calculate p, sh, L.
-- In several complex cases the "placement" p and the "label" L
-- are moved into the "shape" parameter sh; see:
-- (find-es "diagxy" "shape")
local p, sh, L = arrow_to_TeX_pshL(arrow) -- defined below
local morphism = dformat("\\morphism(%d,%d)%s%s<%d,%d>[%s`%s;%s]",
x1, y1, p, sh, dx, dy, N1, N2, L)
return diag_wrap(arrow.wrap_morphism, morphism)
end
arrow_to_TeX_pshL = function (arrow)
local Label = arrow.Label or (arrow.label and unabbrev(arrow.label))
local L = Label and "{"..Label.."}" or ""
local p = arrow.placement and "|"..arrow.placement.."|" or ""
local lplace = arrow.lplacement and arrow.lplacement.."{"..Label.."}"
--
-- 2026may24:
L = diag_wrap(arrow.wrap_label, L)
--
local shape = arrow.shape or "->"
local slide = arrow.slide and "@<"..arrow.slide..">"
local curve = arrow.curve and "@/"..arrow.curve.."/"
local modifier
if slide or curve or lplace then
modifier = (lplace or "")..(slide or "")..(curve or "")
end
if arrow.modifier then modifier = arrow.modifier end -- temp hack
if modifier then
sh = format("/{@{%s}%s}/", shape, modifier)
else
sh = "/"..shape.."/"
end
if lplace then p = "||"; L = "" end
return p, sh, L
end
-- New, based on:
-- (find-dn6 "diagforth.lua" "arrow-modifiers")
forths = forths or {} -- for tests
forths[".arrowColor="] = function ()
local Color = getword() or error()
ds:pick(0).wrap_morphism = "\\Color"..Color.."{%s}%%"
ds:pick(0).wrap_label = "\\ColorBlack{%s}"
ds:pick(0).wrap_from = "\\ColorBlack{%s}"
ds:pick(0).wrap_to = "\\ColorBlack{%s}"
end
--[[
* (eepitch-lua51)
* (eepitch-kill)
* (eepitch-lua51)
dofile "DiagTeX1.lua"
--]]
-- (defun e () (interactive) (find-angg "LUA/DiagTeX1.lua"))
-- Local Variables:
-- coding: utf-8-unix
-- End: