Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
1cf5073
Add files via upload
Jeffrey-Kuan Jul 13, 2025
2e6fb38
Merge pull request #1 from Jeffrey-Kuan/Jeffrey-Kuan-lists
Jeffrey-Kuan Jul 13, 2025
396e2fb
xmlatex: add support for podman
wiobber Jul 25, 2025
576532f
Dockerfile: back to TL2024; add mdframed
wiobber Jul 25, 2025
4612f4e
xmlatex: fix incomplete file
wiobber Jul 25, 2025
d43065b
luaxake: simplify/rework frost/serve
wiobber Jul 25, 2025
104b519
fix xmlatex
wiobber Jul 25, 2025
f739960
fix xmlatex AGAIN
wiobber Jul 25, 2025
53139db
luaxake: skip empty logo (caused FOLDER to be added to needing_public…
wiobber Jul 25, 2025
5ac8b37
luaxake: git tag -f, and gut push to *master*
wiobber Jul 25, 2025
c6fcf96
Fixed validators by including a needed CDATA wrapper.
xronosuf Jul 26, 2025
c5d4488
Update freeresponse.dtx
xronosuf Aug 27, 2025
25c4ba0
Update ximera.4ht
xronosuf Aug 27, 2025
c8abb49
Normalize path in href of activities in xourse
wiobber Aug 29, 2025
04ca47e
add mutool
wiobber Sep 1, 2025
0826dbb
test tikzexport
wiobber Sep 1, 2025
d92e540
build full
wiobber Sep 1, 2025
3ee029d
xmlatex: 'all' option uses pdfexport/htmlexport (experimental...)
wiobber Sep 2, 2025
1fc0b35
add img_format (choose png/svg)
wiobber Sep 2, 2025
e6f6e79
luaxake-files: info -> debug
wiobber Sep 2, 2025
37652fe
fix xmlatex all (only for calculus ... !)
wiobber Sep 2, 2025
6f41b7f
Merge pull request #223 from XimeraProject/tikzexport
bartsnapp Sep 2, 2025
99b7eb0
Fixed minor typos
bartsnapp Sep 2, 2025
50af31a
didn't quite get all the hint -> Hint
bartsnapp Sep 2, 2025
49b7ca9
luaxake-transform-html: check no logo
wiobber Sep 3, 2025
ac5243b
luaxake: improve logging / xmlatex has htmltask and servetask
wiobber Sep 3, 2025
8ad07e5
fix skipping _pdf.tex
wiobber Sep 4, 2025
512626c
img: only add png/svg alternative if the file exists
wiobber Sep 5, 2025
d1642fe
frost: add quotes for add -f 'file'
wiobber Sep 5, 2025
ddb0b7f
xmlatex: remove hardcoded /code (mountpoint inside container; github …
wiobber Sep 5, 2025
a5fe925
Add .xmcss support
wiobber Sep 5, 2025
70cff8d
fix wrong \configure{image}
wiobber Sep 5, 2025
0a5df4b
Bugfix pgfsys-dvisvgm4ht.def
wiobber Sep 25, 2025
9768414
test fix 'git whatchanged' is nominated for removal.
wiobber Sep 25, 2025
ff786c4
patch git-restore-mtime
wiobber Sep 25, 2025
4358761
reset
wiobber Sep 25, 2025
9f1aafb
copy of luaxml-domobject
wiobber Sep 28, 2025
2e5fd20
fix escaping of '<' and '>' in <script> (mathjax)
wiobber Sep 28, 2025
2a533ee
Merge pull request #234 from XimeraProject/233-escape-for-mathjax
wiobber Sep 28, 2025
b8199a0
Merge pull request #235 from XimeraProject/226-xmcss
wiobber Sep 28, 2025
e4fd1a9
Merge branch 'master' into master
bartsnapp Oct 9, 2025
2f557f3
Merge pull request #213 from Jeffrey-Kuan/master
bartsnapp Oct 9, 2025
0c5a6a9
made jeff's changes in dtx
bartsnapp Oct 24, 2025
1a7f7fe
list/bib deliverable is in the dtx files now
bartsnapp Oct 26, 2025
f019a59
Merge pull request #248 from bartsnapp/master
bartsnapp Oct 28, 2025
4afe17a
add \xmalt (implementation J.Kuan)
wiobber Jan 29, 2026
0360bcf
xmcss: remove empty files (prevents dubious files/logging...)
wiobber Jan 29, 2026
9c63141
Fix: use \footnotesize (\smaller needs relsize package...)
wiobber Jan 29, 2026
7b42f2d
Make doenet command from geogebra command
cqnykamp Jan 29, 2026
d5ba1b0
xmlatex: remove hack git-restore-time
wiobber Feb 4, 2026
b4ddbdc
xmlatex: fix xmKeyFile first run with genkey
wiobber Feb 4, 2026
6bb53c9
Dockerfile: add extra Stitz-Z. packages
wiobber Feb 4, 2026
a558090
Merge pull request #258 from XimeraProject/204-alt-text
wiobber Feb 4, 2026
a812072
fix git restore-mtime (#259)
wiobber Feb 4, 2026
1e0aa16
remove unneeded files
wiobber Feb 4, 2026
7fcb010
Modify `doenet.dtx` to use Doenet endpoints.
cqnykamp Feb 20, 2026
37ff268
Insert test script in `<head>`.
cqnykamp Feb 23, 2026
66af005
Add DocInput line for doenet
cqnykamp Feb 24, 2026
fb097d3
Add `height` attribute
cqnykamp Mar 20, 2026
4cdbb23
Merge branch 'master' into integrate-doenet
cqnykamp Mar 23, 2026
7ba059e
re-generate pdf
cqnykamp Mar 23, 2026
5906721
Merge pull request #263 from cqnykamp/integrate-doenet
bartsnapp Apr 10, 2026
013c26f
Block packages conflicting with Ximera's page layout
AbdelKharij Jun 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/docker-image-latest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
--cache-from=type=local,src=/tmp/.buildx-cache \
--cache-to=type=local,dest=/tmp/.buildx-cache,mode=max \
--tag ghcr.io/ximeraproject/ximeralatex:latest \
--file docker/Dockerfile \
--file docker/Dockerfile.full \
--push .

# - name: Build and Push full Docker image
Expand Down
27 changes: 19 additions & 8 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
FROM registry.gitlab.com/islandoftex/images/texlive:TL2025-2025-06-15-medium
# FROM registry.gitlab.com/islandoftex/images/texlive:TL2024-2024-11-17-medium
# FROM registry.gitlab.com/islandoftex/images/texlive:TL2025-2025-06-15-medium
FROM registry.gitlab.com/islandoftex/images/texlive:TL2024-2024-11-17-medium

RUN apt-get update -y; \
apt-get install -y \
git git-restore-mtime \
git \
# mupdf-tools \
pdf2svg \
gnupg \
Expand All @@ -12,15 +12,20 @@ RUN apt-get update -y; \
wget \
dos2unix \
vim-tiny strace less \
nano file
nano file \
mupdf-tools lsof

# hashcash needed for setting up communication to ximeraServer; seems unfortunately not (easily?) installable with apt..
ADD docker/hashcash_1.22-1_amd64.deb .
RUN dpkg -i hashcash_1.22-1_amd64.deb

# Install git restore-mtime (version in apt is too old ...)
RUN cd /root; \
git clone https://github.com/MestreLion/git-tools.git; \
echo 'PATH=$PATH:~/git-tools' >> ~/.profile

# Extra packages (on top of 'medium')
# RUN tlmgr option repository http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2024/tlnet-final; \
RUN tlmgr option repository http://ftp.math.utah.edu/pub/tex/historic/systems/texlive/2024/tlnet-final;
RUN tlmgr update --self; \
tlmgr install \
# afterpage \
Expand Down Expand Up @@ -118,10 +123,16 @@ RUN tlmgr update --self; \
gillius \
pagecolor \
tabularray \
ninecolors
mdframed \
zref \
needspace \
ninecolors \
supertabular import boxedminipage chapterfolder sectsty tocbibind sfmath



# make4ht is not in /usr/local/bin if installed with tlmgr!!!
ENV PATH="$PATH:/usr/local/texlive/2024/bin/x86_64-linux"
ENV PATH="$PATH:/usr/local/texlive/2024/bin/x86_64-linux:/root/git-tools"

# Add this complete ximeraLatex repo (is overkill, but allows bugfixing/editing inside the docker image!
# It automatically adds the luaxake and xmlatex scripts
Expand All @@ -133,4 +144,4 @@ RUN ln -s /root/texmf/tex/latex/ximeraLatex/luaxake/luaxake /usr/local/bin/luaxa
ln -s /root/texmf/tex/latex/ximeraLatex/xmScripts/xmlatex /usr/local/bin/xmlatex; \
git config --global --add safe.directory /code

WORKDIR /code
WORKDIR /code
15 changes: 13 additions & 2 deletions docker/Dockerfile.full
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,31 @@ FROM registry.gitlab.com/islandoftex/images/texlive:TL2024-2024-11-17-full
RUN apt-get update -y; \
apt-get install -y \
curl \
git git-restore-mtime \
git \
# git-restore-mtime \ ## TOO OLD !!!
mupdf-tools pdf2svg imagemagick \
gnupg \
jq \
dos2unix \
vim wget strace less \
nano file
nano file \
lsof

# RUN apt-get install -u hashcash

# hashcash needed for setting up communication to ximeraServer; seems unfortunately not (easily?) installable with apt..
ADD docker/hashcash_1.22-1_amd64.deb .
RUN dpkg -i hashcash_1.22-1_amd64.deb

# Install git restore-mtime (version in apt is too old ...)
RUN cd /root; \
git clone https://github.com/MestreLion/git-tools.git; \
echo 'PATH=$PATH:~/git-tools' >> ~/.profile

#
ENV PATH="$PATH:/root/git-tools"


# Add this complete ximeraLatex repo (is overkill, but allows bugfixing/editing inside the docker image!
# It automatically adds the luaxake and xmlatex scripts
RUN mkdir -p /root/texmf/tex/latex
Expand Down
93 changes: 64 additions & 29 deletions luaxake/luaxake
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ Options:
--compile (default none) Compile sequence (default 'pdf,html', or as set in settings)
--settingsfile (default none) Luaxake settings script
--configfile (default none) TeX4ht config file
-j,--jobs (optional 1..1000) Number of compile jobs to run in parallel
-j,--jobs (optional 1..1000) Number of compile jobs to run in parallel
--img_format (default svg) Either svg or png for image-format in HTML

Possible commands:
bake
Expand Down Expand Up @@ -171,6 +172,16 @@ config = {
output_format = "html",
infix = "draft" ,
},
["htmlexport"] = { -- NEW, TEST
-- command = 'pdflatex -interaction=nonstopmode -file-line-error -shell-escape -jobname @{basename}.handout "\\PassOptionsToClass{handout}{ximera}\\PassOptionsToClass{handout}{xourse}\\input{@{filename}}"',
command = "make4ht -l -c @{configfile} -f html5 -m draft -d build -j @{basename} -s @{make4ht_extraoptions} @{filename} 'svg,htex4ht,mathjax,-css' '' '' '--interaction=nonstopmode -shell-escape -file-line-error'",
check_log = true, -- check log
status = 0, -- check that the latex command return 0
post_command = 'post_process_html',
extension = "html",
output_format = "html",
infix = "" ,
},
["make4ht.html"] = {
command = "make4ht -l -c @{configfile} -f html5+dvisvgm_hashes -j @{basename}.make4ht -s @{make4ht_extraoptions} @{filename} 'svg,htex4ht,mathjax,-css' '' '' '--interaction=nonstopmode -shell-escape -file-line-error'",
check_log = true, -- check log
Expand All @@ -188,7 +199,7 @@ config = {
post_command = 'post_process_html',
extension = "html",
output_format = "html",
infix = "draft" ,
infix = "tikz" ,
},
["test.html"] = {
-- command = "make4ht -f html5+dvisvgm_hashes -c @{configfile} -sm draft @{filename}",
Expand All @@ -201,7 +212,6 @@ config = {
output_format = "html",
infix = "make4ht" ,
},

-- sage not tested/implemented !!!!
["sagetex.sage"] = {
command = "sage @{output_file}",
Expand All @@ -210,6 +220,20 @@ config = {
status = 0, -- check that the latex command return 0
extension = "sage", -- ?
},
["pdfexport"] = { -- NEW, TEST
-- this doesn't work well
command = 'pdflatex -j @{basename} -interaction=nonstopmode -file-line-error -shell-escape "\\PassOptionsToClass{tikzexport}{ximera}\\PassOptionsToClass{tikzexport}{ximera}\\PassOptionsToClass{tikzexport}{xourse}\\nonstopmode\\input{@{filename}}"',
-- command = 'pdflatex -interaction=nonstopmode -file-line-error -shell-escape "\\PassOptionsToClass{xake}{ximera}\\PassOptionsToClass{xake}{xourse}\\input{@{filename}}"',
check_log = true, -- check log
status = 0, -- check that the latex command return 0
infix = "" , -- used for .handout, and .make4k4
extension = "pdf", -- not used ????
output_format = "pdf",-- the extension of the 'final' output file, that is eg checked for uptodate-ness
post_command = 'post_process_pdf',
download_folder = 'ximera-downloads/pdfexport',
-- post_command = 'post_process_pdf',
-- download_folder = 'ximera-downloads/with-answers',
},
-- a dummy test: create .ddd files that contain the date ..
ddd = {
command = 'date >@{basename}.ddd',
Expand Down Expand Up @@ -276,6 +300,7 @@ config = {
-- number of lines in tex files where we should look for \documentclass
-- dump_fileinfo = "aFirstXourse.tex",
jobs = 2,
img_format = "svg",
}


Expand Down Expand Up @@ -326,6 +351,7 @@ config.noclean = args.noclean or os.getenv("XM_NOCLEAN") or co
config.nodependencies = args.nodependencies or os.getenv("XM_NODEPENDENCIES") or config.nodependencies
config.force = args.force or os.getenv("XM_FORCE") or config.force
config.jobs = args.jobs or os.getenv("XM_JOBS") or config.jobs
config.img_format = args.img_format or os.getenv("XM_IMG_FORMAT") or config.img_format

if args.configfile ~= "none" then
config.configfile = args.configfile
Expand All @@ -345,7 +371,7 @@ end

-- set/add potential default dependencies
if not config.default_dependencies and path.exists("xmPreamble.tex") then
log:info("Adding default dependency xmPreamble.tex")
log:debug("Adding default dependency xmPreamble.tex")
config.default_dependencies = { "xmPreamble.tex" }
else
config.default_dependencies = {}
Expand Down Expand Up @@ -415,23 +441,33 @@ log:infof("Set compile_sequence=%s (and output_formats=%s)", table.concat(config
--
local tex_fileinfos = {}

local first_file_arg = ""

for i,nextarg in ipairs(config.dirs) do
log:infof("Processing argument %d: %s", i,nextarg)
log:debugf("Processing argument %d: %s", i,nextarg)
nextarg = nextarg:gsub("^.//*", "") -- remove potential leading './' -- vscode-settings sometimes even add .//myfile.tex; it also might confuse skipping hidden .xxx files/folders

--if path.isdir(nextarg) or path.isfile(nextarg) then

if not path.isdir(nextarg) then
local ext = nextarg:match(("%.([^%.]+)$"))
if ext ~= "tex" and path.isfile(nextarg..".tex") then
log:trace("Adding .tex to " .. nextarg)
log:debug("Adding .tex to " .. nextarg)
nextarg = nextarg..".tex"
elseif ext ~= "tex" then
log:warningf("Argument %s not folder nor tex-file (%s): SKIPPING", nextarg, ext)
log:errorf("Argument %s not folder nor tex-file (%s)", nextarg, ext)
os.exit(1)
goto nextarg -- continue ...
end
end


if first_file_arg == "" -- HACK: save to append to url at serve
then
log:debugf("Set first file to %s", nextarg)
first_file_arg = "/" .. nextarg:gsub("%.tex",".html")
end


-- some files might need compilation even if they are not in the args, e.g. _pdf.tex files, or other dependent .tex files
local all_involved_texfiles = files.get_tex_files_with_status(nextarg, config.output_formats, config.compile_sequence)

Expand Down Expand Up @@ -503,7 +539,7 @@ elseif #to_be_compiled > 0 then
log:infof("%3d %s",i,file.relative_path)
end
else
log:status("No files need compiling")
log:info("No files need compiling")
end

--
Expand Down Expand Up @@ -553,25 +589,24 @@ end

-- TODO: fix commands (cfr xmlatex/xmlatex/lua)
if command == "bake" or command == "compilePdf" or command == "compile" then
log:status("Start "..command)


local ret, msg
if #to_be_compiled == 0 then
ret, msg = 0, "Nothing to be baked"
log:debug("Nothing to be baked")
else
log:status("Start "..command)
ret, msg = bake.bake(to_be_compiled, config.jobs)
end -- end baking

if ret > 0 then
log:error("Bake failed: " .. msg)
os.exit(ret)
else
log:statusf("Bake succeeded: " .. msg)
if ret > 0 then
log:error("Bake failed: " .. msg)
os.exit(ret)
else
log:statusf("Bake succeeded: " .. msg)
end
end
end

if command == "frost" then
log:status("Start " .. command)
log:info("Start " .. command)
local ret, msg = frost.frost(tex_files, to_be_compiled)
if ret > 0 then
log:error("Frost failed: " .. msg)
Expand All @@ -582,24 +617,24 @@ if command == "frost" then
end

if command == "serve" then
log:status("Start " .. command)
log:info("Start " .. command)
local ret, msg = frost.serve(config.force)
if ret > 0 then
log:error("Serve failed: " .. msg)
os.exit(ret)
else
log:statusf("Serve succeeded: " .. msg)
log:statusf("Serve succeeded: " .. msg .. first_file_arg)
end
end

if command == "ghaction" then

local ret, msg
if #to_be_compiled == 0 then
log:status("Nothing to be baked")
log:info("Nothing to be baked")
msg={}
else
log:status("Start bake")
log:info("Start bake")
ret, msg = bake.bake(to_be_compiled, config.jobs)

if ret > 0 then
Expand All @@ -626,21 +661,21 @@ if command == "ghaction" then
to_be_compiled = still_to_be_compiled
-- end-of-hack to_be_compiled

log:status("Start frost")
log:info("Start frost")
local ret, msg = frost.frost(tex_files, to_be_compiled)
if ret > 0 then
log:error("Frost failed: " .. msg)
os.exit(ret)
else
log:statusf("Frost succeeded: " .. msg)
end
log:status("Start serve")
local ret, msg = frost.serve(true) -- WITH FORCE (until push/depth issue fixed)
log:info("Start serve")
local ret, msg = frost.serve(false) -- NO FORCE (since push/depth issue fixed ?)
if ret > 0 then
log:error("Serve failed: " .. msg)
os.exit(ret)
else
log:statusf("Serve succeeded: " .. msg)
log:statusf("Serve succeeded: " .. msg .. first_file_arg)
end
end

Expand All @@ -663,4 +698,4 @@ if command == "extrainfo" then
log:infof("Potentially duplicate labels:")
require 'pl.pretty'.dump(all_labels)
end
end
end
9 changes: 6 additions & 3 deletions luaxake/luaxake-bake.lua
Original file line number Diff line number Diff line change
Expand Up @@ -136,9 +136,12 @@ local function get_commands_to_run(file, compilers, compile_sequence, only_check
end


-- HACK: _pdf.tex and _beamer.tex files should by convention NOT generate HTML (as they typically would contain non-TeX4ht-compatible constructs)
if extension:match("html$") and ( file.relative_path:match("_pdf.tex$") or file.relative_path:match("_beamer.tex$") ) then
log:infof("Skipping HTML compilation of pdf-only file %s",file.relative_path)
-- HACK: _pdf.tex and _beamer.tex files should by convention NOT generate HTML (as they typically would contain non-TeX4ht-compatible constructs)
if ( extension:match("html$") or extension:match("export$") )
and
( file.relative_path:match("_pdf.tex$") or file.relative_path:match("_beamer.tex$") ) then

log:infof("Skipping %s compilation of pdf-only file %s",extension, file.relative_path)

-- create/update a dummy outputfile to mark this file 'uptodate'
local filename = file.absolute_path:gsub(".tex$",".html")
Expand Down
Loading