summaryrefslogtreecommitdiff
path: root/macros/luatex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2022-06-19 03:01:19 +0000
committerNorbert Preining <norbert@preining.info>2022-06-19 03:01:19 +0000
commit15103df278e40e78061cca62bd5d956644f3352a (patch)
treea489dd477a37ffcf26053a1ed635089750a3c6c8 /macros/luatex
parent6864115d88342e22800eb415b70bdffaed2ca3c4 (diff)
CTAN sync 202206190301
Diffstat (limited to 'macros/luatex')
-rw-r--r--macros/luatex/generic/lua-widow-control/CHANGELOG.md153
-rw-r--r--macros/luatex/generic/lua-widow-control/README.md2
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control-2022-02-22.sty4
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control.lua277
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control.opm3
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control.pdfbin459643 -> 509126 bytes
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control.sty24
-rw-r--r--macros/luatex/generic/lua-widow-control/lua-widow-control.tex3
-rw-r--r--macros/luatex/generic/lua-widow-control/lwc-manual.tex58
-rw-r--r--macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl7
-rw-r--r--macros/luatex/generic/lua-widow-control/tb133chernoff-widows.ltx20
-rw-r--r--macros/luatex/generic/lua-widow-control/tb133chernoff-widows.pdfbin333173 -> 391529 bytes
-rw-r--r--macros/luatex/latex/letgut/README.md15
-rw-r--r--macros/luatex/latex/letgut/doc/CHANGELOG.md18
-rw-r--r--macros/luatex/latex/letgut/doc/letgut-banner-code.pdfbin189834 -> 154150 bytes
-rw-r--r--macros/luatex/latex/letgut/doc/letgut-banner-code.tex806
-rw-r--r--macros/luatex/latex/letgut/doc/letgut-code.pdfbin444452 -> 690570 bytes
-rw-r--r--macros/luatex/latex/letgut/doc/letgut-code.tex3361
-rw-r--r--macros/luatex/latex/letgut/doc/letgut.pdfbin309776 -> 359872 bytes
-rw-r--r--macros/luatex/latex/letgut/doc/letgut.tex632
-rw-r--r--macros/luatex/latex/letgut/doc/listings-conf.tex37
-rw-r--r--macros/luatex/latex/letgut/doc/localconf.tex48
-rw-r--r--macros/luatex/latex/letgut/source/HOWTO.md12
-rw-r--r--macros/luatex/latex/letgut/source/letgut-banner.org190
-rw-r--r--macros/luatex/latex/letgut/source/letgut.org5387
-rw-r--r--macros/luatex/latex/letgut/tex/informations-gut.tex155
-rw-r--r--macros/luatex/latex/letgut/tex/letgut-acronyms.tex198
-rw-r--r--macros/luatex/latex/letgut/tex/letgut-francophony-icon.pdfbin2148 -> 0 bytes
-rw-r--r--macros/luatex/latex/letgut/tex/letgut.cbx16
-rw-r--r--macros/luatex/latex/letgut/tex/letgut.dbx50
-rw-r--r--macros/luatex/latex/letgut/tex/letgut.lbx8
-rw-r--r--macros/luatex/latex/letgut/tex/logo-gut.pdfbin6708 -> 0 bytes
32 files changed, 5870 insertions, 5614 deletions
diff --git a/macros/luatex/generic/lua-widow-control/CHANGELOG.md b/macros/luatex/generic/lua-widow-control/CHANGELOG.md
new file mode 100644
index 0000000000..0314b88e6b
--- /dev/null
+++ b/macros/luatex/generic/lua-widow-control/CHANGELOG.md
@@ -0,0 +1,153 @@
+<!-- lua-widow-control
+ https://github.com/gucci-on-fleek/lua-widow-control
+ SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+
+ SPDX-FileCopyrightText: 2022 Max Chernoff
+-->
+
+Changelog
+=========
+
+All notable changes to lua-widow-control will be listed here, in reverse chronological order. **Changes listed in bold** are important changes: they either remove options or commands, or may change the location of page breaks.
+
+## v2.2.0 (2022-06-17)
+
+- Fix paragraphs not being properly saved for potential expansion. **May affect page breaks.**
+- Add a new `draft` option ([#36](https://github.com/gucci-on-fleek/lua-widow-control/issues/36)).
+- Fix a node memory leak ([#29](https://github.com/gucci-on-fleek/lua-widow-control/issues/29)). You should now be able to use lua-widow-control on documents with > 10 000 pages.
+- Use `\lua_load_module:n` when available.
+- Add additional metadata to the documentation.
+
+
+## [v2.1.2 (2022-05-27)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-3744f3e78bdf02fc63d508a0f80595260191607c)
+
+- Fully-support footnotes/inserts: lua-widow-control now moves the "footnote text" with the "footnote mark" when it moves a line to the next page.
+- No longer attempt to expand paragraphs in `\vbox`es
+- Minor documentation updates
+
+
+## [v2.1.1 (2022-05-20)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-980f24ac64816bd0d453754f8f1af676f0f7ee99)
+
+- Prevent spurious `under/overfull \vbox` warnings when widows/orphans are removed
+- Add TUGboat article to the distributed documentation
+- Rewrite many portions of the manual
+- Add support for `luahbtex` and `mmoptex` ([#35](https://github.com/gucci-on-fleek/lua-widow-control/pull/35) [@vlasakm](https://github.com/vlasakm))
+- Fix the (undocumented) `microtype` LaTeX option
+
+
+## [v2.1.0 (2022-05-14)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-82563aa0396805008059e3a96c2bf30b59c58026)
+
+- Fully support grid snapping in ConTeXt
+- New warnings when a new widow/orphan is inadvertently created
+- Significant internal rewrites
+- Add Plain and OpTeX interfaces to `\nobreak` behaviour and debug mode
+
+
+## [v2.0.6 (2022-04-23)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-2aa9269b33a03f66d2ece634c3dcba6b258fddf0)
+
+- Emergency fix for renamed LMTX engine Lua functions
+- Internal LaTeX refactoring
+
+
+## [v2.0.5 (2022-04-13)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-e3234ac7dfb31118d08fcb5ed0fe03f394df2b57)
+
+- Support nested `\lwcdisablecmd` macros
+- Fix `\lwcdisablecmd` in Plain TeX
+- Support command patching in OpTeX
+- Patch memoir to prevent spurious asterisks at broken two-line paragraphs ([#32](https://github.com/gucci-on-fleek/lua-widow-control/issues/32))
+
+
+## [v2.0.4 (2022-04-07)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-8a0e97e448976280a38d41f92c2781320b1a91f0)
+
+- Don't expand paragraphs typeset during output routines ([#31](https://github.com/gucci-on-fleek/lua-widow-control/issues/31))
+
+
+## [v2.0.3 (2022-03-28)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-d6622dd9fd04a4bc7678ff18420c1b4bdf077844)
+
+- Automatically patch section commands provided by memoir, KOMA-Script, and titlesec.
+
+
+## [v2.0.2 (2022-03-20)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-7e79189406a2318c33dcaceb85d9d1021b357a3f)
+
+_Final release present in TeX Live 2021_
+
+- Add `balanced` mode preset.
+
+
+## [v2.0.1 (2022-03-18)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-f3048dbcbfaf4d7d6f6a57e236cdb9684ff5d18d)
+
+- Documentation updates ([#25](https://github.com/gucci-on-fleek/lua-widow-control/issues/25))
+- Bug fixes ([#28](https://github.com/gucci-on-fleek/lua-widow-control/issues/28))
+
+
+## [v2.0.0 (2022-03-07)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-cea06ddad8dfcf15fa9ba2a86c6640648b9df523)
+
+- **Page breaks may be slightly different**
+- **Removed `\lwcemergencystretch` and `\lwcdisablecmd` in LaTeX. Please use the new key–value interface**
+- Use expl3 for the LaTeX files ([#20](https://github.com/gucci-on-fleek/lua-widow-control/pull/20))
+- Use a key–value interface for configuration with LaTeX ([#11](https://github.com/gucci-on-fleek/lua-widow-control/issues/11))
+- Silence some extraneous `luatexbase` info messages
+- Add a "debug mode" to print extra information ([#12](https://github.com/gucci-on-fleek/lua-widow-control/issues/12))
+- Fix error message line wrapping
+- Don't reset `\interlinepenalty` and `\brokenpenalty`
+- Set and analyze `\displaywidowpenalty`
+- Keep section headings with moved orphans ([#17](https://github.com/gucci-on-fleek/lua-widow-control/issues/17))
+- Add the ability to configure the maximum paragraph cost ([#22](https://github.com/gucci-on-fleek/lua-widow-control/issues/22))
+- Add a "strict" mode
+- Use an improved cost function to select the best paragraph to lengthen ([#23](https://github.com/gucci-on-fleek/lua-widow-control/issues/23))
+- Dozens of bug fixes
+- Miscellaneous documentation updates
+
+
+## [v1.1.6 (2022-02-22)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-2c7201854d89535ef7c02f6c38486205677f1aa1)
+
+- Add support for the OpTeX format/macro package.
+- Add support for the LuaTeX/MKIV version of ConTeXt.
+- Ensure compatibility with the new `linebreaker` package.
+- Fix a small bug with `\lwcdisablecmd`.
+- Test the `\outputpenalty` for the specific values that indicate a widow or orphan.
+
+
+## [v1.1.5 (2022-02-15)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-5cc95212c8141006ae3a600d26a4e0cd63b368c0)
+
+- Improve the appearance of the demo table in the documentation ([#4](https://github.com/gucci-on-fleek/lua-widow-control/issues/4))
+- Improve compatibility with microtype
+- Block loading the package without LuaTeX
+- Improve logging
+- Bug fix to prevent crashing
+
+
+## [v1.1.4 (2022-02-04)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-a8caba8e689ce5c743a88dcf1dcd8e4a0db67fb2)
+
+- Enable protrusion/expansion in the demo table in the documentation ([#3](https://github.com/gucci-on-fleek/lua-widow-control/issues/3))
+- Fix `\prevdepth` bug
+
+
+## [v1.1.3 (2022-01-30)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-8d1228bf1697e2720062b0c2a40f306005da72e8)
+
+- Fix bug when used with the LaTeX `calc` package. ([#2](https://github.com/gucci-on-fleek/lua-widow-control/issues/2))
+
+
+## [v1.1.2 (2021-12-14)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-61a684d92f1a38ecf0ff53c6da22b2a973fae530)
+
+- Fix crash under ConTeXt LMTX
+
+
+## [v1.1.1 (2021-11-26)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/v1.1.1)
+
+- Minor documentation updates
+
+
+## [v1.1.0 (2021-11-08)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-8c958011bb4bd7f6e4ad843321c0d2643645a08f)
+
+- Extensive documentation updates
+- Clarify that lua-widow-control *does* in fact support columns
+- Add `\lwcdisablecmd` macro to disable lua-widow-control for certain commands
+- Automatically disable lua-widow-control inside section headings (uses `\lwcdisablecmd`)
+- Add automated tests to prevent regressions
+- Fix a rare issue that would cause indefinite hangs
+
+
+
+## [v1.0.0 (2021-10-09)](https://github.com/gucci-on-fleek/lua-widow-control/releases/tag/release-bae44a6858432e095597521bf1ef7df2104b6b9c)
+
+Initial release
diff --git a/macros/luatex/generic/lua-widow-control/README.md b/macros/luatex/generic/lua-widow-control/README.md
index c1ce5258f0..61e62cb59a 100644
--- a/macros/luatex/generic/lua-widow-control/README.md
+++ b/macros/luatex/generic/lua-widow-control/README.md
@@ -48,4 +48,4 @@ Lua-widow-control is licensed under the [_Mozilla Public License_, version 2.0](
Please note that a compiled document is absolutely **not** considered to be an "Executable Form" as defined by the MPL. The use of lua-widow-control in a document does not place **any** obligations on the document's author or distributors. The MPL and CC-BY-SA licenses **only** apply to you if you distribute the lua-widow-control source code or documentation.
---
-_v2.1.2 (2022-05-26)_ <!--%%version %%dashdate-->
+_v2.2.0 (2022-06-17)_ <!--%%version %%dashdate-->
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control-2022-02-22.sty b/macros/luatex/generic/lua-widow-control/lua-widow-control-2022-02-22.sty
index b7b2ab44c0..7464563560 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control-2022-02-22.sty
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control-2022-02-22.sty
@@ -12,8 +12,8 @@
% report a real version number here for debugging.
\PackageInfo{lua-widow-control}{%
Real version:
- 2022/05/26 %%slashdate
- v2.1.2 %%version
+ 2022/06/17 %%slashdate
+ v2.2.0 %%version
}
\PackageWarning{lua-widow-control}{%
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control.lua b/macros/luatex/generic/lua-widow-control/lua-widow-control.lua
index 4bd109e483..800faf5624 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control.lua
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control.lua
@@ -118,10 +118,17 @@ local iftrue = token.create("iftrue")
local INFINITY = 10000
local INSERT_CLASS_MULTIPLE = 1000 * 1000
local INSERT_FIRST_MULTIPLE = 1000
+local llap_offset = math.max(tex.dimen.parindent, tex.sp("12pt"))
local min_col_width = tex.sp("250pt")
local PAGE_MULTIPLE = 100
local SINGLE_LINE = 50
+lwc.colours = {
+ expanded = {0.00, 0.70, 0.25},
+ failure = {0.90, 0.00, 0.25},
+ moved = {0.25, 0.25, 1.00},
+}
+
--[[ Package/module initialization.
Here, we replace any format/engine-specific variables/functions with some
@@ -135,6 +142,7 @@ local contrib_head,
max_cost,
pagenum,
paragraph_attribute,
+ shrink_order,
stretch_order,
warning
@@ -142,9 +150,11 @@ if lmtx then
-- LMTX has removed underscores from most of the Lua parts
debug("LMTX")
contrib_head = "contributehead"
+ shrink_order = "shrinkorder"
stretch_order = "stretchorder"
else
contrib_head = "contrib_head"
+ shrink_order = "shrink_order"
stretch_order = "stretch_order"
end
@@ -184,8 +194,8 @@ elseif plain or latex or optex then
debug("Plain/LaTeX")
luatexbase.provides_module {
name = lwc.name,
- date = "2022/05/26", --%%slashdate
- version = "2.1.2", --%%version
+ date = "2022/06/17", --%%slashdate
+ version = "2.2.0", --%%version
description = [[
This module provides a LuaTeX-based solution to prevent
@@ -211,6 +221,23 @@ else -- This shouldn't ever happen
Please use LaTeX, Plain TeX, ConTeXt or OpTeX.]]
end
+--[[ Select the fonts
+
+ We want to use cmr7 for the draft mode cost displays, and the easiest
+ way to do so is to just hardcode the font id's. This relies on some
+ implementation details; however, it is very unlikely to ever be an issue
+ ]]
+local SMALL_FONT
+if plain then
+ SMALL_FONT = 4
+elseif latex then
+ SMALL_FONT = 7
+elseif optex then
+ SMALL_FONT = 7
+elseif context then
+ SMALL_FONT = 3
+end
+
--[[ Table to hold the alternate paragraph versions.
This is global(ish) mutable state, which isn't ideal, but any other way of
@@ -219,8 +246,7 @@ end
local paragraphs = {}
local inserts = {}
---[[
- Function definitions
+--[[ Function definitions
]]
--- Gets the current paragraph and page locations
@@ -268,6 +294,7 @@ end
--- Checks if the ConTeXt "grid snapping" is active
+---
--- @return boolean
local function grid_mode_enabled()
-- Compare the token "mode" to see if `\\ifgridsnapping` is `\\iftrue`
@@ -371,6 +398,91 @@ local function natural_paragraph(head)
end
+lwc.draft_mode = false
+--- Changes the text colour in a node list if draft mode is active
+---
+--- @param head node The first node to colour
+--- @param colour table<number> A 3-tuple of RGB values
+--- @return node head The coloured node
+local function colour_list(head, colour)
+ if not lwc.draft_mode then
+ return head
+ end
+
+ -- Adapted from https://tex.stackexchange.com/a/372437
+ -- \\pdfextension colorstack is ignored in LMTX
+ local start_colour = new_node("whatsit", "pdf_colorstack")
+ start_colour.stack = 0
+ start_colour.command = 1
+ start_colour.data = string.format("%.2f %.2f %.2f rg", table.unpack(colour))
+
+ local end_colour = new_node("whatsit", "pdf_colorstack")
+ end_colour.stack = 0
+ end_colour.command = 2
+
+ start_colour.next = head
+ last(head).next = end_colour
+
+ return start_colour
+end
+
+
+--- Generate an \\llap'ed box containing the provided string
+---
+--- @param str string The string to typeset
+--- @return node head The box node
+local function llap_string(str)
+ local first = new_node("glue")
+ first.width = llap_offset
+
+ local m = first
+ for letter in str:gmatch(".") do
+ local n = new_node("glyph")
+ n.font = SMALL_FONT
+ n.char = string.byte(letter)
+
+ m.next = n
+ m = n
+ end
+
+ local hss = new_node("glue")
+ hss.stretch = 1
+ hss[stretch_order] = 1
+ hss.shrink = 1
+ hss[shrink_order] = 1
+ m.next = hss
+
+ return node.hpack(first, 0, "exactly")
+end
+
+
+--- Typesets the cost of a paragraph beside it in draft mode
+---
+--- @param paragraph node
+--- @param cost number
+--- @return nil
+local function show_cost(paragraph, cost)
+ if not lwc.draft_mode then
+ return
+ end
+
+ local last_hlist_end = last(next_of_type(
+ last(paragraph),
+ hlist_id,
+ { subtype = line_subid, reverse = true }
+ ).list)
+
+ local cost_str
+ if cost < math.maxinteger then
+ cost_str = string.format("%.0f", cost)
+ else
+ cost_str = "infinite"
+ end
+
+ last_hlist_end.next = llap_string(cost_str)
+end
+
+
--- Saves each paragraph, but lengthened by 1 line
---
--- Called by the `pre_linebreak_filter` callback
@@ -411,15 +523,27 @@ function lwc.save_paragraphs(head)
local long_cost = lwc.paragraph_cost(long_info.demerits, long_info.prevgraf)
- if long_info.prevgraf == natural_info.prevgraf + 1 and
- long_cost > 10 -- Any paragraph that is "free" to expand is suspicious
+ if long_info.prevgraf ~= natural_info.prevgraf + 1 or
+ long_cost < 10 -- Any paragraph that is "free" to expand is suspicious
then
- table.insert(paragraphs, {
- cost = long_cost,
- node = next_of_type(long_node, hlist_id, { subtype = line_subid })
- })
+ -- This paragraph is infinitely bad
+ long_cost = math.maxinteger
end
+ local saved_node = next_of_type(long_node, hlist_id, { subtype = line_subid })
+
+ show_cost(saved_node, long_cost)
+ for n in traverse_id(hlist_id, saved_node) do
+ n.list = colour_list(n.list, lwc.colours.expanded)
+ end
+
+ table.insert(paragraphs, {
+ cost = long_cost,
+ node = copy_list(saved_node)
+ })
+
+ free_list(long_node)
+
-- Print some debugging information
get_chars(head)
debug(get_location(), "nat lines " .. natural_info.prevgraf)
@@ -452,21 +576,21 @@ local function mark_paragraphs(head)
-- Tag the paragraphs
if not status.output_active then -- Don't run during the output routine
-- Get the start and end of the paragraph
- local top_para = next_of_type(head, hlist_id, { subtype = line_subid })
- local bottom_para = last(head)
+ local top = next_of_type(head, hlist_id, { subtype = line_subid })
+ local bottom = last(head)
- while bottom_para.id == insert_id do
- bottom_para = bottom_para.prev
+ while bottom.id == insert_id do
+ bottom = bottom.prev
end
- if top_para ~= bottom_para then
+ if top ~= bottom then
set_attribute(
- top_para,
+ top,
paragraph_attribute,
#paragraphs + (PAGE_MULTIPLE * pagenum())
)
set_attribute(
- bottom_para,
+ bottom,
paragraph_attribute,
-1 * (#paragraphs + (PAGE_MULTIPLE * pagenum()))
)
@@ -474,11 +598,15 @@ local function mark_paragraphs(head)
-- We need a special tag for a 1-line paragraph since the node can only
-- have a single attribute value
set_attribute(
- top_para,
+ top,
paragraph_attribute,
#paragraphs + (PAGE_MULTIPLE * pagenum()) + SINGLE_LINE
)
end
+
+ if #paragraphs > 0 then
+ show_cost(head, paragraphs[#paragraphs].cost)
+ end
end
end
@@ -582,12 +710,14 @@ end
---
--- @return nil
local function reset_state()
+ for _, paragraph in ipairs(paragraphs) do
+ free_list(paragraph.node)
+ end
paragraphs = {}
for _, insert in ipairs(inserts) do
free(insert)
end
-
inserts = {}
end
@@ -597,6 +727,25 @@ end
--- @return nil
local function remove_widows_fail()
warning("Widow/Orphan/broken hyphen NOT removed on page " .. pagenum())
+
+ local last_line = next_of_type(
+ last(tex_lists.page_head),
+ hlist_id,
+ { subtype = line_subid, reverse = true }
+ )
+ if last_line then
+ last_line.list = colour_list(last_line.list, lwc.colours.failure)
+ end
+
+ local next_first_line = next_of_type(
+ tex_lists[contrib_head],
+ hlist_id,
+ { subtype = line_subid }
+ )
+ if next_first_line then
+ next_first_line.list = colour_list(next_first_line.list, lwc.colours.failure)
+ end
+
reset_state()
end
@@ -625,18 +774,24 @@ local function first_last_paragraphs(head)
-- Find the first paragraph on the page, from the top
local first_val, first_head = find_attribute(head, paragraph_attribute)
- if first_val // PAGE_MULTIPLE == pagenum() - 1 then
+ while abs(first_val) // PAGE_MULTIPLE == pagenum() - 1 do
--[[ If the first complete paragraph on the page was initially broken on the
previous page, then we can't expand it here so we need to skip it.
]]
- first_index = find_attribute(
+ first_val, first_head = find_attribute(
first_head.next,
paragraph_attribute
- ) % PAGE_MULTIPLE
- else
- first_index = first_val % PAGE_MULTIPLE
+ )
end
+ first_index = first_val % PAGE_MULTIPLE
+
+ if first_index >= SINGLE_LINE then
+ first_index = first_index - SINGLE_LINE
+ end
+
+ debug("first/last", first_index .. "/" .. last_index)
+
return first_index, last_index
end
@@ -653,21 +808,13 @@ local function best_paragraph(head)
local best_index = 1
local best_cost = paragraphs[best_index].cost
- -- We find the current "best" replacement, then free the unused ones
+ -- We find the current "best" replacement
for index, paragraph in pairs(paragraphs) do
if paragraph.cost < best_cost and
index < last_paragraph_index and
index >= first_paragraph_index
then
- -- Free the old best paragraph
- free_list(paragraphs[best_index].node)
- paragraphs[best_index].node = nil
- -- Set the new best paragraph
best_index, best_cost = index, paragraph.cost
- elseif index > 1 then
- -- Not sure why `i > 1` is required?
- free_list(paragraph.node)
- paragraph.node = nil
end
end
@@ -677,7 +824,8 @@ local function best_paragraph(head)
)
if best_cost > tex_count[max_cost] or
- best_index == last_paragraph_index
+ best_index == last_paragraph_index or
+ best_cost == math.maxinteger
then
return nil
else
@@ -737,9 +885,11 @@ local function get_inserts(last_line)
if box_value > 0 then
selected_inserts[#selected_inserts + 1] = copy(inserts[box_value])
end
- end
- m = m.next
+ m = free(m)
+ else
+ m = m.next
+ end
end
if not insert_box.list then
@@ -811,10 +961,19 @@ local function move_last_line(head)
is_matching_penalty(potential_penalty.penalty)
then
warning("Making a new widow/orphan/broken hyphen on page " .. pagenum())
+
+ local second_last_line = next_of_type(
+ potential_penalty,
+ hlist_id,
+ { subtype = line_subid, reverse = true }
+ )
+ second_last_line.list = colour_list(second_last_line.list, lwc.colours.failure)
end
last_line = copy_list(n)
+ last_line.list = colour_list(last_line.list, lwc.colours.moved)
+
-- Reinsert any inserts originally present in this moved line
local selected_inserts = get_inserts(last_line)
for _, insert in ipairs(selected_inserts) do
@@ -824,10 +983,11 @@ local function move_last_line(head)
-- Add back in the content from the next page
last(last_line).next = copy_list(tex_lists[contrib_head])
+ free_list(n.prev.prev.next)
n.prev.prev.next = nil
-- Set the content of the next page
- last(last_line)
+ free_list(tex_lists[contrib_head])
tex_lists[contrib_head] = last_line
return true
@@ -842,11 +1002,11 @@ end
--- @param head node
--- @param paragraph_index number
local function replace_paragraph(head, paragraph_index)
- local target_node = paragraphs[paragraph_index].node
- local free_next_nodes = false
+ local target_node = copy_list(paragraphs[paragraph_index].node)
local start_found = false
local end_found = false
+ local free_nodes_begin
-- Loop through all of the nodes on the page with the lwc attribute
local n = head
@@ -884,7 +1044,7 @@ local function replace_paragraph(head, paragraph_index)
end
n.prev.next = target_node
- free_next_nodes = true
+ free_nodes_begin = n
end
-- Insert the end of the replacement paragraph
@@ -907,17 +1067,17 @@ local function replace_paragraph(head, paragraph_index)
target_node_last.next = n.next
end
+ n.next = nil
+
break
end
- if free_next_nodes then
- n = free(n)
- else
- n = n.next
- end
+ n = n.next
end
- if not (start_found and end_found) then
+ if start_found and end_found then
+ free_list(free_nodes_begin)
+ else
warning("Paragraph NOT expanded on page " .. pagenum())
end
end
@@ -946,24 +1106,30 @@ function lwc.remove_widows(head)
-- Nothing that we can do if there aren't any paragraphs available to expand
if #paragraphs == 0 then
+ debug("failure", "no paragraphs to expand")
remove_widows_fail()
return head
end
-- Check the original height of \\box255
local vsize = tex_dimen.vsize
- local orig_height_diff = vpack(head).height - vsize
+ local orig_vpack = vpack(head)
+ local orig_height_diff = orig_vpack.height - vsize
+ orig_vpack.list = nil
+ free(orig_vpack)
-- Find the paragraph to expand
local paragraph_index = best_paragraph(head)
if not paragraph_index then
+ debug("failure", "no good paragraph")
remove_widows_fail()
return head
end
-- Move the last line of the page to the next page
if not move_last_line(head) then
+ debug("failure", "can't move last line")
remove_widows_fail()
return head
end
@@ -975,13 +1141,19 @@ function lwc.remove_widows(head)
over/underfull box warnings, so we correct any discrepancies
here.
]]
- local new_height_diff = vpack(head).height - vsize
+ local new_vpack = vpack(head)
+ local new_height_diff = new_vpack.height - vsize
+ new_vpack.list = nil
+ free(new_vpack)
-- We need the original height discrepancy in case there are \\vfill's
local net_height_diff = orig_height_diff - new_height_diff
+ local bls = tex.skip.baselineskip
+ local bls_width = bls.width
+ free(bls)
if abs(net_height_diff) > 0 and
-- A difference larger than 0.25\\baselineskip is probably not from \lwc/
- abs(net_height_diff) < tex.skip.baselineskip.width / 4
+ abs(net_height_diff) < bls_width / 4
then
local bottom_glue = new_node("glue")
bottom_glue.width = net_height_diff
@@ -1214,6 +1386,13 @@ register_tex_cmd(
end,
{ "string" }
)
+register_tex_cmd(
+ "draft",
+ function(str)
+ lwc.draft_mode = str ~= "0" and str ~= "false" and str ~= "stop"
+ end,
+ { "string" }
+)
--- Silence the luatexbase "Enabling/Removing <callback>" info messages
---
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control.opm b/macros/luatex/generic/lua-widow-control/lua-widow-control.opm
index f1261e6c24..ff26f856c5 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control.opm
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control.opm
@@ -3,7 +3,7 @@
% SPDX-License-Identifier: MPL-2.0+
% SPDX-FileCopyrightText: 2022 Max Chernoff
-\_codedecl\lwcenable{lua-widow-control <v2.1.2>} %%version
+\_codedecl\lwcenable{lua-widow-control <v2.2.0>} %%version
\_namespace{lwc}
\_clubpenalty=1
@@ -72,6 +72,7 @@
\_let\lwcdisable=\.disable
\_let\lwcdisablecmd=\.disable_cmd
\_let\lwcdebug=\.debug
+\_let\lwcdraft=\.draft
\_let\iflwc=\.if_enabled
\_let\lwcnobreak=\.nobreak
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf b/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf
index f2d8337ee8..36b8db2908 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control.pdf
Binary files differ
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control.sty b/macros/luatex/generic/lua-widow-control/lua-widow-control.sty
index 89f417a457..7d1be850b9 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control.sty
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control.sty
@@ -13,7 +13,7 @@
\DeclareRelease{}{0000-00-00}{lua-widow-control-2022-02-22.sty}
\DeclareRelease{v1.1.6}{2022-02-22}{lua-widow-control-2022-02-22.sty}
-\DeclareCurrentRelease{v2.1.2}{2022-05-26} %%version %%dashdate
+\DeclareCurrentRelease{v2.2.0}{2022-06-17} %%version %%dashdate
% If this version of LaTeX doesn't support command hooks, then we load
% the last v1.1.X version of the package.
@@ -23,8 +23,8 @@
\ProvidesExplPackage
{lua-widow-control}
- {2022/05/26} %%slashdate
- {v2.1.2} %%version
+ {2022/06/17} %%slashdate
+ {v2.2.0} %%version
{Use Lua to remove widows and orphans}
% Unconditional Package Loads
@@ -116,7 +116,11 @@
}
% Load the Lua code
-\lua_now:n { require "lua-widow-control" }
+\cs_if_exist:NTF \lua_load_module:n {
+ \lua_load_module:n { lua-widow-control }
+} {
+ \lua_now:n { require "lua-widow-control" }
+}
% Here, we enable font expansion/contraction. It isn't strictly necessary for
% \lwc/'s functionality; however, it is required for the
@@ -220,8 +224,16 @@
disable .value_forbidden:n = true,
debug .choice:,
- debug / true .code:n = \__lwc_debug:n { true },
- debug / false .code:n = \__lwc_debug:n { false },
+ debug / true .code:n = \__lwc_debug:n { true },
+ debug / false .code:n = \__lwc_debug:n { false },
+ debug .default:n = true,
+ debug .value_required:n = false,
+
+ draft .choice:,
+ draft / true .code:n = \__lwc_draft:n { true },
+ draft / false .code:n = \__lwc_draft:n { false },
+ draft .default:n = true,
+ draft .value_required:n = false,
nobreak .code:n = \__lwc_nobreak:n { #1 },
nobreak .value_required:n = true,
diff --git a/macros/luatex/generic/lua-widow-control/lua-widow-control.tex b/macros/luatex/generic/lua-widow-control/lua-widow-control.tex
index b8ae064c04..2e1dcef902 100644
--- a/macros/luatex/generic/lua-widow-control/lua-widow-control.tex
+++ b/macros/luatex/generic/lua-widow-control/lua-widow-control.tex
@@ -3,7 +3,7 @@
% SPDX-License-Identifier: MPL-2.0+
% SPDX-FileCopyrightText: 2022 Max Chernoff
-\wlog{lua-widow-control v2.1.2} %%version
+\wlog{lua-widow-control v2.2.0} %%version
\ifx\directlua\undefined
\errmessage{%
@@ -88,6 +88,7 @@
\let\lwcenable=\lwc@enable
\let\lwcdisable=\lwc@disable
\let\lwcdebug=\lwc@debug
+\let\lwcdraft=\lwc@draft
\let\iflwc=\lwc@if@enabled
\let\lwcnobreak=\lwc@nobreak
diff --git a/macros/luatex/generic/lua-widow-control/lwc-manual.tex b/macros/luatex/generic/lua-widow-control/lwc-manual.tex
index d2eb12c82e..c890238371 100644
--- a/macros/luatex/generic/lua-widow-control/lwc-manual.tex
+++ b/macros/luatex/generic/lua-widow-control/lwc-manual.tex
@@ -39,10 +39,32 @@
\input lwc-manual-samples
+\definecolor[expanded][r=0.00, g=0.70, b=0.25]
+\definecolor[failure] [r=0.90, g=0.00, b=0.25]
+\definecolor[moved] [r=0.25, g=0.25, b=1.00]
+
+\usemodule[markdown]
+\define[4]\markdownRendererLinkPrototype{\goto{#1}[url(#3)]}
+\def\markdownOptionHtml{true}
+\def\markdownOptionShiftHeadings{1}
+\startluacode
+ interfaces.implement {
+ name = "markdownRendererHeadingThreePrototype",
+ public = true,
+ arguments = { "string" },
+ actions = function (str)
+ context.subsection {
+ title = str,
+ list = str:match "v%d+%.%d+%.%d+"
+ }
+ end
+ }
+\stopluacode
+
\startdocument[
title=lua-widow-control,
author=Max Chernoff,
- version=2.1.2, %%version
+ version=2.2.0, %%version
github=https://github.com/gucci-on-fleek/lua-widow-control,
ctan=https://www.ctan.org/pkg/lua-widow-control,
]
@@ -501,9 +523,27 @@ sets the values to~5\,000 and 10\,000 respectively.
C = \frac{d}{\sqrt{l}}
\stopformula where $d$ is the total demerits of the paragraph, and $l$ is the number of lines in the paragraph; however, advanced users may also set a custom cost function by redefining the \inlineLUA{lwc.paragraph_cost(demerits, lines)} function.
+\subsection{Draft Mode}
+
+You can use the draft mode to visualize how \lwc/ processes pages. Any \color[failure]{remaining widows and orphans will be coloured red}, any \color[expanded]{expanded paragraphs will be coloured green}, and any \color[moved]{lines moved to the next page will be coloured blue}. In addition, the cost of each paragraph is shown in the right margin.
+
+\startTABLE[setups=commandtable]
+ \NC \plainop/
+ \NC\inlineTEX{\lwcdraft 1}
+ \NC\NR
+ \NC \LaTeX{}
+ \NC\inlineTEX{\lwcsetup{draft}}
+ \NC\NR
+ \NC \ConTeXt{}
+ \NC\inlineTEX{\setuplwc[draft = start]}
+ \NC\NR
+\stopTABLE
+
+Advanced users may also customize the colours used by modifying the \inlineLUA{lwc.colours} table. The table keys are currently \type{expanded}, \type{failure}, and \type{moved}. The table values are \acronym{RGB} 3-tuples, where each element is a float between zero and one.
+
\subsection{Debug Mode}
-\Lwc/ offers a \q{debug} mode that prints extra information in the log files. This may be helpful to understand how \lwc/ is processing paragraphs and pages. If you are reporting an issue with \lwc/ make sure to compile your document with debug mode enabled!
+\Lwc/ offers a \q{debug} mode that prints extra information in the log files. This may be helpful to understand how \lwc/ is processing paragraphs and pages, although the information is likely inscrutable unless you are the package's author. If you are reporting an issue with \lwc/ make sure to compile your document with debug mode enabled!
\startTABLE[setups=commandtable]
\NC \plainop/
@@ -712,6 +752,8 @@ ultra-short~lines.
system remove widows or orphans that \lwc/ cannot.
\item \Lwc/ does not move footnotes in \mkxl/ due to limitations with the \LuaMetaTeX{} engine.
+
+ \item Draft mode does not colour any text in \mkxl/. Draft mode will not colour the first line of a page in \mkiv/ and \OpTeX{}.
\stopitemize
\section{Contributions}
@@ -729,6 +771,16 @@ Please note that a compiled document is \bold{not} considered to be an \q{Execut
\placelistofpublications
\page
+
+\setuphead[subsection][
+ alternative=normal,
+ style=\ssitb,
+ after={\blank[disable, penalty:10000]}
+]
+\markdownInput{../../CHANGELOG.md}
+
+\page
+
\setuplayout[
width=middle,
backspace=1in,
@@ -745,8 +797,6 @@ If want to offer any improvements to the code below, please open an issue or a \
\usemodule[scite]
\setupbodyfont[10pt]
\setuphead[subsection][
- alternative=normal,
- style=\ssita,
page=yes,
continue=yes,
]
diff --git a/macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl b/macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl
index 682e8d23c5..5982533202 100644
--- a/macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl
+++ b/macros/luatex/generic/lua-widow-control/t-lua-widow-control.mkxl
@@ -1,10 +1,10 @@
%D \module
%D [ file=t-lua-widow-control,
-%D version=2.1.2, %%version
+%D version=2.2.0, %%version
%D title=lua-widow-control,
%D subtitle=\ConTeXt module for lua-widow-control,
%D author=Max Chernoff,
-%D date=2022-05-26, %%dashdate
+%D date=2022-06-17, %%dashdate
%D copyright=Max Chernoff,
%D license=MPL-2.0+,
%D url=https://github.com/gucci-on-fleek/lua-widow-control]
@@ -28,6 +28,8 @@
\lwc_debug{\lwcparameter{debug}}
+ \lwc_draft{\lwcparameter{draft}}
+
\lwc_nobreak{\lwcparameter{nobreak}}
\lwc_max_cost=\lwcparameter{maxcost}
@@ -61,6 +63,7 @@
emergencystretch=3em,
\c!state=\v!start,
debug=\v!stop,
+ draft=\v!stop,
orphanpenalty=1,
widowpenalty=1,
brokenpenalty=1,
diff --git a/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.ltx b/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.ltx
index af35ab0f4d..7cd18ab68c 100644
--- a/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.ltx
+++ b/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.ltx
@@ -13,6 +13,7 @@
% journal={TUGboat},
% volume={43},
% number={1},
+% pages={28--39},
% year={2022},
% month=may,
% DOI={10.47397/tb/43-1/tb133chernoff-widows},
@@ -156,9 +157,26 @@
}}%
}
-\let\nameref=\undefined % latex3/hyperref#234
\usepackage[hidelinks,pdfa]{hyperref}
+\usepackage{hyperxmp}
+\hypersetup{
+ pdfdisplaydoctitle=true,
+ pdftitle={Automatically removing widows and orphans with lua-widow-control},
+ pdfauthor={Max Chernoff},
+ pdflang={en},
+ pdfcontacturl={https://github.com/gucci-on-fleek/lua-widow-control},
+ pdfcopyright={SPDX-License-Identifier: MPL-2.0+ OR CC-BY-SA-4.0+},
+ pdflicenseurl={https://creativecommons.org/licenses/by-sa/4.0/},
+ pdfdoi={10.47397/tb/43-1/tb133chernoff-widows},
+ pdfpublication={TUGboat},
+ pdfpubtype={journal},
+ pdfvolumenum={43},
+ pdfissuenum={1},
+ pdfpagerange={28-39},
+ pdfdate={2022-05}
+}
+
\begin{document}
\maketitle
diff --git a/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.pdf b/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.pdf
index 9c9de8bd02..b506109496 100644
--- a/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.pdf
+++ b/macros/luatex/generic/lua-widow-control/tb133chernoff-widows.pdf
Binary files differ
diff --git a/macros/luatex/latex/letgut/README.md b/macros/luatex/latex/letgut/README.md
index 9d38f9500d..9cf40d646d 100644
--- a/macros/luatex/latex/letgut/README.md
+++ b/macros/luatex/latex/letgut/README.md
@@ -1,17 +1,16 @@
-letgut-banner - Support for the banner of the newsletter
- “La Lettre de GUTenberg”
-=============================================================
+letgut - Support for the newsletter “La Lettre GUTenberg”
+=========================================================
About
-------
-This package automatically draw the banner of the newsletter “La Lettre de
-GUTenberg” with the current main font.
+This bundle includes a LaTeX class, a `.sty` file and an acronym file dedicated
+to the newsletter “La Lettre GUTenberg” of GUTenberg, the French TeX User Group.
Release
-------
-2022-03-22 v0.9.1
+2022-06-18 v0.9.2
Development
-----------
-Follow development, submit issues, and suggest improvements at
-https://framagit.org/gutenberg/classe-lettre-gut.
+Follow development, submit issues and suggest improvements at
+https://framagit.org/gutenberg/letgut.
diff --git a/macros/luatex/latex/letgut/doc/CHANGELOG.md b/macros/luatex/latex/letgut/doc/CHANGELOG.md
deleted file mode 100644
index a1090d0052..0000000000
--- a/macros/luatex/latex/letgut/doc/CHANGELOG.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# Changelog
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
-and this project adheres to [Semantic
-Versioning](http://semver.org/spec/v2.0.0.html).
-
-## [Unreleased]
-
-## [0.9.1] - 2022-03-22
-
-### Changed
-File renamed (Karl Berry request)
-
-## [0.9] - 2022-03-18
-
-### Added
-First public testing release
diff --git a/macros/luatex/latex/letgut/doc/letgut-banner-code.pdf b/macros/luatex/latex/letgut/doc/letgut-banner-code.pdf
index 4d8ed77780..e280be97e3 100644
--- a/macros/luatex/latex/letgut/doc/letgut-banner-code.pdf
+++ b/macros/luatex/latex/letgut/doc/letgut-banner-code.pdf
Binary files differ
diff --git a/macros/luatex/latex/letgut/doc/letgut-banner-code.tex b/macros/luatex/latex/letgut/doc/letgut-banner-code.tex
deleted file mode 100644
index aab61f0276..0000000000
--- a/macros/luatex/latex/letgut/doc/letgut-banner-code.tex
+++ /dev/null
@@ -1,806 +0,0 @@
-% Created 2022-03-22 mar. 11:25
-% Intended LaTeX compiler: lualatex
-\documentclass{letgut}
- \setmainfont{KpRoman}
-\setsansfont{KpSans}
-\setmonofont[Scale = MatchLowercase]{RobotoMono}
-\letgutsetup{editorial=false}
-\input{listings-conf}
-\author{Association GUTenberg}
-\date{\today}
-\title{Support for the banner of the newsletter “La Lettre de GUTenberg”}
-\begin{document}
-
-
-\section{Identification}
-\label{sec:org4c9ba67}
-
-\begin{lstlisting}
-% This is file `letgut.cls',
-% generated with the Emacs Org-babel utility.
-%
-% The original source file is letgut-banner.org
-%
-% -------------:| ---------------------------------------------------
-% letgut-banner:| Package for the banner of the newsletter
-% | “La Lettre GUTenberg”
-% Author:| Association GUTenberg
-% E-mail:| secretariat@gutenberg.eu.org
-% License:| Released under the LaTeX Project Public License
-% | v1.3c or later
-% See:| http://www.latex-project.org/lppl.txt
-%
-% Copyright (C) 1994-2022 by Association GUTenberg
-% <secretariat@gutenberg.eu.org>
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License (LPPL), either
-% version 1.3c of this license or (at your option) any later
-% version. The latest version of this license is in the file:
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This work is “maintained” (as per LPPL maintenance status)
-% by Association GUTenberg.
-\end{lstlisting}
-
-\section{Implementation}
-\label{sec:orgb1ea800}
-
-These document classes can only be used with \LaTeXe, so we make
-sure that an appropriate message is displayed when another \TeX{}
-format is used.
-
-\begin{lstlisting}
-\NeedsTeXFormat{LaTeX2e}[2020-10-01]
-\end{lstlisting}
-
-Now, we can announce the package name and its version:
-
-\begin{lstlisting}
-\ProvidesExplPackage{letgut-banner}
-{2022-03-22}
-{0.9.1}
-{
- Package for the banner of the newsletter “La Lettre de GUTenberg”
-}
-\end{lstlisting}
-
-\subsection{Packages loaded}
-\label{sec:org09b0cd2}
-
-In order to provide class options, we load the \package{l3keys2e} which provides
-\LaTeXe{} option processing using \LaTeX3 keys:
-
-\begin{lstlisting}
-\RequirePackage{l3keys2e}
-\end{lstlisting}
-
-Till the Lua-based color will be added to the core \package{l3color} approach,
-we have to rely on \package{xcolor}
-
-\begin{lstlisting}
-\RequirePackage{xcolor}
-\end{lstlisting}
-
-We want the material added to the first page to be not selectable in order to let the
-reader who wants to copy the interesting text be able to select it (see below).
-
-\begin{lstlisting}
-\RequirePackage{accsupp}
-\end{lstlisting}
-
-What follows has to be done at this end of the preamble, otherwise the font set
-with \lstinline+\setmainfont+ in the preamble isn't taken in account in the banner.
-
-We define an option for the color of the text in the “L” (that has to be the
-same as the page color of the document).
-
-\begin{lstlisting}
-\keys_define:nn { letgut-banner }
-{
- , pagecolor .clist_gset:N = \g__letgutbanner_pagecolor_clist
- , pagecolor .initial:n = { 1,1,1 }
-}
-\ProcessKeysOptions { letgut-banner }
-\end{lstlisting}
-
-\begin{lstlisting}
-\AddToHook{begindocument}{
-\end{lstlisting}
-
-\begin{lstlisting}
-\cs_generate_variant:Nn \color_fill:nn { nV }
-\end{lstlisting}
-
-\subsection{Declarations}
-\label{sec:org61842b5}
-
-\subsubsection{Dimensions}
-\label{sec:org447090b}
-
-\begin{lstlisting}
-\dim_new:N \g__letgutbanner_area_height_dim
-\dim_new:N \g__letgutbanner_La_height_dim
-\dim_new:N \g__letgutbanner_La_depth_dim
-\dim_new:N \g__letgutbanner_La_yoffset_dim
-\dim_new:N \g__letgutbanner_banner_vertical_contents_width_dim
-\dim_new:N \g__letgutbanner_largest_LETR_box_height_dim
-\dim_new:N \g__letgutbanner_between_letters_yoffset_dim
-\dim_new:N \g__letgutbanner_between_letters_vertical_space_dim
-\dim_new:N \g__letgutbanner_banner_padding_dim
-\dim_if_exist:NF \g__letgutbanner_first_page_shrink_dim {
- \dim_new:N \g__letgutbanner_first_page_shrink_dim
-}
-\end{lstlisting}
-
-\begin{itemize}
-\item Dimensions of the page. If the present package is used with the
-\class*{letgut}, they are borrowed from it. Otherwise, they are set to default
-values. For this, we first generate a variant of \lstinline+\dim_const:Nn+ (see
-\url{https://github.com/latex3/latex3/issues/947\#issuecomment-860950569}).
-\begin{lstlisting}
-\cs_generate_variant:Nn \dim_const:Nn { NV }
-\dim_if_exist:NTF \c__letgut_textheight_dim {
- \dim_const:NV \c__letgutbanner_textheight_dim
- \c__letgut_textheight_dim
-}{
- \dim_const:Nn \c__letgutbanner_textheight_dim
- { 25cm }
-}
-\dim_if_exist:NTF \c__letgut_textwidth_dim {
- \dim_const:NV \c__letgutbanner_textwidth_dim
- \c__letgut_textwidth_dim
-}{
- \dim_const:Nn \c__letgutbanner_textwidth_dim
- { 14cm }
-}
-\dim_if_exist:NTF \c__letgut_lmargin_dim {
- \dim_const:NV \c__letgutbanner_lmargin_dim
- \c__letgut_lmargin_dim
-}{
- \dim_const:Nn \c__letgutbanner_lmargin_dim
- { 5cm }
-}
-\dim_if_exist:NTF \c__letgut_tmargin_dim {
- \dim_const:NV \c__letgutbanner_tmargin_dim
- \c__letgut_tmargin_dim
-}{
- \dim_const:Nn \c__letgutbanner_tmargin_dim
- { 2.92cm }
- % \dim_const:Nn \c__letgutbanner_tmargin_dim
- % { 3cm }
-}
-\dim_if_exist:NTF \c__letgut_head_dim {
- \dim_const:NV \c__letgutbanner_head_dim
- \c__letgut_head_dim
-}{
- \dim_const:Nn \c__letgutbanner_head_dim
- { 0.6cm }
-}
-\dim_if_exist:NTF \c__letgut_headsep_dim {
- \dim_const:NV \c__letgutbanner_headsep_dim
- \c__letgut_headsep_dim
-}{
- \dim_const:Nn \c__letgutbanner_headsep_dim
- { 0.82cm }
- % \dim_const:Nn \c__letgutbanner_headsep_dim
- % { 0.9cm }
-}
-\dim_if_exist:NTF \c__letgut_marginparwidth_dim {
- \dim_const:NV \c__letgutbanner_marginparwidth_dim
- \c__letgut_marginparwidth_dim
-}{
- \dim_const:Nn \c__letgutbanner_marginparwidth_dim
- { 3.74cm }
-}
-\end{lstlisting}
-\item Dimensions of the banner. If the present package is used with the
-\class*{letgut}, they are borrowed from it. Otherwise, they are set to
-default values.
-\begin{itemize}
-\item Thickness of the “L”.
-\begin{lstlisting}
-\dim_if_exist:NTF \c__letgut_banner_thickness_dim {
- \dim_const:NV \c__letgutbanner_banner_thickness_dim
- \c__letgut_banner_thickness_dim
-}{
- \dim_const:Nn \c__letgutbanner_banner_thickness_dim
- { 4cm }
-}
-\end{lstlisting}
-\item Height of the “L” (that of the text area plus 3cm).
-\begin{lstlisting}
-\dim_if_exist:NTF \c__letgut_banner_height_dim {
- \dim_const:NV \c__letgutbanner_banner_height_dim
- \c__letgut_banner_height_dim
-}{
- \dim_const:Nn \c__letgutbanner_banner_height_dim {
- \c__letgutbanner_textheight_dim
- +
- 3cm
- }
-}
-\end{lstlisting}
-\item Initial padding of the text embedded in the vertical bar of the “L”.
-\begin{lstlisting}
-\dim_const:Nn \c__letgutbanner_banner_padding_dim { .25cm }
-\end{lstlisting}
-\item Width of the “L” (the width (\(w\)) of the text zone plus the width (\(l\)) of
-the left margin minus half the difference between the width of the left
-margin and the width (\(d\)) of the “L”: \(=w+l-(l-d)/2=w+(l+d)/2\)).
-\begin{lstlisting}
-\dim_const:Nn \c__letgutbanner_banner_width_dim {
- \c__letgutbanner_textwidth_dim
- +
- (
- \c__letgutbanner_banner_thickness_dim
- +
- \c__letgutbanner_lmargin_dim
- )/2
-}
-\end{lstlisting}
-\item Initial width of the text embedded in the “L” vertical bar.
-\begin{lstlisting}
-\dim_const:Nn
-\c__letgutbanner_banner_vertical_contents_width_dim {
- \c__letgutbanner_banner_thickness_dim
- -
- 2\c__letgutbanner_banner_padding_dim
-}
-\end{lstlisting}
-\item Width of the text embedded in the horizontal bar of the “L” (of the text
-area plus half the difference between that of the left margin and that of
-the thickness of the “L”, minus the padding -- and not 2 times the
-padding because this text will be stuck to its left “margin”).
-\begin{lstlisting}
-\dim_const:Nn
-\c__letgutbanner_banner_horizontal_contents_width_dim {
- \c__letgutbanner_textwidth_dim
- - (
- \c__letgutbanner_banner_thickness_dim
- -
- \c__letgutbanner_lmargin_dim
- )/2
- -
- \c__letgutbanner_banner_padding_dim
-}
-\end{lstlisting}
-\end{itemize}
-\end{itemize}
-
-\subsubsection{Boxes}
-\label{sec:org5711d86}
-
-New boxes, for each of the letters in the word “LETTRE” (!), and then for the
-rest of the content listed in the banner.
-\begin{lstlisting}
-\box_new:N \g__letgutbanner_L_box
-\box_new:N \g__letgutbanner_E_box
-\box_new:N \g__letgutbanner_T_box
-\box_new:N \g__letgutbanner_R_box
-\box_new:N \g__letgutbanner_La_box
-\box_new:N \g__letgutbanner_GUTenberg_box
-\box_new:N \g__letgutbanner_largest_LETR_box
-\box_new:N \g__letgutbanner_g_box
-\end{lstlisting}
-
-\subsubsection{Floating point numbers}
-\label{sec:orge5b5c6b}
-
-\begin{itemize}
-\item Minimum percentage of the common height of the letters of the word “LETTRE”
-that their line spacing must represent.
-\end{itemize}
-\begin{lstlisting}
-\fp_const:Nn \c__letgutbanner_leading_minimum_percent_fp { 0.15 }
-\end{lstlisting}
-\begin{itemize}
-\item Factor applied to the line spacing between “La” and the 1st letter of
-“LETTRE” compared to that between the letters of “LETTRE”.
-\end{itemize}
-\begin{lstlisting}
-\fp_const:Nn \c__letgutbanner_leading_La_factor_fp { 1.5 }
-\end{lstlisting}
-
-\subsection{Application des dimensions de la page}
-\label{sec:orgbda0ae2}
-
-\begin{lstlisting}
-\geometry{
- asymmetric,
- textheight = \c__letgutbanner_textheight_dim,
- textwidth = \c__letgutbanner_textwidth_dim,
- lmargin = \c__letgutbanner_lmargin_dim,
- tmargin = \c__letgutbanner_tmargin_dim,
- head = \c__letgutbanner_head_dim,
- headsep = \c__letgutbanner_headsep_dim,
- marginparwidth= \c__letgutbanner_marginparwidth_dim,
- % showframe,
- % verbose,
-}
-\end{lstlisting}
-
-\subsection{Filling of the boxes}
-\label{sec:orgb3e9382}
-\begin{lstlisting}
-\hbox_gset:Nn \g__letgutbanner_L_box { \textbf{L} }
-\hbox_gset:Nn \g__letgutbanner_E_box { \textbf{E} }
-\hbox_gset:Nn \g__letgutbanner_T_box { \textbf{T} }
-\hbox_gset:Nn \g__letgutbanner_R_box { \textbf{R} }
-\hbox_gset:Nn \g__letgutbanner_La_box { \textbf{\textit{La}} }
-\hbox_gset:Nn \g__letgutbanner_GUTenberg_box {
- \textbf{\textit{GUTenberg}}
-}
-\hbox_gset:Nn \g__letgutbanner_g_box { \textbf{g} }
-\end{lstlisting}
-
-\subsection{Computations}
-\label{sec:orgdd18dd8}
-
-Determination of the widths of each of the letter boxes of the word “LETTRE”.
-\begin{lstlisting}
-\dim_const:Nn \c__letgutbanner_L_width_dim {
- \box_wd:N \g__letgutbanner_L_box
-}
-\dim_const:Nn \c__letgutbanner_E_width_dim {
- \box_wd:N \g__letgutbanner_E_box
-}
-\dim_const:Nn \c__letgutbanner_T_width_dim {
- \box_wd:N \g__letgutbanner_T_box
-}
-\dim_const:Nn \c__letgutbanner_R_width_dim {
- \box_wd:N \g__letgutbanner_R_box
-}
-\end{lstlisting}
-Determination of the largest of these widths, stored in the scratch dimension
-\lstinline+\g_tmpa_dim+.
-\begin{lstlisting}
-\dim_gset:Nn \g_tmpa_dim {
- \fp_eval:n {
- max (
- \c__letgutbanner_L_width_dim,
- \c__letgutbanner_E_width_dim,
- \c__letgutbanner_T_width_dim,
- \c__letgutbanner_R_width_dim,
- )
- }pt
-}
-\end{lstlisting}
-Determination of the (1st) box whose width is the largest of all (\lstinline+argmax+, as
-it were).
-\begin{lstlisting}
-\box_gset_eq:NN \g__letgutbanner_largest_LETR_box \dim_case:nnF
-{ \g_tmpa_dim }
-{
- { \c__letgutbanner_L_width_dim } { \g__letgutbanner_L_box }
- { \c__letgutbanner_E_width_dim } { \g__letgutbanner_E_box }
- { \c__letgutbanner_T_width_dim } { \g__letgutbanner_T_box }
- { \c__letgutbanner_R_width_dim } { \g__letgutbanner_R_box }
-}
-{ No~ idea! }
-\end{lstlisting}
-Resize the box containing “GUTenberg” to the width of the text embedded in the
-horizontal bar of the “L”.
-\begin{lstlisting}
-\box_gresize_to_wd:Nn \g__letgutbanner_GUTenberg_box {
- \c__letgutbanner_banner_horizontal_contents_width_dim
-}
-\end{lstlisting}
-Determination of the height and depth of the box containing “GUTenberg” resized.
-\begin{lstlisting}
-\dim_const:Nn \c__letgutbanner_GUTenberg_height_dim {
- \box_ht:N \g__letgutbanner_GUTenberg_box
-}
-\dim_const:Nn \c__letgutbanner_GUTenberg_depth_dim {
- \box_dp:N \g__letgutbanner_GUTenberg_box
-}
-\end{lstlisting}
-Determining the size of the vertical offset of the box containing the resized
-“GUTenberg”, so that it is vertically centered in the horizontal bar of the “L”:
-the box positioned in \(0\) would be at the very bottom of the box containing the
-banner so with base line at the bottom the horizontal bar of the “L” so we raise
-it first by its depth (\(d\)) and then by half the difference between the heights
-(\(H\)) of the horizontal bar of the “L” and (\(h+d\)) total of the box containing
-“GUTenberg” resized (\(=d+H/2-(h+d)/2=(H-h+d)/2\)).
-\begin{lstlisting}
-\dim_const:Nn \c__letgutbanner_GUTenberg_yoffset_dim {
- (
- \c__letgutbanner_banner_thickness_dim
- -
- \c__letgutbanner_GUTenberg_height_dim
- +
- \c__letgutbanner_GUTenberg_depth_dim
- )/2
-}
-\end{lstlisting}
-Once the height of the zone devoted to “La LETTRE” in the vertical bar of the
-“L” has been fixed, the line spacing between the letters of the word “LETTRE”
-depends in fact only on the width occupied by the widest of them, by definition
-equal to the width allocated to the text embedded in the vertical bar of the
-“L”. The latter, stored in \lstinline+\g__letgutbanner_banner_vertical_contents_width_dim+, is
-initially fixed:
-\begin{lstlisting}
-\dim_gset:Nn
-\g__letgutbanner_banner_vertical_contents_width_dim
-\c__letgutbanner_banner_vertical_contents_width_dim
-\end{lstlisting}
-but, to avoid this line spacing being too small (or even negative), we test that
-it is greater than a certain threshold, equal to a certain minimum percentage of
-the height common to the letters of the word “LETTRE”, stored in:
-
-\lstinline+\c__letgutbanner_leading_minimum_percent_fp+
-
-and fixed at 0.15. If this is not the
-case, we reduce (by 1pt):
-
-\lstinline+\g__letgutbanner_banner_vertical_contents_width_dim+
-
-and loop until it is the case.
-\begin{lstlisting}
-\dim_do_until:nNnn {
- \g__letgutbanner_between_letters_vertical_space_dim
-}
->
-{
- \fp_use:N\c__letgutbanner_leading_minimum_percent_fp
- \g__letgutbanner_largest_LETR_box_height_dim
-}{
-\end{lstlisting}
-Resize the largest of these boxes to the width of the text embedded in the “L”.
-\begin{lstlisting}
-\box_gresize_to_wd:Nn \g__letgutbanner_largest_LETR_box {
- \g__letgutbanner_banner_vertical_contents_width_dim
-}
-\end{lstlisting}
-Height of this resized larger box.
-\begin{lstlisting}
-\dim_gset:Nn \g__letgutbanner_largest_LETR_box_height_dim {
- \box_ht:N \g__letgutbanner_largest_LETR_box
-}
-\end{lstlisting}
-Resize the boxes for each of the letters in the word “LETTRE” so that they are
-all the same height as the widest of them.
-\begin{lstlisting}
-\box_gresize_to_ht:Nn \g__letgutbanner_L_box {
- \g__letgutbanner_largest_LETR_box_height_dim
-}
-\box_gresize_to_ht:Nn \g__letgutbanner_E_box {
- \g__letgutbanner_largest_LETR_box_height_dim
-}
-\box_gresize_to_ht:Nn \g__letgutbanner_T_box {
- \g__letgutbanner_largest_LETR_box_height_dim
-}
-\box_gresize_to_ht:Nn \g__letgutbanner_R_box {
- \g__letgutbanner_largest_LETR_box_height_dim
-}
-\end{lstlisting}
-Resize the box containing “La” to the width of the text embedded in the “L”
-vertical bar.
-\begin{lstlisting}
-\box_gresize_to_wd:Nn \g__letgutbanner_La_box {
- \g__letgutbanner_banner_vertical_contents_width_dim
-}
-\end{lstlisting}
-Determine the height (\(h\)) and depth (\(d\)) of the resized box containing “La”.
-\begin{lstlisting}
-\dim_gset:Nn \g__letgutbanner_La_height_dim {
- \box_ht:N \g__letgutbanner_La_box
-}
-\dim_gset:Nn \g__letgutbanner_La_depth_dim {
- \box_dp:N \g__letgutbanner_La_box
-}
-\end{lstlisting}
-Determining the size of the vertical offset of the resized box containing “La”
-so that its top is, relative to the top of the “L”, offset by the same amount as
-the bottom of the box containing “GUTenberg” is offset from the bottom of the
-“L” (i.e., the distance from the top of the page to the top of “La” and the
-distance from the bottom of the page to the baseline of “GUTenberg” are
-identical).
-\begin{lstlisting}
-\dim_gset:Nn \g__letgutbanner_La_yoffset_dim {
- \c__letgutbanner_banner_height_dim
- -
- \c__letgutbanner_GUTenberg_yoffset_dim
- -
- \g__letgutbanner_La_height_dim
- +
- \g__letgutbanner_La_depth_dim
-}
-\end{lstlisting}
-For the following, the area containing the letters of the word “LETTRE” aligned
-vertically is fixed, defined as follows:
-\begin{itemize}
-\item its top is the baseline of “La”,
-\item its bottom is the baseline of “GUTenberg”.
-\end{itemize}
-Determination of the height of this area.
-\begin{lstlisting}
-\dim_gset:Nn \g__letgutbanner_area_height_dim {
- \g__letgutbanner_La_yoffset_dim
- -
- \g__letgutbanner_La_depth_dim
- -
- \c__letgutbanner_GUTenberg_yoffset_dim
-}
-\end{lstlisting}
-Determining the vertical jump (\(s\)) between the letters in the word “LETTRE”
-with the constraints that:
-\begin{itemize}
-\item the top of the 1st letter (“L”) is \(3e/2\) below the top of the area (where
-\(e\) is the common vertical space separating the letters of the word
-“LETTRE”),
-\item the baseline of the last letter (“E”) is merged with the bottom of the area,
-\item this jump must not be less than 20 \% of the common height \(h\) to all these
-letters i.e.:
-
-\lstinline+\g__letgutbanner_largest_LETR_box_height_dim+
-
-otherwise the size of the largest of these boxes is reduced to less than the
-width of the text embedded in the “L”.
-\end{itemize}
-
-The sum of :
-\begin{itemize}
-\item the 5 vertical spaces (\(5e\)) between the letters in the word “LETTRE”,
-\item the 6 common heights (\(6h\)) to all these letters,
-\item \(3e/2\),
-\end{itemize}
-must equal the height (\(H\)) of the zone. So we have \(H=3e/2+5e+6h\), that is
-\(e=2(H-6h)/13\). Once initialized, the vertical jump between the letters is
-\(s=e+h\) that is \(s=(2H+h)/13\). Therefore:
-
-\begin{enumerate}
-\item Determine the vertical half-space between the letters.
-\begin{lstlisting}
-\dim_set:Nn \l_tmpa_dim {
- (
- \g__letgutbanner_area_height_dim
- -
- 6\g__letgutbanner_largest_LETR_box_height_dim
- )/13
-}
-\end{lstlisting}
-\item Vertical space between letters.
-\begin{lstlisting}
-\dim_gset:Nn \g__letgutbanner_between_letters_vertical_space_dim {
- 2\l_tmpa_dim
-}
-\end{lstlisting}
-\item If this space does not check the condition explained above, we reduce:
-
-\lstinline+\g__letgutbanner_banner_vertical_contents_width_dim+
-
-and loop.
-\begin{lstlisting}
-\dim_gsub:Nn \g__letgutbanner_banner_vertical_contents_width_dim {
- 1pt
- }
-}
-\end{lstlisting}
-\end{enumerate}
-The width allocated to the text embedded in the vertical bar of the “L” may have
-been re-evaluated, so the padding (which must be symmetrical) may have changed
-as well.
-\begin{lstlisting}
-\dim_gset:Nn \g__letgutbanner_banner_padding_dim {
- (
- \c__letgutbanner_banner_thickness_dim
- -
- \g__letgutbanner_banner_vertical_contents_width_dim
- )/2
-}
-\end{lstlisting}
-\begin{enumerate}
-\item Determination of the vertical offset of the 1st letter (“L”).
-\begin{lstlisting}
-\dim_const:Nn \c__letgutbanner_first_letter_yoffset_dim {
- \g__letgutbanner_La_yoffset_dim
- -
- \g__letgutbanner_largest_LETR_box_height_dim
- -
- \fp_use:N \c__letgutbanner_leading_La_factor_fp
- \g__letgutbanner_between_letters_vertical_space_dim
-}
-\end{lstlisting}
-\item Determination of the vertical jump between letters.
-\begin{lstlisting}
-\dim_gset:Nn \g__letgutbanner_between_letters_yoffset_dim {
- \g__letgutbanner_between_letters_vertical_space_dim
- +
- \g__letgutbanner_largest_LETR_box_height_dim
-}
-\end{lstlisting}
-\end{enumerate}
-Resize the box containing “g” to the width of the text.
-\begin{lstlisting}
-\box_gresize_to_wd:Nn \g__letgutbanner_g_box {
- \c__letgutbanner_textwidth_dim
-}
-\end{lstlisting}
-Calculates the size by which the height of the text box on the 1st page must be
-reduced so that the banner does not encroach on the text. Relative to the top of
-the page:
-\begin{itemize}
-\item the top of the horizontal bar of “L” is at a distance equal to the sum of :
-\begin{itemize}
-\item the distance between this top of page and the top of the vertical bar of
-“L”, equal to the height (\(p\)) of the paper minus the height (\(l\)) of “L”
-\end{itemize}
-\end{itemize}
-\begin{lstlisting}
-\dim_gset:Nn \g__letgutbanner_first_page_shrink_dim {
- \c__letgutbanner_tmargin_dim
- +
- \c__letgutbanner_textheight_dim
- +
- \c__letgutbanner_banner_thickness_dim
- -
- .5\paperheight
- -
- .5\c__letgutbanner_banner_height_dim
- +
- .5\baselineskip
-}
-\end{lstlisting}
-Automatic addition on the 1st page (only) of the banner.
-\begin{lstlisting}
-\AddToHookNext{shipout/background}{
-\end{lstlisting}
-We want the material added to this page to be not selectable in order to let the
-reader who wants to copy the interesting text be able to select it.
-\begin{lstlisting}
-\BeginAccSupp{ActualText={}}
-\end{lstlisting}
-We put now the big “L” at the right place.
-\begin{lstlisting}
-\put(
-.5\c__letgutbanner_lmargin_dim-.5\c__letgutbanner_banner_thickness_dim
-,
--.5\paperheight-.5\c__letgutbanner_banner_height_dim
-){
- \put(0,0){
- \rule{
- \c__letgutbanner_banner_width_dim
- }{
- \c__letgutbanner_banner_thickness_dim
- }
- }
- \put(0,0){
- \rule{
- \c__letgutbanner_banner_thickness_dim
- }{
- \c__letgutbanner_banner_height_dim
- }
- }
-\end{lstlisting}
-The color should not be systematically white, but should be identical to the one
-chosen for the page background.
-\begin{lstlisting}
- % \color_fill:nV {rgb}{ \g__letgutbanner_pagecolor_clist }
- \color[rgb]{ \g__letgutbanner_pagecolor_clist }
- \put(
- \g__letgutbanner_banner_padding_dim
- ,
- \g__letgutbanner_La_yoffset_dim
- ){
- \box_use:N \g__letgutbanner_La_box
- }
- \put(
- \g__letgutbanner_banner_padding_dim
- ,
- \c__letgutbanner_first_letter_yoffset_dim
- -0\g__letgutbanner_between_letters_yoffset_dim
- ){
- \box_use:N \g__letgutbanner_L_box
- }
- \put(
- \g__letgutbanner_banner_padding_dim
- ,
- \c__letgutbanner_first_letter_yoffset_dim
- -1\g__letgutbanner_between_letters_yoffset_dim
- ){
- \box_use:N \g__letgutbanner_E_box
- }
- \put(
- \g__letgutbanner_banner_padding_dim
- ,
- \c__letgutbanner_first_letter_yoffset_dim
- -2\g__letgutbanner_between_letters_yoffset_dim
- ){
- \box_use:N \g__letgutbanner_T_box
- }
- \put(
- \g__letgutbanner_banner_padding_dim
- ,
- \c__letgutbanner_first_letter_yoffset_dim
- -3\g__letgutbanner_between_letters_yoffset_dim
- ){
- \box_use:N \g__letgutbanner_T_box
- }
- \put(
- \g__letgutbanner_banner_padding_dim
- ,
- \c__letgutbanner_first_letter_yoffset_dim
- -4\g__letgutbanner_between_letters_yoffset_dim
- ){
- \box_use:N \g__letgutbanner_R_box
- }
- \put(
- \g__letgutbanner_banner_padding_dim
- ,
- \c__letgutbanner_first_letter_yoffset_dim
- -5\g__letgutbanner_between_letters_yoffset_dim
- ){
- \box_use:N \g__letgutbanner_E_box
- }
- \put(
- \c__letgutbanner_banner_thickness_dim
- ,
- \c__letgutbanner_GUTenberg_yoffset_dim
- ){
- \box_use:N \g__letgutbanner_GUTenberg_box
- }
- % \color_fill:n {black!10}
- \color{ black!10 }
- \put(
- .5\c__letgutbanner_lmargin_dim+.5\c__letgutbanner_banner_thickness_dim
- ,
- .5\paperheight
- +
- .5\c__letgutbanner_banner_height_dim
- -
- \c__letgutbanner_tmargin_dim
- ){
- \box_move_down:nn {.5\c__letgutbanner_textheight_dim}
- {\box_use:N \g__letgutbanner_g_box}
- }
-}
-\end{lstlisting}
-We end the part which isn't selectable.
-\begin{lstlisting}
-\EndAccSupp{}
-}
-\end{lstlisting}
-
-We close \lstinline+\AddToHook{begindocument}+.
-
-\begin{lstlisting}
-}
-\end{lstlisting}
-
-If the package is used with another class than \class{letgut}, we reduce the
-textheight of the first page of the height of the horizontal bar of the “L”.
-
-\begin{lstlisting}
-\@ifclassloaded{letgut}{
-}{
- \AddToHook{begindocument/end}{%
- \enlargethispage{
- - \g__letgutbanner_first_page_shrink_dim
- }
- \thispagestyle{empty}
- }
-}
-\end{lstlisting}
-
-\section{Example file (\texttt{letgut-banner-example.tex})}
-\label{sec:org4c5e60d}
-
-\begin{lstlisting}
-\documentclass[twoside]{article}
-\usepackage{fontspec}
-\usepackage[a4paper]{geometry}
-\usepackage{fancyhdr}
-\usepackage{letgut-banner}
-\usepackage{lipsum}
-\setmainfont{TeX Gyre Schola}
-\fancyhf{}
-\fancyhead[RO,LE]{\thepage}
-\fancyhead[RE,LO]{Test~\textsf{letgut-banner}}
-\pagestyle{fancy}
-\begin{document}
-\lipsum[1-20]
-\end{document}
-\end{lstlisting}
-\end{document}
diff --git a/macros/luatex/latex/letgut/doc/letgut-code.pdf b/macros/luatex/latex/letgut/doc/letgut-code.pdf
index 12da2cdac8..57cc0c3ae0 100644
--- a/macros/luatex/latex/letgut/doc/letgut-code.pdf
+++ b/macros/luatex/latex/letgut/doc/letgut-code.pdf
Binary files differ
diff --git a/macros/luatex/latex/letgut/doc/letgut-code.tex b/macros/luatex/latex/letgut/doc/letgut-code.tex
deleted file mode 100644
index 672935a5fb..0000000000
--- a/macros/luatex/latex/letgut/doc/letgut-code.tex
+++ /dev/null
@@ -1,3361 +0,0 @@
-% Created 2022-03-22 mar. 11:24
-% Intended LaTeX compiler: lualatex
-\documentclass{letgut}
- \setmainfont{KpRoman}
-\setsansfont{KpSans}
-\setmonofont[Scale = MatchLowercase]{RobotoMono}
-\letgutsetup{editorial=false}
-\input{listings-conf}
-\author{Association GUTenberg}
-\date{\today}
-\title{Support for the newsletter “La Lettre GUTenberg”}
-\begin{document}
-
-
-\section{Identification}
-\label{sec:org4c9ba67}
-
-\begin{lstlisting}
-% This is file `letgut.cls',
-% generated with the Emacs Org-babel utility.
-%
-% The original source file is letgut.org
-%
-% -------:| ----------------------------------------------------
-% letgut:| Class for the newsletter “La Lettre GUTenberg”
-% Author:| Association GUTenberg
-% E-mail:| secretariat@gutenberg.eu.org
-% License:| Released under the LaTeX Project Public License
-% | v1.3c or later
-% See:| http://www.latex-project.org/lppl.txt
-%
-% Copyright (C) 1994-2022 by Association GUTenberg
-% <secretariat@gutenberg.eu.org>
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License (LPPL), either
-% version 1.3c of this license or (at your option) any later
-% version. The latest version of this license is in the file:
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This work is “maintained” (as per LPPL maintenance status)
-% by Association GUTenberg.
-%
-\end{lstlisting}
-
-\section{Debugging}
-\label{sec:org09b0cd2}
-
-\begin{lstlisting}
-% \RequirePackage[
-% , check-declarations
-% , enable-debug
-% , backend=luatex
-% ]{expl3}
-\end{lstlisting}
-
-\section{Implementation}
-\label{sec:orga99a9b5}
-
-These document classes can only be used with \LaTeXe, so we make
-sure that an appropriate message is displayed when another \TeX{}
-format is used.
-
-\begin{lstlisting}
-\NeedsTeXFormat{LaTeX2e}[2020-10-01]
-\end{lstlisting}
-
-We define some constant token lists immediately useful.
-
-\begin{lstlisting}
-\ExplSyntaxOn
-\tl_const:Nn \c__letgut_Lettre_tl { \emph{ Lettre } }
-\tl_const:Nn \c__letgut_gutenberg_tl { GUTenberg }
-\tl_const:Nn \c__letgut_Lettre_gutenberg_tl {
- \c__letgut_Lettre_tl~\c_space_tl \c__letgut_gutenberg_tl
-}
-\tl_const:Nn \c__letgut_la_lettre_gutenberg_tl {
- la~ \c__letgut_Lettre_gutenberg_tl
-}
-\tl_const:Nn \c__letgut_La_lettre_gutenberg_tl {
- \text_titlecase_first:n \c__letgut_la_lettre_gutenberg_tl
-}
-\ExplSyntaxOff
-\end{lstlisting}
-
-Now, we can announce the class name and its version:
-
-\begin{lstlisting}
-\ProvidesExplClass{letgut}
-{2022-03-22}
-{0.9.1}
-{
- Class~ for~ the~ newsletter~
- “\c__letgut_La_lettre_gutenberg_tl”
-}
-\end{lstlisting}
-
-\subsection{Messages}
-\label{sec:org447090b}
-
-We specify the messages come from a class, which is letgut (see
-\url{https://github.com/latex3/latex3/issues/887}).
-
-\begin{lstlisting}
-\prop_gput:Nnn \g_msg_module_type_prop { letgut } { Class }
-\end{lstlisting}
-
-Some messages are declared for future use.
-
-\begin{lstlisting}
-\msg_new:nnn{letgut}{Wrong~engine}{
- The~ letgut~ class~ requires~ LuaTeX.\\\\
- You~ must~ change~ your~ typesetting~ engine~ to~
- “lualatex”~ instead~ of~ “latex”~ or~ “pdflatex”
- or~ “xelatex”.
-}
-\msg_new:nnn{letgut}{Existing~command}{
- The~ command~ \c_backslash_str \text_lowercase:n{#1}~
- already~ exists~ and~ has~ not~ be~ overwritten~ by~
- \token_to_str:N \letgutacro{#1}{...}.~
- The~ corresponding~ acronym~ has~ to~ be~ used~ e.g.~
- like~ this:~
- \token_to_str:N \ac{ \text_lowercase:n{#1} }.
-}
-\msg_new:nnn{letgut}{Not~month~iso~date}{
- The~ supplied~ date~(“#1”)~ isn't~ at~ the~ month~ iso~
- date~ format~ (YYYY-MM):~ it~ will~ be~ printed~ as~
- it~ is.
-}
-\msg_new:nnn{letgut}{Banner~file~not~provided}{
- No~ `\c__letgut_banner_file_tl.pdf'~ file~ provided:~
- the~ banner~ will~ be~ automatically~ created.
-}
-\msg_new:nnn{letgut}{Editorial~file~missing}{
- File~`\c__letgut_editorial_file_tl.tex'~missing!~
- The~ editorial~ will~ be~ missing.
-}
-\msg_new:nnn{letgut}{Informations~file~missing}{
- File~ `\c__letgut_informations_gutenberg_file_tl.tex'~
- missing!~ The~ informations~ about~
- \c__letgut_gutenberg_tl\c_space_tl~ will~ be~ missing.
-}
-\msg_new:nnn{letgut}{pagecolor~inoperative~with~paper~option}{
- The~ `pagecolor=#1`~ option~ is~ inoperative~ with~ the~ `paper`~
- option:~ the~ color~ of~ the~ page~ will~ remain~ white.
-}
-\msg_new:nnn{letgut}{frontcover-missing}{
- You~ didn't~ use~ the~ `frontcover`~ option~ for~ the~
- bookreview~ “#1”,~ so~ the~ book~ cover~image~ will~ be~ missing:~
- are~ you~ sure?
-}
-\msg_new:nnn{letgut}{frontcover-file-not-found}{
- The~ book~ cover~ image~ `#2`~ you~ specified~ via~ the~
- `frontcover`~ option~ for~ the~ bookreview~ “#1”~ cannot~ be~ found.
-}
-\end{lstlisting}
-
-\subsection{Engine checking}
-\label{sec:org5711d86}
-
-\begin{lstlisting}
-\sys_if_engine_luatex:F {
- \msg_fatal:nn{letgut}{Wrong~engine}
-}
-\end{lstlisting}
-
-\subsection{Declarations}
-\label{sec:orga63e6a8}
-
-\subsubsection{Booleans}
-\label{sec:orge5b5c6b}
-
-\begin{itemize}
-\item For testing the emptyness of the title.
-\begin{lstlisting}
-\bool_new:N \g__letgut_title_empty_bool
-\end{lstlisting}
-\item For the paper (or not) output.
-\begin{lstlisting}
-\bool_new:N \g__letgut_paper_bool
-\end{lstlisting}
-\item For testing whether we currently are in a footnote or not.
-\begin{lstlisting}
-\bool_new:N \l__letgut_in_footnote_bool
-\end{lstlisting}
-\end{itemize}
-
-\subsubsection{Dimensions}
-\label{sec:org61842b5}
-
-\begin{itemize}
-\item Geometry of the document
-\begin{lstlisting}
-\dim_const:Nn \c__letgut_textheight_dim { 25cm }
-\dim_const:Nn \c__letgut_textwidth_dim { 14cm }
-\dim_const:Nn \c__letgut_lmargin_dim { 5cm }
-\dim_const:Nn \c__letgut_tmargin_dim { 2.92cm }
-% \dim_const:Nn \c__letgut_tmargin_dim { 3cm }
-\dim_const:Nn \c__letgut_head_dim { 0.6cm }
-\dim_const:Nn \c__letgut_headsep_dim { 0.82cm }
-% \dim_const:Nn \c__letgut_headsep_dim { 0.9cm }
-\dim_const:Nn \c__letgut_marginparwidth_dim { 3.74cm }
-\end{lstlisting}
-\item Horizontal offset of the headers and the sections titles:
-\begin{lstlisting}
-\dim_const:Nn \c__letgut_hoffset_dim { 3cm }
-\dim_const:Nn \c__letgut_title_hoffset_dim {
- -\c__letgut_hoffset_dim
-}
-\dim_const:Nn \c__letgut_subtitle_hoffset_dim {
- \c__letgut_title_hoffset_dim
-}
-\dim_const:Nn \c__letgut_section_hoffset_dim {
- \c__letgut_title_hoffset_dim + 1cm
-}
-\dim_const:Nn \c__letgut_subsection_hoffset_dim {
- \c__letgut_title_hoffset_dim + 1.5cm
-}
-\dim_const:Nn \c__letgut_subsubsection_hoffset_dim {
- \c__letgut_title_hoffset_dim + 2cm
-}
-\dim_const:Nn \c__letgut_paragraph_hoffset_dim {
- \c__letgut_title_hoffset_dim + 2.5cm
-}
-\dim_const:Nn \c__letgut_subparagraph_hoffset_dim {
- \c__letgut_title_hoffset_dim + 3cm
-}
-\end{lstlisting}
-\item Distance between the baseline of the header text and the decorative line:
-\begin{lstlisting}
-\dim_const:Nn \c__letgut_head_rule_skip_dim { 0.115cm }
-\end{lstlisting}
-\item Head rule width:
-\begin{lstlisting}
-\dim_const:Nn \c__letgut_head_rule_width_dim { 0.03cm }
-\end{lstlisting}
-\item Dimensions of the banner.
-\begin{itemize}
-\item Thickness of the “L”.
-\begin{lstlisting}
-\dim_const:Nn \c__letgut_banner_thickness_dim { 4cm }
-\end{lstlisting}
-\item Height of the “L” (that of the text area plus 3cm).
-\begin{lstlisting}
-\dim_const:Nn \c__letgut_banner_height_dim {
- \c__letgut_textheight_dim
- +
- 3cm
-}
-\end{lstlisting}
-\end{itemize}
-\item Height of the membership reminder box.
-\begin{lstlisting}
-\dim_new:N \g__letgut_membership_reminder_box_height_dim
-\end{lstlisting}
-\item Horizontal space for the frontcover in the margin in book reviews.
-\begin{lstlisting}
-\dim_const:Nn \c__letgut_bookreview_frontcover_margin_sep_dim {
- 4mm
- }
-\end{lstlisting}
-\item Dimensions used by the listings and the examples.
-\end{itemize}
-\begin{lstlisting}
-\dim_const:Nn \c__letgut_height_mentions_dim { 5mm }
-\dim_const:Nn \c__letgut_from_left_boundingbox_to_text_dim { 5.5mm }
-\dim_const:Nn \c__letgut_number_offset_dim { 1mm }
-\dim_const:Nn \c__letgut_number_sep_dim {
- \c__letgut_from_left_boundingbox_to_text_dim
- +
- \c__letgut_number_offset_dim
-}
-\end{lstlisting}
-
-\subsubsection{Skips (lengths with rubber components)}
-\label{sec:orgbda0ae2}
-
-The following skips, borrowed from the standard classes, are specified in
-\lstinline+ex+ unit, which depends on the font used and hence have to be specified
-after the class has been loaded; in fact, we postpone this at the end of the
-preamble, when the font is specified (thanks to \lstinline+\setmainfont+).
-
-\begin{lstlisting}
-\AddToHook{begindocument/before}{%
-\end{lstlisting}
-
-Before and after:
-
-\begin{itemize}
-\item “titles titles”:
-\begin{lstlisting}
-\skip_const:Nn \c__letgut_before_title_title_skip
-{
- 3.5ex plus 1ex minus .2ex
-}
-\skip_const:Nn \c__letgut_after_title_title_skip
-{
- 2.3ex plus .2ex
-}
-\end{lstlisting}
-\item subtitles titles:
-\begin{lstlisting}
-\skip_const:Nn \c__letgut_before_subtitle_title_skip
-{
- \c__letgut_before_title_title_skip
-}
-\skip_const:Nn \c__letgut_after_subtitle_title_skip
-{
- \c__letgut_after_title_title_skip
-}
-\end{lstlisting}
-\item sections titles:
-\begin{lstlisting}
-\skip_const:Nn \c__letgut_before_section_title_skip
-{
- 3.25ex plus 1ex minus .2ex
-}
-\skip_const:Nn \c__letgut_after_section_title_skip
-{
- 1.5ex plus .2ex
-}
-\end{lstlisting}
-\item subsections titles (identical to the sections ones):
-\begin{lstlisting}
-\skip_const:Nn \c__letgut_before_subsection_title_skip
-{
- \c__letgut_before_section_title_skip
-}
-\skip_const:Nn \c__letgut_after_subsection_title_skip
-{
- \c__letgut_after_section_title_skip
-}
-\end{lstlisting}
-\item paragraphs titles:
-\begin{lstlisting}
-\skip_const:Nn \c__letgut_before_subsubsection_title_skip
-{
- 1.5ex plus .5ex minus .2ex
-}
-\skip_const:Nn \c__letgut_after_subsubsection_title_skip
-{
- 0.75ex plus 0.1ex
-}
-\end{lstlisting}
-\item paragraphs titles (identical to the subsubsection ones):
-\begin{lstlisting}
-\skip_const:Nn \c__letgut_before_paragraph_title_skip
-{
- \c__letgut_before_subsubsection_title_skip
-}
-\skip_const:Nn \c__letgut_after_paragraph_title_skip
-{
- \c__letgut_after_subsubsection_title_skip
-}
-\end{lstlisting}
-\item subparagraphs titles (identical to the paragraph ones):
-\begin{lstlisting}
-\skip_const:Nn \c__letgut_before_subparagraph_title_skip
-{
- \c__letgut_before_paragraph_title_skip
-}
-\skip_const:Nn \c__letgut_after_subparagraph_title_skip
-{
- \c__letgut_after_paragraph_title_skip
-}
-\end{lstlisting}
-\end{itemize}
-
-We close the \lstinline+\AddToHook{begindocument/before}+ argument.
-
-\begin{lstlisting}
-}
-\end{lstlisting}
-
-
-\subsubsection{Integers}
-\label{sec:orgb3e9382}
-\begin{lstlisting}
-\int_new:N \g__letgut_ltx_example_int
-\end{lstlisting}
-
-\subsubsection{Strings}
-\label{sec:orgdd18dd8}
-
-\begin{lstlisting}
-\str_new:N \g__letgut_label_ltx_example_str
-\str_new:N \g__letgut_callout_label_ltx_example_str
-\str_const:Nn \c__letgut_label_ltx_example_str {
- __letgut_label_ltx_example
-}
-\str_const:Nn \c__letgut_callout_label_ltx_example_str {
- __letgut_callout_label_ltx_example
-}
-\end{lstlisting}
-
-\subsubsection{Token lists}
-\label{sec:orgaf6d8ec}
-
-\begin{enumerate}
-\item Constant ones
-\label{sec:orgb1ea800}
-
-\begin{lstlisting}
-\tl_const:Nn \c__letgut_cahier_tl { \emph{ Cahier } }
-\tl_const:Nn \c__letgut_cahiers_tl {
- \c__letgut_cahier_tl \emph{ s }
-}
-\tl_const:Nn \c__letgut_tugboat_tl { \emph{ TUGboat } }
-\tl_const:Nn \c__letgut_banner_file_tl { bandeau }
-\tl_const:Nn \c__letgut_editorial_file_tl { editorial }
-\tl_const:Nn \c__letgut_informations_gutenberg_file_tl {
- informations-gut
-}
-\tl_const:Nn \c__letgut_acronyms_file_tl { letgut-acronyms }
-\tl_const:Nn \c__letgut_local_config_file_tl { localconf }
-\tl_const:Nn \c__letgut_contents_name_tl { Sommaire }
-\tl_const:Nn \c__letgut_draftwatermark_text_tl {
- \textnormal{Brouillon}
-}
-\tl_const:Nn \c__letgut_membership_reminder_tl {
- {\LARGE
- \bfseries
- Avez-vous~ pensé~ à~ régler~ votre~ cotisation~ ?
- % \the\year~ ?
- \par
- \medskip
- }
- Si~ vous~ avez~ oublié,~ ce~ n'est~ ni~ trop~ tard~
- ni~ difficile~ :
- \par
- \url{http://gutenberg.eu.org/?Adherer-en-ligne}
- \bool_if:NT \g__letgut_informations_bool {
- \file_if_exist:nT
- {./\c__letgut_informations_gutenberg_file_tl}{
- \par
- Voir~ aussi~ page~ \pageref{letgut_label_adhesions}.
- }
- }
-}
-\tl_const:Nn \c__letgut_missing_editorial_tl {
- Ne~ pas~ omettre~ l'éditorial~ !\\(à~ faire~ figurer~
- dans~ un~ \file*{\c__letgut_editorial_file_tl.tex}~
- dans~ le~ dossier~ courant)
-}
-\tl_const:Nn \c__letgut_missing_infomations_tl {
- Ne~ pas~ omettre~ les~ informations~ sur~
- \c__letgut_gutenberg_tl{}~ !\\(dans~ un~
- \file*{\c__letgut_informations_gutenberg_file_tl.tex}~
- situé~ dans~ le~ dossier~ courant)
-}
-\tl_const:Nn \c__letgut_default_alert_box_color_tl {
- gray9
-}
-\tl_const:Nn \c__letgut_default_allcolors_links_color_tl
-{
- teal!60!black
-}
-\end{lstlisting}
-
-\item Variables ones
-\label{sec:org4c5e60d}
-
-\begin{lstlisting}
-\tl_new:N \g__letgut_mark_tl
-\tl_new:N \g__letgut_title_tl
-\tl_new:N \l_letgut_last_name_tl
-\tl_new:N \l_letgut_first_name_tl
-\tl_new:N \l_letgut_title_tl
-\tl_new:N \l__letgut_title_addon_tl
-\tl_new:N \l__letgut_reference_text_tl
-\end{lstlisting}
-\end{enumerate}
-
-\subsubsection{Comma separated lists}
-\label{sec:org158b7a3}
-
-\begin{lstlisting}
-\clist_new:N \g__letgut_pagecolor_clist
-\clist_const:Nn \c__letgut_default_pagecolor_screen_clist
-{1.0, 0.98, 0.94}
-\clist_const:Nn \c__letgut_default_pagecolor_paper_clist
-{1, 1, 1}
-\end{lstlisting}
-
-\subsubsection{Sequences}
-\label{sec:orgaa04440}
-
-\begin{lstlisting}
-\seq_new:N \l__letgut_first_last_names_items_seq
-\end{lstlisting}
-
-\subsection{Class options}
-\label{sec:orgef3017c}
-
-In order to provide class options, we load the \package{l3keys2e} which provides
-\LaTeXe{} option processing using \LaTeX3 keys:
-
-\begin{lstlisting}
-\RequirePackage{l3keys2e}
-\end{lstlisting}
-
-We define the 2 load time options for the target audience:
-
-\begin{itemize}
-\item \lstinline+for-readers+ (the default), for the “normal” “Lettre”,
-\item \lstinline+for-authors+, (only) the author(s) of an article of the “Lettre”.
-\end{itemize}
-
-\begin{lstlisting}
-\keys_define:nn { letgut }
-{
- , for-readers .bool_gset:N = \g__letgut_for_readers_bool
- , for-readers .initial:n = { true }
- , for-readers .default:n = { true }
- , for-authors .bool_gset_inverse:N = \g__letgut_for_readers_bool
-}
-\ProcessKeysOptions { letgut }
-\end{lstlisting}
-
-\subsection{Class and package loading}
-\label{sec:org464c4b7}
-
-The \letgutcls{} is based on the \lstinline+article+ class. It is by default two sided
-because of the alternating headers, and will by typeset with \lstinline+11pt+ as global
-font size.
-
-\begin{lstlisting}
-\LoadClass[twoside,11pt]{article}
-\end{lstlisting}
-
-We now load some packages.
-
-\begin{itemize}
-\item The \letgutcls{} will have to be used with LuaLaTeX. Hence the font selection
-package for XeLaTeX and LuaLaTeX.
-\begin{lstlisting}
-\RequirePackage{fontspec}
-\end{lstlisting}
-\item For subliminal refinements towards typographical perfection.
-\begin{lstlisting}
-\RequirePackage[
-, stretch=30
-, shrink=25
-, letterspace=150
-]{microtype}
-\end{lstlisting}
-\item Help in implementing paragraph layouts where the paragraphs are separated by
-a vertical space instead of (or in addition to) indenting them.
-\begin{lstlisting}
-\RequirePackage{parskip}
-\end{lstlisting}
-\item Extensive control of page headers and footers in \LaTeXe.
-\begin{lstlisting}
-\RequirePackage{fancyhdr}
-\end{lstlisting}
-\item Flexible and complete interface to document dimensions.
-\begin{lstlisting}
-\RequirePackage[a4paper]{geometry}
-\end{lstlisting}
-\item Enhanced support for graphics.
-\begin{lstlisting}
-\RequirePackage{graphicx}
-\end{lstlisting}
-\item Extending the array and tabular environments.
-\begin{lstlisting}
-\RequirePackage{array}
-\end{lstlisting}
-\item Completely customisable TOCs.
-\begin{lstlisting}
-\RequirePackage{etoc}
-\end{lstlisting}
-\item Control layout of itemize, enumerate, description, and design our own lists.
-\begin{lstlisting}
-\RequirePackage{enumitem}
-\end{lstlisting}
-\item Select alternative section titles.
-\begin{lstlisting}
-\RequirePackage{titlesec}
-\end{lstlisting}
-\item Several logos and ornaments.
-\begin{lstlisting}
-\RequirePackage{fourier-orns}
-\end{lstlisting}
-\item Control float placement.
-\begin{lstlisting}
-\RequirePackage[section,above]{placeins}
-\end{lstlisting}
-\item Sophisticated verbatim text.
-\begin{lstlisting}
-\RequirePackage{fancyvrb}
-\end{lstlisting}
-\item Publication quality tables in \LaTeX{}.
-\begin{lstlisting}
-\RequirePackage{booktabs}
-\end{lstlisting}
-\item Context sensitive quotation facilities.
-\begin{lstlisting}
-\RequirePackage{csquotes}
-\end{lstlisting}
-\item Mathematical tools to use with (and which loads) \package{amsmath}.
-\begin{lstlisting}
-\RequirePackage[fleqn]{mathtools}
-\end{lstlisting}
-\item Better accessibility support for PDF files. This package is used because we
-want the material added to the background (banner on the first page and draft
-watermark) to be not selectable in order to let the reader who wants to copy
-the interesting text be able to select it.
-\end{itemize}
-\begin{lstlisting}
-\RequirePackage{accsupp}
-\end{lstlisting}
-\begin{itemize}
-\item A comprehensive (SI) units package.
-\begin{lstlisting}
-\RequirePackage{siunitx}
-\end{lstlisting}
-\item A collection of logos with bookmark support.
-\begin{lstlisting}
-\RequirePackage{hologo}
-\end{lstlisting}
-\item Driver-independent color extensions.
-\begin{lstlisting}
-\RequirePackage[table]{xcolor}
-\end{lstlisting}
-\item Coloured boxes, for \LaTeX{} examples and theorems, etc.
-\begin{lstlisting}
-\RequirePackage{tcolorbox}
-\end{lstlisting}
-\item Expandable macros to extract the data from references and allow counter
-assignments or calculations.
-\begin{lstlisting}
-\RequirePackage{refcount}
-\end{lstlisting}
-\item Select colors with proper WCAG color contrast.
-\begin{lstlisting}
-\RequirePackage{ninecolors}
-\end{lstlisting}
-\item Typeset tabulars and arrays with LaTeX3 (for the alert boxes typeset as
-simple tabulars).
-\begin{lstlisting}
-\RequirePackage{tabularray}
-\end{lstlisting}
-\item Multilingual support for Plain \TeX{} or \LaTeX{}.
-\begin{lstlisting}
-\RequirePackage[english,french]{babel}
-\end{lstlisting}
-\item Intelligent page references.
-\begin{lstlisting}
-\RequirePackage[nospace,french]{varioref}
-\end{lstlisting}
-\item Macros for Euro sign.
-\begin{lstlisting}
-\RequirePackage[right]{eurosym}
-\end{lstlisting}
-\item Typeset source code listings using \LaTeX{}.
-\begin{lstlisting}
-\RequirePackage{listings}
-\end{lstlisting}
-\item Modifying the layout of floats.
-\begin{lstlisting}
-\RequirePackage{floatrow}
-\end{lstlisting}
-\item Sophisticated Bibliographies in \LaTeX{}.
-\begin{lstlisting}
-\RequirePackage[
- sorting=none,
- datamodel=letgut,
- citestyle=letgut
-]{biblatex}
-\end{lstlisting}
-\item Typeset acronyms.
-\begin{lstlisting}
-\RequirePackage{acro}
-\end{lstlisting}
-\end{itemize}
-
-The following packages have to be the last ones loaded. So we ensure this by
-loading them just before the begining of the document:
-\begin{lstlisting}
-\AddToHook{begindocument/before}{
-\end{lstlisting}
-\begin{itemize}
-\item Extensive support for hypertext in \LaTeX{}
-\begin{lstlisting}
-\RequirePackage{hyperref}
-\end{lstlisting}
-\item Adjusting the anchors of captions
-\begin{lstlisting}
-\RequirePackage[all]{hypcap}
-\end{lstlisting}
-\item Intelligent cross-referencing
-\begin{lstlisting}
-\RequirePackage[french]{cleveref}
-\end{lstlisting}
-\end{itemize}
-We close the \lstinline+\AddToHook{begindocument/before}+ argument.
-\begin{lstlisting}
-}
-\end{lstlisting}
-
-\subsection{Settings for the loaded packages}
-\label{sec:orgbefd239}
-
-\begin{itemize}
-\item We switch to the French typographic conventions for \package{siunitx}.
-\begin{lstlisting}
-\sisetup{
- , locale=FR
- , mode=text
-}
-\end{lstlisting}
-\item Concerning floats, we ask:
-\begin{itemize}
-\item the caption text will be justified,
-\item the figures and their captions to be boxed (in order to distiguish them from
-the current text),
-\item the tables to have their captions above them.
-\begin{lstlisting}
-\DeclareMarginSet{hangleft}{
- \setfloatmargins{\hskip-\c__letgut_hoffset_dim}{\hfil}
-}
-\DeclareFloatVCode{__letgut_ruleabove}{
- \par\rule{\hsize}{.8pt}\vskip4pt\par
- }
-\DeclareFloatVCode{__letgut_rulebelow}{
- \par\vskip2pt\rule{\hsize}{.8pt}\par
-}
-\DeclareFloatStyle{__letgut_ruled}{
- precode=__letgut_ruleabove,
- postcode=__letgut_rulebelow,
- % heightadjust=all,
- floatwidth=.8\linewidth
-}
-\floatsetup{objectset=justified}
-\floatsetup[figure]{
- style=__letgut_ruled,
- margins=hangleft,
- capposition=beside,
- capbesideposition={top,left},
- floatwidth=0.85\textwidth
-}
-\floatsetup[table]{capposition=top}
-\end{lstlisting}
-\end{itemize}
-Moreover, the tables will be entitled \enquote{tableau} instead of
-\enquote{table}.
-\begin{lstlisting}
-\renewcommand*\frenchtablename{Tableau}
-\end{lstlisting}
-\item We fix some defaults for the listings : we define a style for all the listings
-which resets all the \TeX{} control sequences/keywords and then load all the
-basic (La)\TeX{} dialects of \TeX{}. But we start with a dialect which is missing in
-the \package*{listings}.
-\begin{lstlisting}
-\lstdefinelanguage[classes]{TeX}[LaTeX]{TeX}{%
- % Control sequences
- moretexcs={%
- abovecaptionskip,abstractname,appendix,appendixname,
- arraycolsep,arrayrulewidth,author,backmatter,baselinestretch,
- belowcaptionskip,bf,bibindent,bibname,bigskipamount,
- bottomfraction,brokenpenalty,cal,chapter,chaptermark,
- chaptername,clubpenalty,columnsep,columnseprule,contentsname,
- date,dblfloatpagefraction,dblfloatsep,dbltextfloatsep,
- dbltopfraction,descriptionlabel,displaywidowpenalty,
- doublerulesep,evensidemargin,fboxrule,fboxsep,figurename,
- floatpagefraction,floatsep,footins,footnoterule,footnotesep,
- footnotesize,footskip,frontmatter,headheight,headsep,huge,Huge,
- indexname,indexspace,interlinepenalty,intextsep,it,jot,
- labelenumi,labelenumii,labelenumiii,labelenumiv,labelitemfont,
- labelitemi,labelitemii,labelitemiii,labelitemiv,labelsep,
- labelwidth,large,Large,LARGE,leftmargin,leftmargini,
- leftmarginii,leftmarginiii,leftmarginiv,leftmarginv,
- leftmarginvi,lineskip,listfigurename,listoffigures,
- listoftables,listtablename,mainmatter,maketitle,marginparpush,
- marginparsep,marginparwidth,maxdepth,medskipamount,mit,
- newblock,normallineskip,normalsize,oddsidemargin,paragraph,
- paragraphmark,parindent,parskip,part,partname,partopsep,
- postdisplaypenalty,predisplaypenalty,refname,rm,sc,scriptsize,
- section,sectionmark,sf,sl,small,smallskipamount,subitem,
- subparagraph,subparagraphmark,subsection,subsectionmark,
- subsubitem,subsubsection,subsubsectionmark,tabbingsep,
- tabcolsep,tablename,tableofcontents,textfloatsep,textfraction,
- textheight,textwidth,thechapter,theenumi,theenumii,theenumiii,
- theenumiv,theequation,theparagraph,thepart,thesection,
- thesubparagraph,thesubsection,thesubsubsection,tiny,title,
- today,topfraction,topmargin,topskip,tt,widowpenalty,
- },%
- % Keywords of class 1 : keywords that contain other characters
- % (since of the same class as the ones specified as
- % 'otherkeywords')
- morekeywords={%
- %
- },%
- % Keywords of class 2 : environments names
- morekeywords=[2]{%
- abstract,description,figure,quotation,quote,table,
- thebibliography,theindex,titlepage,verse%
- },%
- % Keywords of class 3 : mandatory arguments (not environments)
- % & optional arguments which are keys (in key=value)
- morekeywords=[3]{%
- },%
- % Keywords of class 4 : values of keys (in key=value)
- morekeywords=[4]{%
- },%
- % Keywords of class 5 : arguments specifications (after “:”
- % in expl3 syntax)
- morekeywords=[5]{%
- },%
- % Keywords of class 6 : current package name (and possibly
- % derived packages)
- morekeywords=[6]{%
- a0poster,aalok,aastex631,abntex2,achemso,acmart,acmconf,
- active-conf,adfathesis,afparticle,afthesis,aguplus,aiaa-tc,
- akklecture,akkscript,akktecdoc,akletter,myletter,ametsoc,
- amsart,amsbook,amsdtx,amsldoc,amsproc,aomart,apa,apa6,
- apa6e,apa7,arabart,arabbook,arabrep,arabrep1,articleingud,
- asaetr,ascelike,asmeconf,asmejour,assignment,aucklandthesis,
- bangorcsthesis,bangorexam,barticle,bbook,bletter,
- bankstatement,article,book,letter,ltnews,ltxdoc,ltxguide,
- minimal,proc,report,slides,source2edoc,basque-book,beamer,
- beamerswitch,beaulivre,beilstein,argetabelle,bewerbung,
- bgteubner,BHCexam,bitart,bitbook,bjfuthesis,BMSTU-IU8,
- bookcover,bookest,bookshelf,br-lex,brandeis-dissertation,
- brandeis-problemset,brandeis-thesis,buctcover,buctthesis,
- bxjsarticle,bxjsbook,bxjsreport,bxjsslide,cascadilla,cd,
- cd-cover,articoletteracdp,letteracdp,cesenaexam,cheatsheet,
- chemmacros-manual,chletter,cje,cnbwp,cnltx-doc,codedoc,
- colorart,colorbook,combine,cc,ConcProg,confproc,contracard,
- courseoutline,coursepaper,cquthesis,csbulletin,csbulobalka,
- csbulv1,ctexart,ctexbeamer,ctexbook,ctexrep,ctxdoc,curve,
- cv4tw,cweb,idcc,ijdc-v14,ijdc-v9,dinbrief,disser,gost732,
- dithesis,droit-fr,dtk,dvdcoll,easybook,ebsthesis,agecon,
- ajae,apecon,ecca,erae,itaxpf,jrurstud,njf,oegatb,pocoec,
- regstud,worlddev,ecv,einfart,ejpecp,elbioimp,elegantbook,
- elegantnote,elegantpaper,elpres,cas-dc,cas-sc,elsarticle,
- elteikthesis,emisa,emulateapj,erdc,eskd,eskdgraph,eskdtab,
- eskdtext,estcpmm,europasscv,europecv,exam,exam-n,examdesign,
- exesheet,extarticle,extbook,extletter,extproc,extreport,
- facsimile,factura,fancyhandout,fancyslides,fbithesis,fcavtex,
- fdudoc,fduthesis-en,fduthesis,fei,ffslides,fithesis,
- fithesis2,fithesis3,fithesis4,flacards,flashcards,frletter,
- g-brief,g-brief2,gaceta,gammas,gatech-thesis,gmdocc,
- gradstudentresume,grant-afosr,grant-aro,grant-darpa,grant-doe,
- grant-nih,grant-nrl,grant-nsf,grant-onr,grant,graphpaper,
- gridslides,gsemthesis,guitartabs,gzt,gztarticle,h2020proposal,
- hgbarticle,hgbreport,hgbthesis,harnon-cv,hausarbeit-jura,
- hcart,hcletter,hcreport,hcslides,hecthese,hepthesis,hitec,
- hithesis,hitreport,hitszthesis,hletter,hpsdiss,fsbispit,
- huawei,hustthesis,icsv,IEEEconf,IEEEtran,ijmart,ijsra,
- image-gallery,IMTEKda,inkpaper,invoice-class,iodhbwm,iscram,
- isov2,isodoc,iwhdp,jacow,jlreq,jmlr,jmlrbook,jnuexam,jpsj2,
- jura,jurabook,juraovw,juraurtl,kdgcoursetext,kdgmasterthesis,
- kdpcover,kerntest,kluwer,knittingpattern,scrartcl,scrarticle,
- scrbook,scrdoc,scrletter,scrlttr2,scrreport,scrreprt,komacv,
- oblivoir-utf,oblivoir-xl,oblivoir,xoblivoir,ksp-thesis,l3doc,
- labbook,leadsheet,leaflet,lebhart,lectures,letgut,lettre,limap,
- limecv,lion-msc,lni,lps,lt3graph-packagedoc,ltxdockit,
- ltxguidex,abstbook,beletter,flashcard,iagproc,cours,fiche,
- matapli,matc3mem,mcmthesis,ltxmdf,medstarbeamer,meetingmins,
- memoir,mensa-tex,mentis,metanorma,milog,minimart,minimbook,
- mla,mluexercise,mnras,moderncv,modernposter,msu-thesis,
- mucproc,mugsthesis,muling,musuos,muthesis,third-rep,mwart,
- mwbk,mwrep,mycv,nature,ncc,nccproc,sibjnm,nddiss2e,
- ndsu-thesis,newlfm,nih,nihbiosketch,njurepo,nlctdoc,nostarch,
- nrc1,nrc2,artikel1,artikel2,artikel3,boek,boek3,brief,
- rapport1,rapport3,nwejm,nwejmart,octavo,onrannual,
- oup-authoring-template,journal,paper,papertex,pbsheet,pecha,
- petiteannonce,philosophersimprint,pittetd,pkuthss,plari,play,
- postcards,powerdot,FUpowerdot,ppr-prv,pracjourn,pressrelease,
- proposal,reporting,dfgproposal,dfgreporting,euproposal,
- eureporting,prosper,protocol,prtec,upmgr,wkmgr,pst-doc,
- ptptex,qcm,quantumarticle,qyxf-book,ReadableCV,recipe,
- RecipeBook,recipecard,refart,refrep,resphilosophica,revtex4-2,
- revtex4,revtex4-1,rtklage,ryersonSGSThesis,ryethesis,sageep,
- sapthesis,schuleab,schulein,schuleit,schulekl,schuleub,
- schuleue,schullsg,schullzk,schulma-ab,schulma-gutachten,
- schulma-klausur,schulma-komp,schulma-mdlprf,schulma-praes,
- schwalbe,sciposter,screenplay,scrjrnl,sdapsclassic,sduthesis,
- seminar,semproc,sesamanuel,seuthesix,sffms,cassete,etiketka,
- shtthesis,caesar_book,sides,simplecv,simplivre,skbarticle,
- skbbeamer,skbbook,skblncsbeamer,skblncsppt,skbmoderncv,skdoc,
- skeyval-testclass,skrapport,smfart,smfbook,SPhdThesis,spie,
- sr-vorl,sslides,stage,standalone,usthesis,hwexam,mikoslides,
- omdoc,smglom,subfiles,suftesi,sugconf,tabriz-thesis,talk,
- tcldoc,tclldoc,powersem,thesis-ekf,thesis-gwu,thuthesis,
- tikz-kalender,tikzposter,tlc-article,TOPletter,toptesi,
- tudabeamer,tudaexercise,tudaleaflet,tudaletter,tudaposter,
- tudapub,tudasciposter,tudscrartcl,tudscrbook,tudscrdoc,
- tudscrmanual,tudscrposter,tudscrreprt,tufte-book,tufte-handout,
- ltugboat,ltugproc,tui,turabian,turabian-researchpaper,
- turabian-thesis,my-thesis,ua-thesis,uafthesis,
- uantwerpenbamathesis,uantwerpencoursetext,uantwerpenexam,
- uantwerpenletter,uantwerpenphdthesis,uantwerpenreport,
- ucalgmthesis,ucbthesis,ucdavisthesis,ucsmonograph,ucthesis,
- udesoftec,uebungsblatt,uestcthesis,uhhassignment,uiucredborder,
- uiucthesis,ulthese,legislation,umich-thesis,umthesis,
- unam-thesis,unifith,unitn-bimrep,univie-ling-expose,
- univie-ling-paper,univie-ling-thesis,univie-ling-wlg,
- unizgklasa,uothesis,UoWthesis,upmethodology-document,URbeamer,
- URletter,uspatent,ut-thesis,utexasthesis,uwmslide,uwthesis,
- verifica,webquiz,willowtreebook,withargs-packagedoc,
- wsemclassic,xduthesis,xebaposter,xmuthesis,xsim-manual,
- yaletter,yathesis,ycbook,ydoc,york-thesis,
- },%
- otherkeywords={},%
- alsoletter={0123456789-},%
- alsodigit={},%
- sensitive%
-}[keywords,tex,comments]%
-\end{lstlisting}
-
-\begin{lstlisting}
-\lstdefinestyle{__letgut_all_reset}{
- basicstyle=\ttfamily,
- language=TeX,%
- texcs={},%
- keywords={},%
- keywords=[2]{},%
- keywords=[3]{},%
- keywords=[4]{},%
- keywords=[5]{},%
- otherkeywords={},%
- alsoletter={},%
- alsodigit={},%
- alsolanguage=[AlLaTeX]TeX,%
- alsolanguage=[LaTeX]TeX,%
- alsolanguage=[plain]TeX,%
- alsolanguage=[common]TeX,%
- alsolanguage=[primitive]TeX,%
- alsolanguage=[classes]TeX,%
-\end{lstlisting}
-Because of a current issue involving \package{parskip} and
-\package{listings}
-(\url{https://github.com/FrankMittelbach/fmitex-parskip/issues/3}), we have to
-set the skip below the displayed listings to a zero length.
-\begin{lstlisting}
-belowskip=0pt,
-}
-\lstset{
- style=__letgut_all_reset
-}
-\end{lstlisting}
-This style is applied automatically at the beginning of each \lstinline+\input+
-file. Hence, the keywords defined in a previous file (by loading some
-peticular (La)\TeX{} dialects, i.e. control sequences and keywords specific to
-some class or packages) won't interfere with the ones of the current file.
-\begin{lstlisting}
-\AddToHook{cmd/input/before}{
- \lstset{%
- style=__letgut_all_reset,%
- }
-}
-\end{lstlisting}
-\item The \lstinline+\printbibliography+ command is redefined in order its \lstinline+heading+ is by
-default set to \lstinline+subbibliography+.
-\begin{lstlisting}
-\NewCommandCopy{\__letgut_old_printbibliography}{
- \printbibliography
-}
-\RenewDocumentCommand {\printbibliography} { O{} } {
- \phantomsection
- \__letgut_old_printbibliography[#1]
-}
-\end{lstlisting}
- For printing the bibliography, we define two new bibheadings for the
-structure levels \lstinline+\title+ and \lstinline+\subtitle+.
-\begin{lstlisting}
-\defbibheading{title}[\refname]{%
- \title{#1}}
-\defbibheading{subtitle}[\refname]{%
- \subtitle{#1}}
-\end{lstlisting}
-\item The acronyms will be typset in footnote, with small caps shape. When they are
-(English) foreign, it will be specified and the translation will be added.
-\begin{lstlisting}
-\acsetup{
- first-style=footnote,
- format/short = {\scshape},
- format/foreign = {\em},
- foreign/display,
- locale/format = {\upshape},
- locale/display,
-}
-\end{lstlisting}
- Moreover, we redefine the private macro \lstinline+\acro_footnote:n+ of the
-\package*{acro} in order to make the footnotes displaying the long forms of the
-acronyms ended by a period (like ordinary footnotes).
-\begin{lstlisting}
-\cs_undefine:N \acro_footnote:n
-\cs_new_protected:Npn \acro_footnote:n #1
-{
- \tl_set:Ne \l__acro_tmpa_tl {
- \l__acro_fnpct_check_tl
- }
- \exp_last_unbraced:Nno
- \footnote {#1.}
- \l__acro_tmpa_tl
-}
-\end{lstlisting}
-
-The following settings for packages that have to be the last ones loaded are
-also done just before the begining of the document.
-\end{itemize}
-
-\begin{lstlisting}
-\AddToHook{begindocument/before}{
-\end{lstlisting}
-
-\begin{itemize}
-\item We want the hyperlinks to be as unobtrusive as possible.
-\begin{lstlisting}
-\bool_if:NTF \g__letgut_paper_bool {
- \hypersetup{draft}
-}{
- \hypersetup{%
- colorlinks,%
- allcolors={letgut_allcolors_links},%
- }%
-}
-\end{lstlisting}
-
-A preset of acronyms is input (if found).
-\begin{lstlisting}
-\file_if_exist:nT {\c__letgut_acronyms_file_tl}{
- \file_input:n {\c__letgut_acronyms_file_tl}
-}
-\end{lstlisting}
-
-\item Depending on some chosen class options, some packages have to be loaded,
-notably before \package*{hyperref} is loaded, and actions are taken
-accordingly.
-\begin{itemize}
-\item If the `draft` mode (default) is on, we load the \package*{lua-typo} which
-highlights typographical flaws with LuaLaTeX. For the moment,
-
-the \package*{lua-typo} isn't loaded since the `luacolor`
-package it loads
-
-currently does not work well in \lstinline+shipout/background+ (see
-\url{https://github.com/ho-tex/luacolor/issues/4}).
-\begin{lstlisting}
-% % \bool_if:NF \g__letgut_paper_bool {
-\bool_if:NT \g__letgut_draft_bool {
- % \RequirePackage[All]{lua-typo}
- \AddToHook{shipout/background}
- {
- \__letgut_unselectable:n {
- \put(0.5\paperwidth,-0.5\paperheight)
- {
- \Huge
-\end{lstlisting}
-Currently, we can't use \package{l3color}'s \lstinline+\color_fill:n+\footnote{See \url{https://github.com/ho-tex/luacolor/issues/4\#issuecomment-848774260}.}
-and we have to rely on \package{xcolor}'s \lstinline+\color+.
-\begin{lstlisting}
-% \color_fill:n {black!10}
-\color{black!10}
-\hbox_set:Nn \l_tmpa_box {
- \fontsize{0.25\paperwidth}{0.3\paperwidth}
- \selectfont
- \c__letgut_draftwatermark_text_tl
-}
-\hbox_set:Nn \l_tmpb_box {
- \hbox_overlap_center:n {
- \box_use:N \l_tmpa_box
- }
-}
-\end{lstlisting}
-The draft watermak is rotated in order to be parallely slanted to the first
-diagonal of the page (angle \(=\arctan(\text{paper height}/\text{paper
- width})\)).
-\begin{lstlisting}
-\box_rotate:Nn \l_tmpb_box {
- \fp_eval:n {
- atand (
- \dim_to_fp:n {\paperheight}
- /
- \dim_to_fp:n {\paperwidth}
- )
- }
-}
-\box_use:N \l_tmpb_box
-}
-}
-}
-\end{lstlisting}
- Moreover, we want all the overfull boxes to be shown (as with
-\lstinline+draft+ option of the standard classes).
-\begin{lstlisting}
-\setlength\overfullrule{5pt}
-}
-% % }
-\end{lstlisting}
-\end{itemize}
-\end{itemize}
-
-We close the \lstinline+\AddToHook{begindocument/before}+ argument.
-
-\begin{lstlisting}
-}
-\end{lstlisting}
-
-\subsection{Date handling}
-\label{sec:org5c102e6}
-
-\begin{lstlisting}
-\int_new:N \g__letgut_date_month_int
-\int_new:N \g__letgut_date_year_int
-
-\int_gset:Nn \g__letgut_date_month_int {\the\month}
-\int_gset:Nn \g__letgut_date_year_int {\the\year}
-
-\tl_new:N \g__letgut_date_month_tl
-\tl_new:N \g__letgut_date_tl
-
-\cs_new_protected:Npn \__letgut_date_parse:n #1
-{
- \__letgut_if_is_iso_date:nTF {#1}
- {
- \__letgut_date_parse:www #1 \q_stop
- }{
- \msg_term:nnn{letgut}{Not~month~iso~date}{#1}
- \tl_gset:Nn \g__letgut_date_tl { #1 }
- }
-}
-
-\prg_new_protected_conditional:Npnn
-\__letgut_if_is_iso_date:n #1 { T, F, TF }
-{
- \regex_match:nnTF { ^\d{4}-(\d{1,2}) } {#1}
- { \prg_return_true: }
- { \prg_return_false: }
-}
-
-\prg_new_protected_conditional:Npnn
-\__letgut_if_is_int:n #1 { T, F, TF }
-{
- \regex_match:nnTF { ^[\+\-]?[\d]+$ } {#1}
- { \prg_return_true: }
- { \prg_return_false: }
-}
-
-\cs_new_protected:Npn \__letgut_month_name:n #1
-{
- % \text_titlecase_first:n {
- \int_case:nnF
- { #1 }
- {
- { 1 }{ janvier }
- { 2 }{ février }
- { 3 }{ mars }
- { 4 }{ avril }
- { 5 }{ mai }
- { 6 }{ juin }
- { 7 }{ juillet }
- { 8 }{ août }
- { 9 }{ septembre }
- { 10 }{ octobre }
- { 11 }{ novembre }
- { 12 }{ décembre }
- }
- { Month~ Error! }
- % }
-}
-
-\cs_new_protected:Npn \__letgut_date_parse:www #1-#2
-\q_stop
-{
- \int_compare:nTF
- {
- \the\year <= #1 <= \the\year+1
-\end{lstlisting}
-
-\begin{lstlisting}
-}{
- \int_gset:Nn \g__letgut_date_year_int {#1}
-}{
- \int_gset:Nn \g__letgut_date_year_int {\the\year}
-}
-\__letgut_if_is_int:nTF {#2}
-{
- \int_compare:nTF
- {
- 1 <= #2 <= 12
-\end{lstlisting}
-
-\begin{lstlisting}
- }
- {\int_gset:Nn \g__letgut_date_month_int {#2}}
- {\int_gset:Nn \g__letgut_date_month_int {\the\month}}
- }{
- \int_gset:Nn \g__letgut_date_month_int {\the\month}
- }
- \tl_gset:Nn \g__letgut_date_month_tl {
- \__letgut_month_name:n { \g__letgut_date_month_int }
- }
- \tl_gset:Nn \g__letgut_date_tl {
- \tl_use:N \g__letgut_date_month_tl
- \c_space_tl
- \int_use:N \g__letgut_date_year_int
- }
-}
-\end{lstlisting}
-
-\subsection{Page color default settings}
-\label{sec:orgbdbe3de}
-
-By default, the page color will be the one linked to the \lstinline+screen+ option.
-
-\begin{lstlisting}
-\pagecolor[rgb]{\c__letgut_default_pagecolor_screen_clist}
-\clist_set_eq:NN \g__letgut_pagecolor_clist
- \c__letgut_default_pagecolor_screen_clist
-\end{lstlisting}
-
-\subsection{Options}
-\label{sec:orgc4ef889}
-
-These options look to need to be specified rather at the end (throws an error if
-defined before the \lstinline+\__letgut_date_parse:n+'s definition):
-
-\begin{itemize}
-\item \lstinline+number+ for the number of the issue,
-\item \lstinline+date+ for the date of the issue, either empty (hence the current (month)
-date) or at the format \lstinline+YYYY-MM+ or as free input,
-\item \lstinline+pagecolor+ (relevant only with the (default) \lstinline+screen+ load time option) for
-a color of the page other than the default one,
-\item \lstinline+membership-reminder+ that typesets a membership reminder on the first page,
-\end{itemize}
-
-\begin{lstlisting}
-\keys_define:nn { letgut/setup }
-{
- , draft .bool_gset:N = \g__letgut_draft_bool
- , draft .initial:n = { true }
- , draft .default:n = { true }
- , final .bool_gset_inverse:N = \g__letgut_draft_bool
- , number .int_gset:N = \g__letgut_number_int
- , date .code:n = { \__letgut_date_parse:n { #1 } }
- , date .initial:x = {\the\year-\the\month}
- , paper .code:n = {
- \bool_gset_true:N \g__letgut_paper_bool
- \pagecolor[rgb]{\c__letgut_default_pagecolor_paper_clist}
- \clist_set_eq:NN \g__letgut_pagecolor_clist
- \c__letgut_default_pagecolor_paper_clist
- }
- , screen .bool_gset_inverse:N = \g__letgut_paper_bool
- , pagecolor .initial:V
- = \c__letgut_default_pagecolor_screen_clist
- , pagecolor .code:n = {
- \definecolor{letgut_pagecolor}{rgb}{#1}
- \AddToHook{begindocument/before}
- {
- \bool_if:NTF \g__letgut_paper_bool {
- \msg_warning:nnn{letgut}{
- pagecolor~inoperative~with~paper~option
- }{#1}
- }{
- \clist_gset:Nn \g__letgut_pagecolor_clist { #1 }
- \pagecolor[rgb]{#1}
- }
- }
- }
- , allcolorslinks .code:n = {
- \colorlet{letgut_allcolors_links}{#1}}
- , allcolorslinks .initial:V
- = \c__letgut_default_allcolors_links_color_tl
- , membership-reminder .bool_gset:N
- = \g__letgut_membership_reminder_bool
- , membership-reminder .initial:n = { true }
- , editorial .bool_gset:N = \g__letgut_editorial_bool
- , editorial .initial:n = { true }
- , informations .bool_gset:N = \g__letgut_informations_bool
- , informations .initial:n = { true }
-}
-\end{lstlisting}
-
-\subsection{Headers}
-\label{sec:org0244c68}
-
-We now define the headers.
-
-\begin{itemize}
-\item The distance between the baseline of the header text and the decorative line
-in the header is made a little bit bigger.
-\begin{lstlisting}
-\renewcommand{\headruleskip}{
- \c__letgut_head_rule_skip_dim
-}
-\end{lstlisting}
-\item The decorative line width in the header is made a little bit bigger.
-\begin{lstlisting}
-\renewcommand{\headrulewidth}{
- \c__letgut_head_rule_width_dim
-}
-\end{lstlisting}
-\item The headers alternate between even and odd pages.
-\begin{lstlisting}
-\fancyhf{}
-\fancyhead[RO,LE]{\thepage}
-\fancyhead[RE,LO]{\g__letgut_mark_tl}
-\end{lstlisting}
-\item The headers are left offset
-\begin{lstlisting}
-\fancyheadoffset[L]{\c__letgut_hoffset_dim}
-\end{lstlisting}
-\item We load the default \package{fancyhdr}'s page style
-\begin{lstlisting}
-\pagestyle{fancy}
-\end{lstlisting}
-\end{itemize}
-
-\subsection{Marginal notes}
-\label{sec:org56c8ec1}
-We want the marginal notes to be in the left margin.
-
-\begin{lstlisting}
-\reversemarginpar
-\end{lstlisting}
-
-\subsection{Table of contents}
-\label{sec:org861e968}
-
-The table of contents is customized:
-
-\begin{itemize}
-\item only the titles of the articles are shown (but the bookmarks have their natural depth):
-\end{itemize}
-\begin{lstlisting}
-\etocsetnexttocdepth{0}
-\end{lstlisting}
-\begin{itemize}
-\item layout:
-\begin{lstlisting}
-\etocsetstyle {section}
-{}
-{\leavevmode\leftskip 2cm\relax}
-{\normalsize%
- \etocname~\dotfill~\etocpage\par
-}
-{}
-\end{lstlisting}
-\item its title is dropped:
-\end{itemize}
-\begin{lstlisting}
-\renewcommand*\frenchcontentsname{}
-\end{lstlisting}
-
-\subsection{Geometry of the document}
-\label{sec:org282c9ab}
-
-\begin{lstlisting}
-\geometry{
- asymmetric,
- textheight=\c__letgut_textheight_dim,
- textwidth=\c__letgut_textwidth_dim,
- lmargin=\c__letgut_lmargin_dim,
- tmargin=\c__letgut_tmargin_dim,
- head=\c__letgut_head_dim,
- headsep=\c__letgut_headsep_dim,
- marginparwidth=\c__letgut_marginparwidth_dim,
- % verbose,
- % showframe
-}
-\end{lstlisting}
-
-\subsection{Alert box}
-\label{sec:org1d5f02b}
-
-\begin{lstlisting}
-\cs_new_protected:Nn \__letgut_alert_box:nn
-{
- \noindent
- \begin{tblr}{
- width=\linewidth,
- rowspec={Q[c,m,#1]},
- colspec={|
-\end{lstlisting}
-
-\begin{lstlisting}
- >{\bfseries}X|
- },
- vlines,
- hlines,
- rowsep=2.5mm,
- colsep=2.5mm
- }
- #2
- \end{tblr}
- \skip_vertical:N \c_zero_dim
-}
-\end{lstlisting}
-
-\subsection{“Title” and marks}
-\label{sec:org7f25fee}
-
-We redefine \lstinline+\@title+ in order to make it empty. Hence we can later test if
-the \lstinline+\title+ has been populated by the user (thanks to \lstinline+\title+) and, if so,
-we will (automatically) display on the first page and headers the provided
-title instead of the number and the date (see below).
-\begin{lstlisting}
-\tl_gclear:N \@title
-\end{lstlisting}
-
-At the end of preamble, we put the \lstinline+\@title+ (empty or populated by the
-user) into \lstinline+\g__letgut_@title_str+ for later tests.
-\begin{lstlisting}
-\AddToHook{begindocument/before}
-{
- \str_set_eq:NN \g__letgut_@title_str \@title
-\end{lstlisting}
-
-The number is added only if it is
-
-\(>0\).
-
-\begin{lstlisting}
-\tl_gset:Nn \g__letgut_title_tl {
- \int_compare:nNnT
- \g__letgut_number_int
-\end{lstlisting}
-
-\begin{lstlisting}
- > \c_zero_int
- {numéro~ \int_use:N\g__letgut_number_int{}~ --~ }
- \g__letgut_date_tl
- }
- \str_if_empty:NTF \g__letgut_@title_str {
- \tl_gset:Nn \g__letgut_mark_tl {
- \textit{\c__letgut_La_lettre_gutenberg_tl}
- }
- }{
- \tl_gset:Nn \g__letgut_mark_tl {
- \g__letgut_@title_str
- }
- }
- \tl_gput_right:Nn \g__letgut_mark_tl {
- ,~\g__letgut_title_tl
- }
-}
-\end{lstlisting}
-
-\subsection{First page handling}
-\label{sec:org30496fe}
-
-The first page is special as it should automatically contain certain elements:
-\begin{itemize}
-\item the banner,
-\item either the number and the date of the issue, or a given title,
-\item the table of contents,
-\item the editorial,
-\item the membership reminder.
-\end{itemize}
-
-The first page is inserted only is the target audience is the readers of the
-Lettre.
-
-\begin{lstlisting}
-\bool_if:NT \g__letgut_for_readers_bool {
-\end{lstlisting}
-
-\begin{lstlisting}
-\file_if_exist:nTF {\c__letgut_banner_file_tl.pdf}{
- \AddToHookNext{shipout/background}
- {
- \begin{picture}(0,0)
- \put(-2cm,-25.275cm){
- \includegraphics[scale=0.96]{
- \c__letgut_banner_file_tl.pdf
- }
- }
- \end{picture}
- }
-}{
-\end{lstlisting}
-
-The \lstinline+pagecolor+ option is possibly set (with \lstinline+\AddToHook{begindocument/before}+)
-and the page color chosen has to be used for the letters of the banner so the
-following code has to be postponed after the former (hence here
-\lstinline+\AddToHook{begindocument}+ and with \lstinline+\AddToHook{begindocument/before}+).
-
-\begin{lstlisting}
- \msg_term:nn{letgut}{Banner~file~not~provided}
- \RequirePackage[pagecolor={\g__letgut_pagecolor_clist}]{
- letgut-banner
- }
-}
-\end{lstlisting}
-
-Here starts what is automatically added at the beginning of the document.
-
-\begin{lstlisting}
-\AddToHook{begindocument/end}
-{
-\end{lstlisting}
-
-\begin{itemize}
-\item If a membership reminder is asked, we create an (alert) box containing the
-corresponding text and reduce the textheight of this page of the height of
-this box.
-\begin{lstlisting}
-\bool_if:NT \g__letgut_membership_reminder_bool {
- \box_new:N \g__letgut_membership_reminder_box
- \vbox_gset:Nn \g__letgut_membership_reminder_box {
- \alertbox []{ \c__letgut_membership_reminder_tl }
- }
- \dim_gset:Nn
- \g__letgut_membership_reminder_box_height_dim {
- \box_ht:N \g__letgut_membership_reminder_box
- }
- \enlargethispage{
- - \g__letgut_membership_reminder_box_height_dim
- }
-}
-\end{lstlisting}
-\item We want the text on the first page to not encroach on the horizontal bar of
-the banner.
-\begin{lstlisting}
-\dim_const:Nn \c__letgut_first_page_shrink_dim {
- \c__letgut_banner_thickness_dim
- +
- \c__letgut_tmargin_dim
- +
- \c__letgut_textheight_dim
- -
- .5\paperheight
- -
- .5\c__letgut_banner_height_dim
-}
-\enlargethispage{
- - \c__letgut_first_page_shrink_dim
-}
-\enlargethispage{
- - \baselineskip
-}
-\end{lstlisting}
-\item If the user has specified a title, we make a (our own) title and use it and
-the possibly provided author(s) for the metadata of the PDF; otherwise we
-display the number and the date of the newsletter.
-\begin{lstlisting}
-\str_if_empty:NTF \g__letgut_@title_str {
- \bool_gset_true:N \g__letgut_title_empty_bool
- \begin{flushright}
- \Huge
- \text_titlecase_first:n { \g__letgut_title_tl }
- \end{flushright}
- \hypersetup{
- pdftitle={
- \c__letgut_Lettre_gutenberg_tl
- \int_compare:nNnT
- \g__letgut_number_int
-\end{lstlisting}
-\end{itemize}
-
-\begin{lstlisting}
- > \c_zero_int
- {
- \c_space_tl~ \int_use:N \g__letgut_number_int
- }
- },
- pdfauthor={
- Association~
- \c__letgut_gutenberg_tl
- \c_space_tl
- (éditeur)
- },
- }
- \vspace*{1cm}
-}{
- \hypersetup{
- pdftitle={\g__letgut_@title_str}
- }
- \tl_if_empty:NF \@author {
- \hypersetup{
- pdfauthor={\@author}
- }
- }
-\end{lstlisting}
-Here, we insert the title, but don't rely on \lstinline+\maketitle+ because it
-lets to \lstinline+\relax+ the command \lstinline+\title+ which is used later as new sectionning
-levels for the titles of the articles of the Lettre. So we emulate the
-intersting part of the \lstinline+\maketitle+ command (borrowed from \file{article.cls}).
-\begin{lstlisting}
-\null
-\vskip 2em%
-\begin{center}%
- \let \footnote \thanks
- {\LARGE \@title \par}%
- \vskip 1.5em%
- {\large
- \lineskip .5em%
- \begin{tabular}[t]{c}%
- \@author
- \end{tabular}\par}%
- \vskip 1em%
- {\large \@date}%
-\end{center}%
-\par
-\vskip 1.5em
-}
-\end{lstlisting}
-\begin{itemize}
-\item No headers on the first page. This has to be inserted after the previous
-(customized) \lstinline+\maketitle+ since this command inserts a \lstinline+\newpage+ which would
-ruin the effort of \lstinline+\thispagestyle{empty}+ if inserted before.
-\begin{lstlisting}
-\thispagestyle{empty}
-\end{lstlisting}
-\item The table of contents is automatically added and has a bookmark entry.
-\begin{lstlisting}
-\pdfbookmark[1]{
- \c__letgut_contents_name_tl
-}{
- \c__letgut_contents_name_tl
-}
-\tableofcontents
-\end{lstlisting}
-Should a title be displayed, the table of contents would be added after it,
-followed by a new page (otherwise, if \lstinline+\title+ used after \lstinline+\begin{document}+
-sees its title on the front page, it will overflow onto the banner).
-\begin{lstlisting}
-\bool_if:NTF \g__letgut_title_empty_bool {
- \vspace*{1.5cm}
-}{
- \newpage
-}
-\end{lstlisting}
-\item Conditionally to the fact the \lstinline+editorial+ option is not set to \lstinline+false+: if the
-\file*{editorial.tex} of the editorial is found, its content is input and
-has a bookmark entry; otherwise, a warning is displayed.
-\begin{lstlisting}
-\bool_if:NTF \g__letgut_editorial_bool {
- \file_if_exist:nTF {./\c__letgut_editorial_file_tl}{
- \RenewDocumentCommand\author{ m } {
- \__letgut_author:n { #1 }
- }
- \pdfbookmark[1]{Éditorial}{
- \c__letgut_editorial_file_tl
- }
- \file_input:n {./\c__letgut_editorial_file_tl}
- % % \int_set:N \l_tmpa_int {\pagenumber}
- % % \int_compare:nNnT \l_tmpa_int = 1 { \newpage }
-\end{lstlisting}
-\end{itemize}
-
-\begin{lstlisting}
- % \if\count{\pagenumber}>1
- % \else
- % \newpage
- % \fi
- }{
- \msg_warning:nn{letgut}{Editorial~file~missing}
- \alertbox{ \c__letgut_missing_editorial_tl }
- \newpage
- }
-}{
- % \newpage
-}
-\end{lstlisting}
-
-We close the \lstinline+\AddToHook{begindocument/end}+ argument.
-
-\begin{lstlisting}
-}
-\end{lstlisting}
-
-Membership reminder.
-
-\begin{lstlisting}
-\AddToHook{begindocument}{
- \bool_if:NT \g__letgut_membership_reminder_bool {
- \AddToHookNext{shipout/background}
- {
- \put(1in,-1in){
- \put(
- \oddsidemargin,
- - \topmargin
- - \headheight
- - \headsep
- - \textheight
- + \c__letgut_first_page_shrink_dim
- + .5\baselineskip
- ){
- \box_use:N \g__letgut_membership_reminder_box
- }
- }
- }
- }
-}
-\end{lstlisting}
-
-\subsection{Last page handling}
-\label{sec:org4d6bc37}
-
-The last page is special: it should automatically contain some informations about
-\gutenberg.
-
-\begin{lstlisting}
-\AddToHook{enddocument}
-{
-\end{lstlisting}
-Conditionally to the fact the \lstinline+informations+ option is not set to \lstinline+false+: if the
-\file*{informations-gut.tex} which contains the informations about
-\gutenberg. Otherwise, a warning is displayed.
-\begin{lstlisting}
-\bool_if:NT \g__letgut_informations_bool {
- \clearpage
- \phantomsection
- \file_if_exist:nTF
- {./\c__letgut_informations_gutenberg_file_tl}{
- \file_input:n {./\c__letgut_informations_gutenberg_file_tl}
- }{
- \msg_warning:nn{letgut}{Informations~file~missing}
- \alertbox{ \c__letgut_missing_infomations_tl }
- }
-}
-\end{lstlisting}
-
-We close the \lstinline+\AddToHook{enddocument}+ argument.
-
-\begin{lstlisting}
-}
-\end{lstlisting}
-
-We close the boolean which tests whether the target audience is the readers or
-the author(s) of the “Lettre”.
-
-\begin{lstlisting}
-}
-\end{lstlisting}
-
-\subsection{Sections, subsections, etc.}
-\label{sec:org4d2fa9d}
-
-\subsubsection{Numbering}
-\label{sec:orge3d86f9}
-We want all the sections to be unnumbered.
-
-\begin{lstlisting}
-\setcounter{secnumdepth}{-10}
-\end{lstlisting}
-
-\subsubsection{Format}
-\label{sec:org36330f3}
-
-\begin{itemize}
-\item We create the new level \lstinline+\title+ for the titles of the articles. They are
-displayed uppercased.
-\begin{lstlisting}
-\AddToHook{begindocument/before}{%
- \titleclass{\title}{straight}[\part]
- \titleformat{\title}{
- \normalfont
- \LARGE
- \bfseries
- \text_uppercase:n
- }{}{1em}{
- \aldineleft\c_space_tl
- }{}
- \etocsetlevel{title}{0}
- \def\toclevel@title{0}%
- \etocsetstyle {title}
- {}
- {
- \leavevmode\leftskip 2cm\relax
- }
- {\mdseries\normalsize
- \etocname
- \nobreak\leaders\hbox~ to~ 1ex{\hss.}\hfill
- \etocpage
- \par}
- {}
-\end{lstlisting}
-\item We also create the new level \lstinline+\subtitle+ for the subtitles of the
-articles. They are dispayed uppercased (but in a smaller size than \lstinline+\title+).
-\begin{lstlisting}
-\titleclass{\subtitle}{straight}[\title]
-\titleformat{\subtitle}{
- \normalfont
- \Large
- \bfseries
- \text_uppercase:n
-}{}{1em}{}{}
-\etocsetlevel{subtitle}{1}
-\def\toclevel@subtitle{1}%
-\def\toclevel@subtitle{1}
-\end{lstlisting}
-\item By default (that is when \lstinline+\subtitle+ is not used), the toc levels of the
-sections, subsections, etc. are set to \lstinline+1+, \lstinline+2+, etc. But, when \lstinline+\subtitle+ is
-used, since this level has toc level \lstinline+1+, the toc levels of the sections,
-subsections, etc. have to be set to \lstinline+2+, \lstinline+3+, etc. And this has to be reset
-each time \lstinline+\title+ and \lstinline+\subtitle+ are used.
-\begin{lstlisting}
-\AddToHook{cmd/title/before}{
- \etocsetlevel{section}{1}
- \def\toclevel@section{1}%
- \etocsetlevel{subsection}{2}
- \def\toclevel@subsection{2}%
- \etocsetlevel{subsubsection}{3}
- \def\toclevel@subsubsection{3}%
- \etocsetlevel{paragraph}{4}
- \def\toclevel@paragraph{4}%
- \etocsetlevel{subparagraph}{5}
- \def\toclevel@subparagraph{5}%
-}
-\AddToHook{cmd/subtitle/before}{
- \etocsetlevel{section}{2}
- \def\toclevel@section{2}%
- \etocsetlevel{subsection}{3}
- \def\toclevel@subsection{3}%
- \etocsetlevel{subsubsection}{4}
- \def\toclevel@subsubsection{4}%
- \etocsetlevel{paragraph}{5}
- \def\toclevel@paragraph{5}%
- \etocsetlevel{subparagraph}{6}
- \def\toclevel@subparagraph{6}%
-}
-\end{lstlisting}
-
-\begin{itemize}
-\item The (sub)paragraphs have the usual format, except that they are not
-“runin” (\package{titlesec}'s package's terminology).
-\end{itemize}
-\begin{lstlisting}
- \titleformat{\paragraph}{
- \normalfont
- \normalsize
- \bfseries
- }{\theparagraph}{1em}{}
- \titleformat{\subparagraph}{
- \normalfont
- \normalsize
- \bfseries
- }{\thesubparagraph}{1em}{}
-}
-\end{lstlisting}
-\item We modify the spacing, mainly by shifting the titles in the left margin (the
-rest is borrowed from the standard classes).
-\begin{lstlisting}
-\titlespacing*{\title}
-{\c__letgut_title_hoffset_dim}
-{\c__letgut_before_title_title_skip}
-{\c__letgut_after_title_title_skip}
-\titlespacing*{\subtitle}
-{\c__letgut_subtitle_hoffset_dim}
-{\c__letgut_before_subtitle_title_skip}
-{\c__letgut_after_subtitle_title_skip}
-\titlespacing*{\section}
-{\c__letgut_section_hoffset_dim}
-{\c__letgut_before_section_title_skip}
-{\c__letgut_after_section_title_skip}
-\titlespacing*{\subsection}
-{\c__letgut_subsection_hoffset_dim}
-{\c__letgut_before_subsection_title_skip}
-{\c__letgut_after_subsection_title_skip}
-\titlespacing*{\subsubsection}
-{\c__letgut_subsubsection_hoffset_dim}
-{\c__letgut_before_subsubsection_title_skip}
-{\c__letgut_after_subsubsection_title_skip}
-\titlespacing*{\paragraph}
-{\c__letgut_paragraph_hoffset_dim}
-{\c__letgut_before_paragraph_title_skip}
-{\c__letgut_after_paragraph_title_skip}
-\titlespacing*{\subparagraph}
-{\c__letgut_subparagraph_hoffset_dim}
-{\c__letgut_before_subparagraph_title_skip}
-{\c__letgut_after_subparagraph_title_skip}
-\end{lstlisting}
-\end{itemize}
-
-\subsection{Document commands}
-\label{sec:orga7db03b}
-
-\subsubsection{Setup}
-\label{sec:org35e852f}
-
-We define the command that lets us specify the newsletter setup.
-
-\begin{lstlisting}
-\NewDocumentCommand \letgutsetup { m } {
- \keys_set:nn { letgut/setup } { #1 }
-}
-\end{lstlisting}
-
-\subsubsection{For the rubric dedicated to new stuffs appeared on \acs{ctan}}
-\label{sec:orga18e077}
-
-\begin{itemize}
-\item We create a new type of list, dedicated to the new stuffs (classes, packages,
-etc.) on CTAN and similar to a description list (except the label provided in
-the optional argument of \lstinline+\item+ is automatically an argument of the
-\lstinline+\package+ command).
-\begin{lstlisting}
-\cs_new_protected:Nn \__letgut_ctan_news_item:n {
- \package{#1}~:
-}
-\newlist{ctannews}{description}{1}
-\setlist[ctannews]{format=\__letgut_ctan_news_item:n}
-\end{lstlisting}
-The stuffs created by French speaking people are highlighted in a special
-way and, for this, a starred variant of the \lstinline+\item+ command is provided. We
-insert a systematic \lstinline+\phantomsection+ in order the cross-references to such
-items are correct.
-\begin{lstlisting}
-\cs_new_protected:Npn \__letgut_item:nn #1 #2
-{
- \tl_if_empty:nTF {#2}
- {
- \__letgut_old_item
- }{
- \__letgut_old_item[#2]
- }
- \phantomsection
- \IfBooleanT {#1}{
- \mbox{}\marginpar[\mbox{}\hfill\francophony]{}
- }
-}
-\NewCommandCopy{\__letgut_old_item}{\item}
-\RenewDocumentCommand {\item} { s O{} } {
- \__letgut_item:nn {#1}{#2}
-}
-\end{lstlisting}
-\end{itemize}
-\begin{itemize}
-\item Command that inserts the \enquote{francophony} logo.
-\begin{lstlisting}
-\NewDocumentCommand {\francophony} { } {
- \raisebox{-1.5pt}{
- \includegraphics[width=\f@size pt]{
- letgut-francophony-icon
- }
- }
-}
-\end{lstlisting}
-\end{itemize}
-
-\subsubsection{Persons and authors}
-\label{sec:org73bd77f}
-
-For both persons and authors, the argument of:
-\begin{itemize}
-\item a single individual is given as:
-\begin{itemize}
-\item \meta{Last name}, \meta{First name}
-\item and possibly \meta{Last name}, \meta{First name}, \meta{Title}
-\end{itemize}
-\item multiple individuals, the schemes for each of the individuals are the same of
-a single one, separated by a semicolon.
-\end{itemize}
-
-\begin{lstlisting}
-\NewDocumentCommand {\person} { m } {
- \__letgut_process_list:n {#1}
-}
-\cs_new_protected:Npn \__letgut_author:n #1
-{
- \nopagebreak
- \begin{flushright}
- \__letgut_process_list:n {#1}
- \end{flushright}
-}
-\AddToHook{begindocument/end}{%
- \RenewDocumentCommand\author{ m } {
- \__letgut_author:n { #1 }
- }
-}
-\end{lstlisting}
-
-In the following \lstinline+\__letgut_titlecase_name+ control sequence, we parse last and
-first names, splitting and unsplitting them at spaces and dashes (\lstinline+-+) with
-titlecasing in between.
-
-\begin{lstlisting}
-\cs_new_protected:Npn \__letgut_titlecase_name:n #1
-{
- \seq_set_split:Nnn \l_tmpa_seq { - } {#1}
- \seq_set_map_x:NNn \l_tmpb_seq \l_tmpa_seq {
- \text_titlecase_first:n{ \text_lowercase:n {##1} }
- }
- \tl_set:Nx \l_tmpa_tl {\seq_use:Nn \l_tmpb_seq {-}}
- \seq_clear:N \l_tmpa_seq
- \seq_set_split:NnV \l_tmpa_seq { ~ } { \l_tmpa_tl }
- \seq_set_map_x:NNn \l_tmpb_seq \l_tmpa_seq {
- \text_titlecase_first:n{##1}
- }
- \seq_use:Nn \l_tmpb_seq {~}
-}
-\end{lstlisting}
-
-The following control sequence splits a semi-colon separated list and each item
-is splitted as a comma separated list.
-
-\begin{lstlisting}
-\cs_new_protected:Nn \__letgut_person_last_name:n
-{
- {\scshape \__letgut_titlecase_name:n {#1}}
-}
-\cs_new_protected:Nn \__letgut_person_first_name_last_name:nn
-{
- \__letgut_titlecase_name:n {#1}
- \c_space_tl
- \__letgut_person_last_name:n {#2}
-}
-\cs_new_protected:Nn
-\__letgut_person_first_name_last_name_title:nnn
-{
- \__letgut_person_first_name_last_name:nn {#1} {#2}
- \c_space_tl
- (#3)
-}
-\seq_new:N \l__letgut_items_seq
-\cs_new_protected:Npn \__letgut_process_list:n #1
-{
- \seq_clear:N \l__letgut_items_seq
- \seq_set_split:Nnn \l_tmpa_seq {and} {#1}
- \seq_map_inline:Nn \l_tmpa_seq {
- \seq_set_from_clist:Nn \l_tmpb_seq {##1}
- \seq_pop_left:NN \l_tmpb_seq \l_letgut_last_name_tl
- \seq_pop_left:NN \l_tmpb_seq \l_letgut_first_name_tl
- \seq_pop_left:NN \l_tmpb_seq \l_letgut_title_tl
- \seq_put_right:Nx \l__letgut_items_seq {
- \quark_if_no_value:NTF \l_letgut_first_name_tl {
- \__letgut_person_last_name:n {
- \l_letgut_last_name_tl
- }
- }{
- \quark_if_no_value:NTF \l_letgut_title_tl {
- \__letgut_person_first_name_last_name:nn
- {\l_letgut_first_name_tl}
- {\l_letgut_last_name_tl}
- }{
- \__letgut_person_first_name_last_name_title:nnn
- {\l_letgut_first_name_tl}
- {\l_letgut_last_name_tl}
- {\l_letgut_title_tl}
- }
- }
- }
- }
- \seq_use:Nnnn \l__letgut_items_seq {
- \c_space_tl \str_use:N \& \c_space_tl
- } { ,~ } { \c_space_tl \str_use:N \& \c_space_tl }
-}
-\end{lstlisting}
-
-\subsubsection{Horizontal rule}
-\label{sec:orgc866c8e}
-
-\begin{lstlisting}
-\NewDocumentCommand {\separator} { } {
- \par
- \skip_vertical:N 1em
- \hrule
- \skip_vertical:N 1em
-}
-\end{lstlisting}
-
-\subsubsection{Alert boxes}
-\label{sec:org7e6600e}
-
-\begin{lstlisting}
-\colorlet {letgut_default_alert_box_color} {
- \c__letgut_default_alert_box_color_tl
-}
-\NewDocumentCommand \alertbox {
- O{letgut_default_alert_box_color} +m
-} {
- \__letgut_alert_box:nn { #1 }{ #2 }
-}
-\end{lstlisting}
-
-\subsubsection{Typesetting of packages, classes, files and softwares.}
-\label{sec:orgaf32b00}
-
-The \lstinline+\c__letgut_httpsprefix_tl+ comes from:
-
-\url{https://github.com/latex3/hyperref/issues/188\#issuecomment-826302843}.
-
-\begin{lstlisting}
-\tl_const:Nx \c__letgut_httpsprefix_tl
-{https\char_generate:nn{58}{12}//}
-\end{lstlisting}
-We define the font switches dediacted to each of packages and classes
-(\TeX{} stuff), files and softwares.
-\begin{lstlisting}
-\tl_new:N \l__letgut__tex_stuff_font_switch_tl
-\tl_new:N \l__letgut_files_font_switch_tl
-\tl_new:N \l__letgut_softwares_font_switch_tl
-\tl_set:Nn \l__letgut__tex_stuff_font_switch_tl {\sffamily}
-\tl_set:Nn \l__letgut_files_font_switch_tl {\ttfamily}
-\tl_set:Nn \l__letgut_softwares_font_switch_tl {\ttfamily}
-\end{lstlisting}
-
-\begin{lstlisting}
-\cs_new_protected:Nn \__letgut_tex_stuff:nn
-{
- \IfNoValueTF {#1}
- {
- \href{
- \c__letgut_httpsprefix_tl ctan.org/pkg/#2
- }{
- {\l__letgut__tex_stuff_font_switch_tl #2}
- }
- }{
- \tl_if_empty:nTF {#1}
- {
- {\l__letgut__tex_stuff_font_switch_tl #2}
- }{
- \href{#1}{{\l__letgut__tex_stuff_font_switch_tl #2}}
- }
- }
-}
-\cs_new_protected:Nn \__letgut_software:nn
-{
- \tl_if_empty:nTF {#1}
- {
- {\l__letgut_softwares_font_switch_tl #2}
- }{
- \href{#1}{{\l__letgut_softwares_font_switch_tl #2}}
- }
-}
-\cs_new_protected:Nn \__letgut_file:n
-{
- {\l__letgut_files_font_switch_tl #1}
-}
-\NewDocumentCommand{\package}{ s o m O{package} } {
- \IfBooleanT{#1}{
- #4
- \c_space_tl
- }
- \__letgut_tex_stuff:nn {#2}{#3}
-}
-\NewDocumentCommand{\class}{ s o m O{classe} } {
- \IfBooleanT{#1}{
- #4
- \c_space_tl
- }
- \__letgut_tex_stuff:nn {#2}{#3}
-}
-\NewDocumentCommand{\file}{ s m O{fichier} } {
- \IfBooleanT{#1}{
- #3
- \c_space_tl
- }
- \__letgut_file:n {#2}
-}
-\NewDocumentCommand {\software} { s O{} m O{logiciel} } {
- \IfBooleanT{#1}{
- #4
- \c_space_tl
- }
- \__letgut_software:nn {#2}{#3}
-}
-\end{lstlisting}
-
-\subsubsection{Names, etc.}
-\label{sec:org45141b1}
-
-\begin{lstlisting}
- \NewExpandableDocumentCommand { \gutenberg } { } {
- \c__letgut_gutenberg_tl
- }
- \NewExpandableDocumentCommand { \gut } { } {
- \c__letgut_gutenberg_tl
- }
-\NewExpandableDocumentCommand { \lettre } { } {
- \c__letgut_Lettre_tl
- }
- \NewExpandableDocumentCommand { \lettregut } { } {
- \lettre \c_space_tl \gutenberg
- }
- \NewExpandableDocumentCommand { \Cahier } { } {
- \c__letgut_cahier_tl
- }
- \NewExpandableDocumentCommand { \Cahiers } { } {
- \c__letgut_cahiers_tl
- }
- \NewExpandableDocumentCommand { \letgut } { } {
- \class{letgut}
- }
- \NewExpandableDocumentCommand { \letgutcls } { } {
- \class*{letgut}
- }
- \NewExpandableDocumentCommand { \tugboat } { } {
- \c__letgut_tugboat_tl
- }
- \NewExpandableDocumentCommand { \knuth } { } {
- \person{Knuth, Donald~ E.}
- }
- \NewExpandableDocumentCommand { \lamport } { } {
- \person{Lamport, Leslie}
- }
-\end{lstlisting}
-
-\subsubsection{Foreign locutions}
-\label{sec:org32f4b23}
-
-\begin{lstlisting}
-\cs_new_protected:Npn \__letgut_emphasis:n #1
-{
- \emph{#1}
-}
-\NewDocumentCommand { \foreignloc } { m } {
- \__letgut_emphasis:n {#1}
-}
-\NewDocumentCommand { \latinloc } { m } {
- \__letgut_emphasis:n {#1}
-}
-\end{lstlisting}
-
-\subsubsection{Bookmarks handling}
-\label{sec:org2ee5370}
-
-We disabling some commands when their arguments have to go to bookmarks.
-
-\begin{lstlisting}
-\AddToHook{begindocument/end}{
- \pdfstringdefDisableCommands{
- \def\person#1{#1}
- \def\author#1{#1}
- \def\package#1{#1}
- % \def\package*#1{package~#1}
- \def\class#1{#1}
- % \def\class*#1{classe~#1}
- \def\file#1{#1}
- % \def\file*#1{fichier~#1}
- \def\software#1{#1}
- % \def\software*#1{logiciel~#1}
- \def\foreignloc#1{#1}
- \def\lettre{Lettre}
- \def\gutenberg{GUTenberg}
- \def\gut{\gutenberg}
- \def\lettregut{\lettre\c_space_tl\gutenberg}
- \def\Cahier{Cahier}
- \def\Cahiers{\Cahier s}
- \def\letgut{letgut}
- \def\letgutcls{classe~ letgut}
- \def\knuth{Donald~ E.~ Knuth}
- \def\lamport{Leslie~ Lamport}
- \def\latinloc#1{#1}
- }
-}
-\end{lstlisting}
-
-\subsubsection{Acronyms}
-\label{sec:orgd329484}
-
-The following command let us define acronyms. The arguments are as follows:
-\begin{itemize}
-\item \lstinline+#1+: optional argument that let us override the default settings of this
-command,
-\item \lstinline+#2+: the uppercase version of both the id and the short form of the acronym,
-\item \lstinline+#3+: the long form (in French if \#4 has \lstinline+-NoValue-+, in English otherwise),
-\item \lstinline+#4+: the French translation of an English acronym.
-\end{itemize}
-
-\begin{lstlisting}
-\cs_new_protected:Nn \__letgut_acronym:nnnn
-{
- \AddToHook{begindocument/before}{
- \IfValueTF {#4}{
- \tl_if_empty:nTF {#4}{
- \exp_args:Nx \DeclareAcronym{\text_lowercase:n {#2}}{
- short = \text_lowercase:n {#2},
- sort= #2,
- long = {\emph{#3}},
- extra-long = {anglais},
- pdfstring = #2,
- short-acc = #2,
- #1
- }
- }{
- \exp_args:Nx \DeclareAcronym{\text_lowercase:n {#2}}{
- short = \text_lowercase:n {#2},
- sort= #2,
- long = {#4},
- foreign = {#3},
- foreign-babel = english,
- foreign-locale = anglais,
- pdfstring = #2,
- short-acc = #2,
- #1
- }
- }
- }{
- \exp_args:Nx \DeclareAcronym{\text_lowercase:n {#2}}{
- short = \text_lowercase:n {#2},
- sort= #2,
- long = {#3},
- pdfstring = #2,
- short-acc = #2,
- #1
- }
- }
-\end{lstlisting}
-The ⟨id⟩ of the acronym will automatically be the name of a public command
-(\lstinline+\+​⟨id⟩) acting as \lstinline+\ac{id}+.
-\begin{lstlisting}
-\exp_after:wN \cs_if_exist:cT { \text_lowercase:n {#2} } {
- \msg_note:nnn{letgut}{Existing~command}{#2}
-}
-\exp_args:Nc \ProvideDocumentCommand
-{ \text_lowercase:n {#2} } { s } {
- \IfBooleanTF {##1}{
- \exp_args:Nx \acs { \text_lowercase:n {#2} }
- }{
- \exp_args:Nx \ac { \text_lowercase:n { #2 } }
- }
-}
-\end{lstlisting}
-We want the command \lstinline+\+​⟨id⟩ to work also in bookmarks (the resulting string will
-be the uppercased acronym).
-\begin{lstlisting}
-\pdfstringdefDisableCommands
- {
- \exp_after:wN
- \def\cs:w \text_lowercase:n {#2} \cs_end: { #2 }
- }
-}
-}
-\end{lstlisting}
-
-The first occurrences of the acronyms will be displayed in their short forms,
-with the long ones in footnotes. But what about acronyms whom first occurrences
-arise within footnotes? We want the to be displayed as their short forms
-followed by their the long form in parentheses. For this, we have to add
-a boolean at the beginning (and reversed at the end) of the \lstinline+\footnote+ command
-to know whether we currently are in a footnote or not and display the acronym
-accordingly.
-
-\begin{lstlisting}
-\NewCommandCopy{\__letgut_old_footnote}{\footnote}
-\RenewDocumentCommand {\footnote} { m }{
- \bool_set_true:N \l__letgut_in_footnote_bool
- \__letgut_old_footnote { #1 }
- \bool_set_false:N \l__letgut_in_footnote_bool
-}
-\end{lstlisting}
-We change a bit both the \lstinline+footnote+ acro template, the \lstinline+description+ list
-template, and the macro which prints the locale.
-\begin{lstlisting}
-\DeclareAcroProperty{extra-foreign}
-\DeclareAcroProperty{extra-long}
-\RenewAcroTemplate {footnote}
-{
- \acrowrite {short}
- \acroiffirstT
- {
-\end{lstlisting}
-If we are in a footnote, first occurrences of the acronyms are displayed
-as “short (long)”. Otherwise, they are displayed as “short\footnote{long}”.
-\begin{lstlisting}
- \bool_if:NTF \l__letgut_in_footnote_bool {
- \space
- (
- \acroifT {alt} { \acrotranslate {or} ~ \acrowrite {alt} ~ }
- \acroifT {foreign} { \acrowrite {foreign} :~ }
- \acrowrite {long}
- \acrogroupcite
- )
- }{
- \acfootnote
- {
- \acroifT {alt} {
- \acrotranslate {or} ~ \acrowrite {alt} :~
- }
- \acroifT {foreign} { \acrowrite {foreign} }
- \acrowrite {long}
- \acroifT {extra-long} { ~ [\acrowrite {extra-long}] }
- \acroifT {extra-foreign} {
- \c_space_tl [\acrowrite {extra-foreign}]
- }
- \acrogroupcite
- }
- }
- }
- }
- \RenewAcroTemplate[list]{description}{%
- \acroheading
- \acropreamble
- \begin{description}
- \acronymsmapF{%
- \item[\acrowrite{short}\acroifT{alt}{/\acrowrite{alt}}]
- \acroifT{foreign}{
- \acrowrite{foreign}\acroifT{extra}{, }
- }%
- \acroifT{extra}{\acrowrite{extra}}%
- \acroifanyT{foreign,extra}{\acspace (}%
- \acrowrite{list}%
- \acroifT {extra-foreign} {
- , \c_space_tl \acrowrite {extra-foreign}
- }
- \acroifanyT{foreign,extra}{)}%
- \acropagefill
- \acropages
- {\acrotranslate{page}\nobreakspace}
- {\acrotranslate{pages}\nobreakspace}%
- }
- {\item\AcroRerun}
- \end{description}
-}
-% #1: id
-% #2: property
-% #3: text
-\cs_set_protected:Npn \acro_locale:nnn #1#2#3
- {
- \acro_if_foreign:nTF {#2}
- {
- \acro_if_locale:nnTF {#1} {#2}
- {
- \__acro_foreign_language:en
- { \str_lowercase:e {
- \acro_property_get:nn {#1} {foreign-babel}
- }
- }
- {#3}
- \bool_if:NTF \l__acro_list_bool
- { \bool_if:NT \l__acro_list_show_locale_bool }
- { \bool_if:NT \l__acro_show_locale_bool }
- {
- {
- \l__acro_locale_format_tl
- {
- \acro_property_if_set:nnTF {#1} {
- foreign-locale
- }
- {
- \acspace
- [
- \acro_property_get:nn {#1} {
- foreign-locale
- }
- ]
- }{
- \baselanguage
- {
- \acro_property_get:nn {#1} {
- foreign-babel
- }
- }
- }
- }
- }
- :~
- }
- }
- {#3}
- }
- {#3}
- }
-\end{lstlisting}
-Now, the document command that let the user create acronyms.
-\begin{lstlisting}
-\NewDocumentCommand{\letgutacro}{ O{} m m o }
-{
- \__letgut_acronym:nnnn {#1} {#2} {#3} {#4}
-}
-\end{lstlisting}
-For printing the acronyms, we define two new heading templates for the structure
-levels \lstinline+\title+ and \lstinline+\subtitle+.
-\begin{lstlisting}
-\NewAcroTemplate[heading] {title}
- { \title { \acrolistname } }
-\NewAcroTemplate[heading] {subtitle}
- { \subtitle { \acrolistname } }
-\end{lstlisting}
-We make \lstinline+\letgutacro+ available only in the preamble part of the document
-(otherwise, no warning from \package{acro} but only the long form of the acronym
-is printed when used for the first time with \lstinline+\ac+).
-\begin{lstlisting}
-\@onlypreamble\letgutacro
-\end{lstlisting}
-
-\subsection{Bibliography}
-\label{sec:orgc523238}
-
-We want the \lstinline+\citeauthor+ command to display, not only the last, but the
-full name of the authors.
-
-\begin{lstlisting}
-\NewCommandCopy{\__letgut_old_citeauthor}{
- \citeauthor
-}
-\RenewDocumentCommand {\citeauthor} { O{} O{} m } {
- \AtNextCite{\DeclareNameAlias{labelname}{given-family}}
- \__letgut_old_citeauthor[#1][#2]{#3}
-}
-\end{lstlisting}
-
-\subsection{Book reviews}
-\label{sec:org2fd9b20}
-
-\begin{lstlisting}
-\tl_new:N \g__letgut_bookreview_frontcover_tl
-\tl_new:N \g__letgut_bookreview_bibkey_tl
-\end{lstlisting}
-The keys options are created.
-\begin{lstlisting}
-\keys_define:nn { letgut/bookreview }
-{
- title .tl_gset:N = \g__letgut_bookreview_title_tl,
- frontcover .tl_gset:N = \g__letgut_bookreview_frontcover_tl,
- bibkey .tl_gset:N = \g__letgut_bookreview_bibkey_tl,
- reviewer .tl_gset:N = \g__letgut_bookreview_reviewer_tl,
- price .tl_gset:N = \g__letgut_bookreview_price_tl,
-\end{lstlisting}
-
-All these options, when used, must receive a value.
-
-\begin{lstlisting}
- title .value_required:n = true,
- frontcover .value_required:n = true,
- bibkey .value_required:n = true,
- reviewer .value_required:n = true,
-}
-\end{lstlisting}
-
-We create the new environment for the book reviews.
-
-\begin{lstlisting}
-\cs_generate_variant:Nn \msg_warning:nnn { nnV }
-\cs_generate_variant:Nn \msg_error:nnnn { nnVV }
-\NewDocumentEnvironment{bookreview}{ m }
-{
- \keys_set:nn { letgut/bookreview } { #1 }
- \section{\g__letgut_bookreview_title_tl}
- \tl_if_empty:NTF \g__letgut_bookreview_frontcover_tl {
- \msg_warning:nnV{letgut}{frontcover-missing}{
- \g__letgut_bookreview_title_tl
- }
- }{
-\end{lstlisting}
-
-We check if the front cover file is available against the list of accepted
-extensions of the \lstinline+graphicx+ package.
-
-\begin{lstlisting}
- \clist_map_inline:Nn \Gin@extensions {
- \file_if_exist:nT{\g__letgut_bookreview_frontcover_tl##1}{
- \bool_set_true:N \l_tmpa_bool
- \clist_map_break:
- }
- }
- \bool_if:NTF \l_tmpa_bool {
- \marginpar{
- \hspace*{\c__letgut_bookreview_frontcover_margin_sep_dim}
- % \raggedleft
- \raisebox{-\totalheight}{
- \fbox{
- \includegraphics[width=-\c__letgut_title_hoffset_dim]{
- \g__letgut_bookreview_frontcover_tl
- }
- }
- }
- }
- }{
- \msg_error:nnVV
- {letgut}
- {frontcover-file-not-found}
- {\g__letgut_bookreview_title_tl}
- {\g__letgut_bookreview_frontcover_tl}
- }
- }
- \noindent
- \textsf{\fullcite{\g__letgut_bookreview_bibkey_tl}}
- \tl_if_empty:NF \g__letgut_bookreview_price_tl{
- .\c_space_tl\EUR{\g__letgut_bookreview_price_tl}
- }
- \par
-}{
- \exp_args:NV \author{\g__letgut_bookreview_reviewer_tl}
-}
-\end{lstlisting}
-
-\subsection{Miscellanous}
-\label{sec:org00f0870}
-
-\begin{itemize}
-\item We specify the possible hyphenations of \enquote{\gutenberg}.
-\end{itemize}
-\begin{lstlisting}
-\hyphenation{GUT-enberg}
-\end{lstlisting}
-
-\subsubsection{Non selectable text}
-\label{sec:org4c4b60b}
-
-We create a control sequence that makes its argument not selectable in the
-PDF. This will be used notably for the line numbers of the listings and the
-watermarks.
-\begin{lstlisting}
-\cs_new_protected:Npn \__letgut_unselectable:n #1
-{
- \BeginAccSupp{ActualText={}}#1\EndAccSupp{}
-}
-\end{lstlisting}
-
-\subsubsection{Typesetting of code, etc.}
-\label{sec:org61c4abd}
-
-We provide a \lstinline+\meta+ macro that (poorly) mimics the one of the
-\package*{doc}. It is added at the very end of the preamble since other
-package that provide a better definition of this macro may have been loaded
-(e.g. \package{tcolorbox}).
-\begin{lstlisting}
-\colorlet {__letgut_meta} {
- brown
-}
-\cs_new_protected:Nn \__letgut_meta:nn
-{
- \bgroup
- \normalfont
- \ttfamily
- \itshape
- \textcolor{#1}{$\langle$#2$\rangle$}
- \egroup
-}
-\AddToHook{begindocument/before}{
- \ProvideDocumentCommand{\meta}{ O{__letgut_meta} m } {
- \__letgut_meta:nn {#1}{#2}
- }
-}
-\end{lstlisting}
-
-\subsection{\LaTeX{} listings and examples}
-\label{sec:org371597a}
-
-We first define some colors used in the listings and examples.
-
-\begin{lstlisting}
-\definecolor{__letgut_backgroundCode}{cmyk}{0,0,0,0.04}
-\definecolor{__letgut_borderCode}{cmyk}{0,0,0,0.2}
-\definecolor{__letgut_foregroundLinenumber}{cmyk}{0,0,0,0.5}
-\definecolor{__letgut_foregroundMention}{cmyk}{0,0,0,0}
-\definecolor{__letgut_backgroundResult}{cmyk}{0,0,0,0}
-\end{lstlisting}
-
-We now define the colors for the syntax highlighting and define the style of our
-listings.
-
-\begin{lstlisting}
-\colorlet{__letgut_texcs}{blue}
-\colorlet{__letgut_comment}{gray}
-\colorlet{__letgut_argument-specification-separator}{red}
-\colorlet{__letgut_argument-specification}{cyan}
-\colorlet{__letgut_mandatory-argument}{purple}
-\colorlet{__letgut_environment}{teal}
-\colorlet{__letgut_key}{__letgut_mandatory-argument}
-\colorlet{__letgut_value}{violet}
-\colorlet{__letgut_optional-argument}{__letgut_key}
-\colorlet{__letgut_math}{green!50!black}
-\lstset{%
- texcsstyle=*\color{__letgut_texcs},
- commentstyle=\color{__letgut_comment}\itshape,
- keywordstyle= \color{__letgut_argument-specification-separator},
- keywordstyle={[2]\color{__letgut_environment}},
- keywordstyle={[3]\color{__letgut_key}},
- keywordstyle={[4]\color{__letgut_value}},
- keywordstyle={[5]\color{__letgut_argument-specification}},
- keywordstyle={[6]\color{__letgut_key}},
- escapechar=£,
- literate=*%
- {\\\\}{{{\color{__letgut_texcs}\textbackslash\textbackslash}}}{2}%
- {\\[}{{\textcolor{__letgut_math}{\textbackslash[}}}{2}%
- {\\]}{{\textcolor{__letgut_math}{\textbackslash]}}}{2}%
- {$}{{\textcolor{__letgut_math}{\$}}}{1}%$
-}
-\end{lstlisting}
-
-For the listings and examples, we rely on \package*{tcolorbox}, and more
-specifically on some of its libraries.
-
-\begin{lstlisting}
-\tcbuselibrary{listings,xparse,breakable,skins}
-\end{lstlisting}
-
-The functions:
-
-\begin{itemize}
-\item \lstinline+\__letgut_code_result_mention_box:n+ draws the mentions “code” and “résultat”
-in the codes boxes and the possible corresponding results boxes,
-\item \lstinline+\__letgut_title_code_result_box:n+ for the title of codes and the results
-boxes: “Exemple” followed by the number of the example and, if a \lstinline+title addon+
-option is provided, the specified title addon.
-\end{itemize}
-
-\begin{lstlisting}
-\cs_new_protected:Npn \__letgut_code_result_mention_box:nn #1 #2
-{
- \node[
- minimum~ width=1cm,
- minimum~ height=\c__letgut_height_mentions_dim,
- outer~ sep=auto,
- anchor=north~ east,
- fill=__letgut_borderCode
- ]~ at~ (#1)
- {
- \itshape
- \small
- \color{__letgut_foregroundMention}
- \__letgut_unselectable:n {#2}
- };
-}
-\cs_new_protected:Npn \__letgut_title_code_result_box:n #1
-{
- Exemple~ \thetcbcounter
- \tl_if_empty:NF {#1} { \hypersetup{hidelinks} \c_space_tl :~#1 }
-}
-\cs_new_protected:Nn \__letgut_on_callout_page:nn
-{
- \tl_set:Nn \l_tmpa_int {\getpagerefnumber{#1}}
- \tl_set:Nn \l_tmpb_int {\thepage}
- \int_compare:nNnF {\l_tmpa_int} = {\l_tmpb_int}
- {#2}
-}
-\end{lstlisting}
-
-We define the style of the codes and the results boxes.
-
-\begin{lstlisting}
-\tl_set:Nn \l__letgut_reference_text_tl {
- Cf.~\vref{\g__letgut_label_ltx_example_str}.
-}
-\tcbset{
- __letgut_code/.style={
- listing~ options={
- % style=tcblatex,
- numbers=left,
- numbersep=\c__letgut_number_sep_dim,
-\end{lstlisting}
-We want the line numbers to not be selectable, hence the \lstinline+\__letgut_unselectable:n+:.
-\begin{lstlisting}
-numberstyle=
- \scriptsize
- \ttfamily
- \color{__letgut_foregroundLinenumber}
- \__letgut_unselectable:n,
-},
-every~ float=\raggedleft,
-colback=__letgut_backgroundCode,
-breakable,
-sharp~ corners,
-boxrule=0.25mm,
-colframe=__letgut_borderCode,
-sidebyside~ align=top~ seam,
-toprule~ at~ break=0mm,
-bottomrule~ at~ break=0mm,
-colbacktitle=__letgut_borderCode,
-fonttitle=\sffamily\bfseries,
-before~ title={
- \tl_set:Nn \l__letgut__tex_stuff_font_switch_tl {\rmfamily}
-},
-\end{lstlisting}
-We define a custom \package*{tcolorbox}'s \lstinline+title addon+ option that let us
-specify an addon to the title which will added after the automatically
-generated title “Exemple \meta{number}”.
-\begin{lstlisting}
-title~ addon/.store~ in=\l__letgut_title_addon_tl,
-title=\__letgut_title_code_result_box:n {\l__letgut_title_addon_tl},
-\end{lstlisting}
-We define a custom \package*{tcolorbox}'s \lstinline+reference text+ option that let us
-override the text of the reference for the examples with code and result side by
-side that are floating and not being of their call out pages.
-\begin{lstlisting}
-reference~ text/.code={
- \tl_set:Nn \l__letgut_reference_text_tl {##1}
-},
-\end{lstlisting}
-We define a custom \package*{tcolorbox}'s \lstinline+result width+ option that let us
-specify the width of the result which is \lstinline+\linewidth+ by default.
-\begin{lstlisting}
-result~ width/.store~ in=\l__letgut_result_width_dim,
-result~ width=\linewidth,
-},
-__letgut_code_result/.style={
- __letgut_code={#1},
- bicolor,
- colbacklower=__letgut_backgroundResult,
- segmentation~ at~ break=false,
- top=\c__letgut_height_mentions_dim,
- middle=\c__letgut_height_mentions_dim,
-\end{lstlisting}
-We want the side by side code/result examples to automatically be floating.
-\begin{lstlisting}
-sidebyside@true/.code={%
- \tcb@sidebysidetrue%
- \tcb@isbreakablefalse%
- \pgfkeysalso{floatplacement=ht}%
- \pgfkeysalso{float}%
- \pgfkeysalso{label={\g__letgut_label_ltx_example_str}}%
- \tl_set:Nx \l_tmpa_tl {
- \getpagerefnumber {
- \g__letgut_callout_label_ltx_example_str
- }
- }
- \tl_set:Nx \l_tmpb_tl {
- \getpagerefnumber {
- \g__letgut_label_ltx_example_str
- }
- }
- \tl_if_eq:NNF \l_tmpa_tl \l_tmpb_tl
- {
- \l__letgut_reference_text_tl
- \tl_set:Nn \l__letgut_reference_text_tl {
- Cf.~\vref{\g__letgut_label_ltx_example_str}.
- }
- \pgfkeysalso{
- drop~ shadow=black,
- grow~ to~ left~ by=4cm,
- boxed~ title~ style={sharp~ corners},
- }
- \pgfkeysalso{after~ title~ app=\c_space_tl (cf.~page~\thepage)}
- }
-},%
-overlay={
- \iftcb@sidebyside
- \__letgut_code_result_mention_box:nn {segmentation.north} {code}
- \__letgut_code_result_mention_box:nn {interior.north~ east} {résultat}
- \else
- \ifcase\tcbsegmentstate
- % 0 = Box contains only an upper part
- \__letgut_code_result_mention_box:nn {interior.north~ east} {code}
- \or%
- % 1 = Box contains an upper and a lower part
- \__letgut_code_result_mention_box:nn {interior.north~ east} {code
-\end{lstlisting}
-
-\begin{lstlisting}
- \int_compare:nNnT {\thetcbbreakpart} > {1} {~(suite)}
-}
-\__letgut_code_result_mention_box:nn {
- [yshift=.1mm]segmentation.east
-} {résultat}
-\else%
-% 2 = Box contains only a lower part
-\__letgut_code_result_mention_box:nn {interior.north~ east} {résultat
-\end{lstlisting}
-
-\begin{lstlisting}
-\int_compare:nNnT {\thetcbbreakpart} > {1} {~(suite)}
-}
-\fi
-\fi
-},
-},
-}
-\end{lstlisting}
-
-The \package*{tcolorbox} listings defined below make use of
-\package*{cleveref}'s features. But, since the latter package is loaded
-\lstinline+\AddToHook{begindocument/before}+, the same is needed for these listings.
-
-\begin{lstlisting}
-\AddToHook{begindocument/before}{
-\end{lstlisting}
-
-We now define the environments that let us display:
-
-\begin{enumerate}
-\item only \LaTeX{} code:
-\end{enumerate}
-\begin{lstlisting}
-\DeclareTCBListing[
- auto~ counter,
- crefname={exemple}{exemples}
-]{ltx-code}{ !O{} }{%
- __letgut_code,
- listing~ only,
- #1%
-}
-\end{lstlisting}
-\begin{enumerate}
-\item both \LaTeX{} code and its result:
-\begin{enumerate}
-\item ordinary:
-\end{enumerate}
-\end{enumerate}
-\begin{lstlisting}
-\DeclareTCBListing[
- use~ counter~ from=ltx-code,
- crefname={exemple}{exemples}
-]{ltx-code-result}{ !O{} }{%
- __letgut_code_result,
- #1%
-}
-\end{lstlisting}
-\begin{enumerate}
-\item with the result obtained externally:
-\end{enumerate}
-\begin{lstlisting}
-\DeclareTCBListing[
- use~ counter~ from=ltx-code,
- crefname={exemple}{exemples}
-]{ltx-code-external-result}{ O{} m }{%
- __letgut_code_result,
- listing~ and~ comment,
- image~ comment={width=\l__letgut_result_width_dim}{#2},
- center~ lower,
- #1%
-}
-\end{lstlisting}
-
-\begin{lstlisting}
-}
-\end{lstlisting}
-
-The examples with code and result side by side will be floating but we want the
-ones being of their call out pages to have before and after them a reduced
-vertical glue (\lstinline+\g__letgut_reduced_intextsep_dim+). Hence we store the original
-glue (\lstinline+\intextsep+) in a custom one (\lstinline+\g__letgut_orig_intextsep_dim+) in order
-to retrieve the original skip for floats other than these ones.
-
-\begin{lstlisting}
-\skip_const:Nn \c__letgut_orig_intextsep_skip {\intextsep}
-\skip_const:Nn \c__letgut_reduced_intextsep_skip {
- 4\p@ \@plus .667\p@ \@minus .667\p@
-}
-\end{lstlisting}
-
-We now use hooks in order to\ldots{}
-
-\begin{lstlisting}
-\AddToHook{env/ltx-code-result/before}{
- \int_gincr:N \g__letgut_ltx_example_int
- \str_set:Nx \g__letgut_label_ltx_example_str {
- \c__letgut_label_ltx_example_str-
- \int_use:N \g__letgut_ltx_example_int
- }
- \str_set:Nx \g__letgut_callout_label_ltx_example_str {
- \c__letgut_callout_label_ltx_example_str-
- \int_use:N \g__letgut_ltx_example_int
- }
- \label{\g__letgut_callout_label_ltx_example_str}
- \tl_set:Nx \l_tmpa_tl {
- \getpagerefnumber {
- \g__letgut_callout_label_ltx_example_str
- }
- }
- \tl_set:Nx \l_tmpb_tl {
- \getpagerefnumber {
- \g__letgut_label_ltx_example_str
- }
- }
- \tl_if_eq:NNF \l_tmpa_tl \l_tmpb_tl
- {
- \skip_set_eq:NN \intextsep \c__letgut_reduced_intextsep_skip
- }
-}
-\end{lstlisting}
-
-\subsection{Local config file}
-\label{sec:org562c2a3}
-
-Each issue of the Lettre requires certain local configurations: configuration
-dedicated to the issue in question, particular packages used in the articles,
-specific configurations of the \package*{listings}, etc. In order to not clutter
-the main \file*{.tex} of the Lettre, a local configuration file named
-\file{localconf.tex}, if present in the current directory, is automatically
-included at the end of the end of the preamble. And since this file is input in
-the current category régime (\lstinline+\ExplSyntaxOn+), a \lstinline+\ExplSyntaxOff+ is
-automatically inserted at its beginning.
-
-\begin{lstlisting}
-\file_if_exist:nT {./\c__letgut_local_config_file_tl}{
- \AddToHook { file/before/./\c__letgut_local_config_file_tl } {
- \ExplSyntaxOff
- }
- \file_input:n {./\c__letgut_local_config_file_tl}
-}
-\end{lstlisting}
-
-We don't want the book review entry types to be listed in the bibliography
-(they appears only thanks to the \lstinline+bookreview+ environment).
-
-\begin{lstlisting}
-\ExecuteBibliographyOptions[bookreview]{skipbib,skiplab}
-\end{lstlisting}
-
-\begin{lstlisting}
-\endinput
-\end{lstlisting}
-
-\section{(biblatex) Data model}
-\label{sec:org14731c9}
-
-We give the (\package{biblatex}) data model that enriches the default one for
-several purposes:
-\begin{itemize}
-\item the books reviews,
-\item the books advertisements.
-\end{itemize}
-
-\begin{lstlisting}
-\ProvidesFile{letgut.lbx}[2022-03-22 v0.9.1 letgut localization]
-\InheritBibliographyExtras{french}
-\DeclareBibliographyStrings{
- inherit = {french},
- number = {{\no}{\no}},
- volume = {{volume}{vol\adddot}},
- volumes = {{volumes}{vol\adddot}},
-}
-\end{lstlisting}
-
-We create the new bibliography driver \lstinline+bookreview+ (that seems to
-create the corresponding new entry).
-
-\begin{lstlisting}
-\ProvidesFile{letgut.dbx}[2022-03-22 v0.9.1 letgut data model macros]
-\DeclareBibliographyDriver{bookreview}{%
- \usebibmacro{bibindex}%
- \usebibmacro{begentry}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\printdelim{nametitledelim}}
- \newblock
- \usebibmacro{maintitle+title}%
- \newunit
- \printlist{language}%
- \newunit\newblock
- \usebibmacro{byauthor}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \printfield{edition}%
- \newunit
- \iffieldundef{maintitle}
- {\printfield{volume}%
- \printfield{part}}
- {}%
- \newunit
- \printfield{volumes}%
- \newunit\newblock
- \usebibmacro{series+number}%
- \newunit\newblock
- \printfield{note}%
- \newunit\newblock
- \usebibmacro{publisher+location+date}%
- \newunit\newblock
- \usebibmacro{chapter+pages}%
- \newunit
- \printfield{pagetotal}%
- \newunit\newblock
- \iftoggle{bbx:isbn}
- {\printfield{isbn}}
- {}%
- \newunit\newblock
- \usebibmacro{doi+eprint+url}%
- \newunit\newblock
- \usebibmacro{addendum+pubstate}%
- \setunit{\bibpagerefpunct}\newblock
- \usebibmacro{pageref}%
- \newunit\newblock
- \iftoggle{bbx:related}
- {\usebibmacro{related:init}%
- \usebibmacro{related}}
- {}%
- \finentrypunct
- \usebibmacro{finentry}}
-\end{lstlisting}
-
-We provide a specific \lstinline+biblatex+ citation style .
-
-\begin{lstlisting}
-\ProvidesFile{letgut.cbx}[2022-03-22 v0.9.1 letgut base citation style]
-\RequireCitationStyle{numeric}
-\end{lstlisting}
-
-The books reviewed have their titles not only emphasized, but in bold face as
-well\ldots{}
-
-\begin{lstlisting}
-\DeclareFieldFormat[bookreview]{title}{\textbf{\emph{#1}}}
-\end{lstlisting}
-
-\ldots{} but not their subtitles.
-
-\begin{lstlisting}
-\renewbibmacro*{title}{%
- \ifboolexpr{
- test {\iffieldundef{title}}
- and
- test {\iffieldundef{subtitle}}
- }
- {}
- {\printtext[title]{%
- \printfield[titlecase]{title}%
- \setunit{\subtitlepunct}}%
- \printfield[emph]{subtitle}%
- \newunit}%
- \printfield{titleaddon}}
-\end{lstlisting}
-
-\section{Provided files}
-\label{sec:org59fbe1b}
-
-\subsection{Example file of an issue of the newsletter}
-\label{sec:org4b9a54d}
-
-\begin{lstlisting}
-\documentclass{letgut}
-
-\letgutsetup{
- % % Option booléenne pour la version finale de la Lettre.
- % % L'option contraire`draft` (par défaut) affiche
- % % « Brouillon » en filigrane et actionne le package
- % % `lua-typo`.
- %
- % , final
- %
- % % Option coloriant le fond de la page d'une couleur
- % % par défaut (`1.0, 0.98, 0.94` en « rgb ») mais
- % % modifiable au moyen de l'option `pagecolor` ci-dessous.
- %
- % , paper
- %
- % % Numéro de la Lettre
- %
- , number=44
- %
- % % Date de la Lettre. Celle-ci est déduite de la
- % % date du jour, mais peut être spécifiée sous la forme
- % % AAAA-MM (avec garde-fous) ou librement
- % % (p. ex. `date=Printemps 2021`).
- %
- % , date=2025-16
- %
- % % Couleur de la page, à spécifier selon le modèle « rgb ».
- %
- % , pagecolor={1.0, 0.1, 0.94}
- %
- % % Couleur des hyperliens, à spécifier selon le modèle
- % % « named ».
- %
- % , allcolorslinks=cyan
- %
- % % Un (r)appel à cotisation est automatiquement ajouté
- % % en 1re page. Si on ne le souhaite pas, il suffit de
- % % passer l'option `membership-reminder=false`.
- %
- % , membership-reminder=false
- %
- % % Si un fichier `editorial.tex`, on s'en doute censé
- % % contenir l'éditorial, est présent dans le répertoire
- % % courant, son contenu est automatiquement ajouté en
- % % 1re page. Si un tel fichier est absent du répertoire
- % % courant, une alerte est affichée à la place, sauf si,
- % % parce qu'on ne souhaite pas d'éditorial, on passe
- % % l'option `editorial=false`.
- %
- % , editorial=false
- %
- % % Les informations concernant GUTenberg, si elles
- % % figurent dans un fichier `informations-gut.tex`
- % % présent dans le répertoire courant, sont
- % % automatiquement ajoutées en dernière page.
- % % Si on ne souhaite pas que figurent ces
- % % informations, il suffit de passer l'option
- % % `informations=false`.
- %
- % , informations=false
-}
-
-\setmainfont{TeX Gyre Schola} % Par exemple
-
-\usepackage[maths=both]{duckuments}
-\usepackage{mwe}
-
-% \addbibresource{biblio.bib}
-
-\begin{document}
-\duckument
-\end{document}
-
-%%% Local Variables:
-%%% mode: latex
-%%% TeX-engine: luatex
-%%% TeX-master: t
-%%% End:
-\end{lstlisting}
-
-\subsection{Example of an editorial}
-\label{sec:orgf79a2c2}
-
-\begin{lstlisting}
-Ceci est un intéressant éditorial de la \lettregut{}
-dans lequel on peut causer de l'\ag{} et du \ca{}
-de l'association. Il peut aussi y être question du \ctan.
-
-\lipsum[1-5]
-
-\begin{figure}[ht]
- \centering
- \includegraphics[width=.7\linewidth]{example-image}
- \caption{Ducks ?}
- \label{fig:ducks}
-\end{figure}
-
-\lipsum[6-10]
-\end{lstlisting}
-
-\subsection{Informations about \gutenberg}
-\label{sec:orgcc0dfe6}
-
-\begin{lstlisting}
-\enlargethispage{1.5cm}
-\small
-\vspace*{-1cm}
-\hspace*{-1.5cm}%
-\raisebox{-\height+0.7\baselineskip}{%
- \begin{minipage}[t]{.6\textwidth}%\vspace{0pt}%
- \includegraphics[width=\linewidth]{logo-gut.pdf}
- \end{minipage}%
-}%
-\hfill%
-\begin{minipage}[t]{.4\textwidth}%\vspace{0pt}%
- \footnotesize\raggedleft%
- Association \gut{}\\
- 15 rue des Halles -- \textsc{bp} 74\\
- 75001 Paris\\
- France\\
- \nolinkurl{secretariat@gutenberg.eu.org}
-\end{minipage}%
-
-\begin{description}
-\item[Site internet :] \url{https://www.gutenberg.eu.org/}
-\item[\Cahiers{} :] \url{http://cahiers.gutenberg.eu.org/}
-\item[Problèmes techniques :]
- \leavevmode
- \begin{description}
- \item[la liste \texttt{gut} :]
- \url{https://www.gutenberg.eu.org/-Listes-de-diffusion-}
- \item[le site \TeX nique de questions et réponses :]
- \url{https://texnique.fr/}
- \item[la foire aux questions :]
- \url{https://faq.gutenberg.eu.org}
- \end{description}
-\end{description}
-%
-\alertbox{%
- Cette association est la vôtre: faites-nous part de
- vos idées, de vos envies, de vos préoccupations
- à l'adresse \nolinkurl{secretariat@gutenberg.eu.org}.%
-}
-
-% \section[Association GUTenberg (tout sur l')]
-% {Adhésion à l'association}
-\title{Adhésion à l'association}
-\label{letgut_label_adhesions}
-
-\begin{itemize}
-\item % Adhésions et abonnements
- Les adhésions sont à renouveler en début d'année
- pour l'année civile.
- % \item Il n'y a pas de lettre de rappel, chaque membre
- % doit faire son renouvellement annuel; %\hspace*{1em}
- % merci de renvoyer spontanément le bulletin ci-dessous
- % en début d'année.
-\item Les administrations peuvent joindre un bon de commande
- revêtu de la signature de la personne responsable ;
- les étudiants doivent joindre un justificatif.
- % \item Si vous souhaitez que vos coordonnées restent
- % confidentielles, merci de le signaler.
-\end{itemize}
-
-\section{Tarifs \the\year}
-
-Les membres de \gut\ peuvent adhérer à l'association
-internationale, le \acf{tug}, et recevoir son bulletin
-\emph{\acs{tug}boat} à un tarif préférentiel :
-\begin{description}
-\item[tarif normal :] \EUR{65} (au lieu de 85~\$)
-\item[tarif étudiant :] \EUR{40} (au lieu de 55~\$)
-\end{description}
-% (\EUR{49,50}, étudiants et demandeurs d'emploi :
-% \EUR{29}, au lieu de 85\$ et % 65\$). Voir
-% \url{%
-% https://www.gutenberg.eu.org/?Adherer-a-l-association%
-% }.
-
-\footnotesize
-\begin{center}
- \begin{tabular}{lr}
- \toprule
- \textbf{Type d'adhésion} & \textbf{Prix} \\
- \midrule
- Membre individuel & \EUR{30} \\
- Membre individuel + adhésion \acs{tug} & \EUR{95} \\
- Membre individuel étudiant/demandeur d'emploi & \EUR{15} \\
- Membre individuel étudiant + adhésion \acs{tug} & \EUR{55} \\
- Association d'étudiants & \EUR{65} \\
- Organisme à but non lucratif & \EUR{130} \\
- Organisme à but lucratif & \EUR{229} \\
- \bottomrule
- \end{tabular}
-\end{center}
-
-\section{Règlements}
-
-Les règlements peuvent s'effectuer par :
-\begin{itemize}
-\item \textbf{virement bancaire}%
- \footnote{Nous vous remercions de \textbf{privilégier}
- le \textbf{virement bancaire}.\label{fn:1}} (IBAN :
- FR76 1870 7000 3003 0191 3568 475)%
- \leavevmode
-
- \alertbox{%
- Veillez à bien \emph{indiquer vos nom et prénom}
- dans les références du virement !%
- }
-\item Paypal\footnotemark[\value{footnote}] :
- \url{https://www.gutenberg.eu.org/?Adherer-en-ligne}
-\item bulletin et chèque\footnotemark[\value{footnote}] :
- \url{https://www.gutenberg.eu.org/?Adherer-a-l-association}
-\end{itemize}
-
-\vfill
-
-\begin{center}
- \begin{tblr}{
- width=.75\linewidth,
- colspec={
- % < (Just not to disturb the parentheses
- % balancing detection of my editor.)
- >{\bfseries}r@{ }X
- },
- vline{1,3}={solid},
- hline{1,7}={solid},
- rowsep=0mm,
- row{1} = {abovesep+=.25cm},
- row{2} = {belowsep+=.125cm},
- row{6} = {belowsep+=.25cm},
- % colsep=2.5mm,
- }
- \SetCell[c=2]{c} \emph{La \lettregut}\\
- \SetCell[c=2]{c} \mdseries Bulletin irrégulomestriel
- de l'association \gut\\
- Directeur de la publication :
- & \person{Bideault, Patrick} \\
- Comité de rédaction :
- & {Patrick \bsc{Bideault}, Denis \bsc{Bitouzé}, \\
- Céline \bsc{Chevalier} \& Maxime \bsc{Chupin}} \\
- Adresse de la rédaction : &
- {
- Association \gut\\
- 15 rue des Halles -- \textsc{bp} 74\\
- 75001 Paris
- }
- \\
- \acs{issn} : & 2742-6149 (version numérique)
- \end{tblr}
-\end{center}
-\vfill
-\mbox{}
-\clearpage
-
-%%% Local Variables:
-%%% mode: latex
-%%% End:
-\end{lstlisting}
-\end{document} \ No newline at end of file
diff --git a/macros/luatex/latex/letgut/doc/letgut.pdf b/macros/luatex/latex/letgut/doc/letgut.pdf
index e0d2740a0b..7ba16a98b7 100644
--- a/macros/luatex/latex/letgut/doc/letgut.pdf
+++ b/macros/luatex/latex/letgut/doc/letgut.pdf
Binary files differ
diff --git a/macros/luatex/latex/letgut/doc/letgut.tex b/macros/luatex/latex/letgut/doc/letgut.tex
index f782959e7c..ba12072910 100644
--- a/macros/luatex/latex/letgut/doc/letgut.tex
+++ b/macros/luatex/latex/letgut/doc/letgut.tex
@@ -15,27 +15,6 @@
% ,final
}
-\lstset{
- language=TeX,%
- alsolanguage=[geometry]TeX,%
- alsolanguage=[LaTeX]TeX,%
- alsolanguage=[plain]TeX,%
- alsolanguage=[common]TeX,%
- alsolanguage=[primitive]TeX,%
- alsolanguage=[xcolor]TeX,%
- alsolanguage=[listings]TeX,%
- alsolanguage=[biblatex]TeX,%
- alsolanguage=[hyperref]TeX,%
- alsolanguage=[extLaTeX]TeX,%
- alsolanguage=[letgut]TeX,%
- alsolanguage=[hologo]TeX,%
- alsolanguage=[acro]TeX,%
- alsolanguage=[tcolorbox]TeX,%
- alsolanguage=[csquotes]TeX,%
- alsolanguage=[varioref]TeX,%
- alsolanguage=[babel-french]TeX,%
-}
-
% Bibliographie
\addbibresource{letgut.bib}
@@ -88,7 +67,7 @@
}
\author{Association GUTenberg}
\date{%
- Version 0.9.1 en date du \today%
+ Version 0.9.2 en date du \today%
\texorpdfstring{%
\\
\url{https://framagit.org/gutenberg/classe-lettre-gut}%
@@ -101,6 +80,23 @@
% \makeindex[title=Index des concepts,extout=pdx,extin=pnd,columnseprule]
\begin{document}
+\syntaxhl{%
+ LaTeX,%
+ acro,%
+ babel-french,%
+ biblatex,%
+ biolinum,%
+ % classes,%
+ csquotes,%
+ % graphicx,%
+ hologo,%
+ hyperref,%
+ letgut,%
+ listings,%
+ tcolorbox,%
+ varioref,%
+}
+
\title{Introduction}
\label{sec:introduction}
L'association \gutenberg{} publie la \lettregut{}, son bulletin irrégulomestriel,
@@ -144,20 +140,33 @@ risque de perturber une installation de \hologo{(La)TeX} déjà existante.
\section{Options}
\label{sec:options}
-La \letgutcls{} fournit deux types d'\meta{options} :
-
-\begin{description}
-\item[\foreignloc{load-time} :] à spécifier \emph{exclusivement} au chargement
- de la classe, selon la syntaxe usuelle
- ×\documentclass[×\meta{options}×]{letgut}×
-\item[\emph{non} \foreignloc{load-time} :] à spécifier \emph{exclusivement} en
- argument de la commande dédiée \refCom{letgutsetup}.
-\end{description}
+\subsection{Spécification}
+\label{sec:specification}
+
+Les options de la \letgutcls{} peuvent être spécifiées de deux façons :
+\begin{enumerate}
+\item en argument de la commande dédiée \refCom{letgutsetup} ;
+\item à la compilation, au moyen de la commande (à lancer dans un terminal) :
+\begingroup
+\lstset{basicstyle=\ttfamily\small}
+\terminal{lualatex '\PassOptionsToClass{£\meta{options}£}{letgut} \input{£\meta{fichier}£}'}{}
+\endgroup
+\end{enumerate}
+
+\begin{dbwarning}{Options de \letgut{} : pas en argument optionnel
+ de \docAuxCommand{documentclass}}{}
+ On évitera de passer les options de la \letgutcls{} en argument optionnel de
+ la commande \docAuxCommand{documentclass} et ce, de sorte à éviter les
+ conflits d'options avec les différents packages chargés.
+\end{dbwarning}
-\subsection{Options \foreignloc{load-time}}
-\label{sec:fore-time-meta}
+\begin{docCommand}{letgutsetup}{\marg{options}}
+ \index{configuration}%
+ Cette commande permet de spécifier les \meta{options} de la \letgutcls{}.
+\end{docCommand}
-Ces options, au nombre de deux, sont \enquote{contraires} l'une de l'autre.
+\subsection{Liste des options}
+\label{sec:liste-des-options}
\begin{docKeys}
{
@@ -189,16 +198,6 @@ Ces options, au nombre de deux, sont \enquote{contraires} l'une de l'autre.
\end{itemize}
\end{docKeys}
-\subsection{Options non \foreignloc{load-time}}
-\label{sec:emphn-fore-time}
-
-\begin{docCommand}{letgutsetup}{\marg{options}}
- \index{configuration}%
- Cette commande permet de spécifier les \meta{options} \emph{non} \foreignloc{load-time} de la \letgutcls{}.
-\end{docCommand}
-
-Ces \meta{options} sont les suivantes :
-
\begin{docKeys}
{
{
@@ -269,7 +268,7 @@ Ces \meta{options} sont les suivantes :
\begin{itemize}
\item n'est pas employée (les mois et année en cours sont alors
utilisés) ;
- \item est employée sous la forme \refKey*{date}×=×\meta{année}×-×\meta{mois}
+ \item est employée sous la forme \refKey*{date}⅛=⅛\meta{année}⅛-⅛\meta{mois}
où \meta{année} et \meta{mois} doivent être des nombres entiers
positifs. Les garde-fous suivants sont mis en place :
\begin{itemize}
@@ -280,7 +279,7 @@ Ces \meta{options} sont les suivantes :
\end{itemize}
\end{itemize}
\item \enquote{\meta{texte}} si l'option est employée sous la forme
- \refKey*{date}×=×\meta{texte}.
+ \refKey*{date}⅛=⅛\meta{texte}.
\end{itemize}
\end{docKey}
}
@@ -311,19 +310,37 @@ Ces \meta{options} sont les suivantes :
\begin{docKey}{editorial}{}{\valinitdef[\docValue*{true}][\docValue*{true}]}
Cette clé booléenne importe automatiquement en tout début de la \lettre{}
(néanmoins après le titre et le sommaire) le \file*{editorial.tex} contenant
- l'éditorial. Si aucun \file*{editorial.tex} n'est trouvé dans le répertoire
- courant, un avertissement est émis lors de la compilation et une boîte
- d'alerte est affichée en 1\iere{} page.
+ l'éditorial. Si aucun \file*{editorial.tex} n'est trouvé, un avertissement est
+ émis lors de la compilation et une boîte d'alerte est affichée en 1\iere{}
+ page.
\end{docKey}
\begin{docKey}{informations}{}{\valinitdef[\docValue*{true}][\docValue*{true}]}
Cette clé booléenne importe automatiquement en dernière page de la \lettre{}
le \file*{informations-gut.tex} contenant toutes les informations sur
- \gut{}. Si aucun \file*{informations-gut.tex} n'est trouvé dans le
- répertoire courant, un avertissement est émis lors de la compilation et une
- boîte d'alerte est affichée en dernière page.
+ \gut{}. Si aucun \file*{informations-gut.tex} n'est trouvé, un avertissement
+ est émis lors de la compilation et une boîte d'alerte est affichée en dernière
+ page.
\end{docKey}
+\begin{docKey}{detailedtoc}{}{\valinitdef[\docValue*{false}][\docValue*{true}]}
+ Par défaut, la table des matières automatiquement insérée en début de document
+ a pour niveau de profondeur celui des titres (saisis via la \refCom{title}),
+ et seulement les titres des articles. La clé booléenne \refKey{detailedtoc}
+ a pour effet que cette table des matières est détaillée au maximum (son niveau
+ de profondeur allant jusqu'aux sous-paragraphes), ce qui peut être utile lors
+ de la conception d'un numéro de la \lettre{}.
+\end{docKey}
+
+\begin{dbremark}{Tables des matières locales}{}
+ Chaque article peut contenir une table des matières locale, affichée au moyen
+ de la commande \docAuxCommand{localtableofcontents} (fournie par le
+ \package*{etoc} chargé en sous-main par la \letgutcls{}). Le niveau de
+ profondeur est par défaut celui des sections mais cela peut être modifié en la
+ faisant précéder de la commande \docAuxCommand{etocsetnexttocdepth} (dont
+ l'argument est par exemple ⅛subsection⅛).
+\end{dbremark}
+
\section{Titre et titres courants}
\label{sec:titre}
Si la commande \docAuxCommand{title}\marg{titre} est
@@ -344,7 +361,7 @@ Si la commande \docAuxCommand{title}\marg{titre} est
\begin{dbwarning}{\docAuxCommand{title} et \docAuxCommand{author}
$\neq$ avant et après \lstinline+\\begin\{document\}+}{}
Les commandes \docAuxCommand{title} et \docAuxCommand{author} ne se comportent
- pas de la même façon avant et après \lstinline+\begin{document}+ (cf. sections
+ pas de la même façon avant et après ⅛\begin{document}⅛ (cf. sections
\nameref{sec:structuration} \vpageref{sec:structuration} et
\nameref{sec:sign-des-articl} \vpageref{sec:sign-des-articl}).
\end{dbwarning}
@@ -354,6 +371,26 @@ Si la commande \docAuxCommand{title}\marg{titre} est
l'est en sous-main par la classe.
\end{dbwarning}
+\section{Importation d'articles}
+\label{sec:import-dart}
+
+\begin{dbwarning}{Importation de fichiers d'articles}{}
+ Si le contenu d'un article est stocké dans un \meta{fichier enfant}\file{.tex},
+ on l'importera dans un fichier parent recourant à la \letgutcls{} :
+ \begin{itemize}
+ \item \emph{non pas} au moyen de la commande ordinaire \docAuxCommand{input} ;
+ \item \emph{mais} au moyen de la commande \refCom{inputarticle}.
+ \end{itemize}
+\end{dbwarning}
+
+\begin{docCommand}{inputarticle}{\marg{fichier enfant}}
+ Cette commande permet d'importer le contenu d'un article stocké dans un
+ \meta{fichier enfant}\file{.tex}.
+
+ En plus de l'importation proprement dite, cette commande procède à un certain
+ nombre de réinitialisations.
+\end{docCommand}
+
\section{Structuration}
\label{sec:structuration}
@@ -401,13 +438,10 @@ Si la commande \docAuxCommand{title}\marg{titre} est
\package{csquotes}, chargés en sous-main par la \letgutcls{}.
\end{dbremark}
-\bgroup
-\lstset{deletekeywords=[3]{section,nameref}}
-\begin{ltx-code-result}[title addon=références croisées aux rubriques]
+\begin{ltx-code-result}[title addon=références croisées aux rubriques,listing options app={deletekeywords={[3]{nameref,section}}}]
On lira avec intérêt la section \enquote{\nameref{sec:acronymes}}
\vpageref{sec:acronymes}.
\end{ltx-code-result}
-\egroup
\section[Personnes et auteurs]{Noms de personnes et d'auteurs d'articles}
\label{sec:sign-des-articl}
@@ -448,46 +482,33 @@ On lira avec intérêt la section \enquote{\nameref{sec:acronymes}}
\item[pour un individu unique] selon l'un des formats suivants :
\begin{itemize}
\item \meta{nom}
- \item \meta{nom}×, ×\meta{prénom}
- \item \meta{nom}×, ×\meta{prénom}×, ×\meta{titre}
+ \item \meta{nom}⅛, ⅛\meta{prénom}
+ \item \meta{nom}⅛, ⅛\meta{prénom}⅛, ⅛\meta{titre}
\end{itemize}
\item[pour des individus multiples :]\leavevmode
\begin{itemize}
\item selon le même schéma que pour un individu unique ;
\item les \meta{données} de chacun des individus étant séparées par le mot clé
- \lstinline+and+.
+ ⅛and⅛.
\end{itemize}
\end{description}
\end{docCommands}
Indépendamment de la casse utilisée en entrée, pour chaque \meta{nom} et
-\meta{prénom} :
-\begin{itemize}
-\item chacune des initiales et des premières lettres après un espace ou un tiret
- est affiché en grande capitale ;
-\item le reste est affiché en :
- \begin{itemize}
- \item petites capitales pour un \meta{nom} ;
- \item bas de casse pour un \meta{prénom}.
- \end{itemize}
-\end{itemize}
+\meta{prénom}, chacune des initiales et des premières lettres après un espace ou
+un tiret est affiché en grande capitale.
\begin{ltx-code-result}[title addon=personnes]
On peut dire merci à
\person{Knuth, Donald E., dieu and Lamport, Leslie} !
\end{ltx-code-result}
-\bgroup
-\lstset{deletekeywords=[3]{author},deletekeywords=[4]{TeX,},deletekeywords=[5]{e}}
-\begin{ltx-code-result}[title addon=auteur]
+\begin{ltx-code-result}[title addon=auteur,listing options app={deletekeywords={[3]{author}}}]
\begin{displayquote} % Fourni par `csquotes' chargé par `letgut'
Wait, wait, I never said that.
\author{knuth, dONALD e.}
\end{displayquote}
\end{ltx-code-result}
- % The \TeX{} family of programs seems to be nice and healthy
- % as it continues to approach perfection.
-\egroup
\section{Aide à la saisie et homogénéisation de la mise en forme}
\label{sec:aide-la-saisie}
@@ -537,16 +558,13 @@ faciliter la saisie et à en homogénéiser la mise en forme.
défaut, est respectivement \enquote{package} et \enquote{classe}.
\end{docCommands}
-\bgroup
-\lstset{deletekeywords=[4]{tables,}}
-\begin{ltx-code-result}[title addon=packages et classes]
+\begin{ltx-code-result}[title addon=packages et classes,listing options app={deletekeywords={[4]{tables}}}]
La \class*{letgut} s'appuie entre autres sur le \package*{etoc}
(qui permet de personnaliser les tables des matières).
Une des classes s'appuyant sur le \package*[]{etoc} est
-\class[https://framagit.org/gutenberg/classe-lettre-gut]{letgut}.
+\class[https://framagit.org/gutenberg/letgut/]{letgut}.
\end{ltx-code-result}
-\egroup
\begin{docCommands}
{
@@ -582,14 +600,11 @@ Une des classes s'appuyant sur le \package*[]{etoc} est
\enquote{fichier}.
\end{docCommands}
-\bgroup
-\lstset{deletekeywords=[3]{file,plus,l}}
-\begin{ltx-code-result}[title addon=logiciels et fichiers]
+\begin{ltx-code-result}[title addon=logiciels et fichiers,listing options app={deletekeywords={[3]{file,plus,l,tex}}}]
Le \file*{test.tex} a été ouvert dans le
\software*[https://www.gnu.org/software/emacs/]{Emacs}, plus
précisément dans \software*{Emacs}[l'éditeur de texte].
\end{ltx-code-result}
-\egroup
\begin{dbwarning}{Commandes pas toutes bienvenues en \docAuxCommand{title} et
\docAuxCommand{subtitle}}{}
@@ -606,13 +621,10 @@ précisément dans \software*{Emacs}[l'éditeur de texte].
Cette commande est conçue pour afficher une \meta{locution} latine.
\end{docCommand}
-\bgroup
-\lstset{deletekeywords=[3]{options}}
-\begin{ltx-code-result}[title addon=locutions étrangères]
-Ce ne sont pas toutes des \foreignloc{load-time options} :
-\latinloc{errare humanum est} !
+\begin{ltx-code-result}[title addon=locutions étrangères,listing options app={deletekeywords={[3]{options}}}]
+Attention aux \foreignloc{load-time options} !
+Mais... \latinloc{errare humanum est}.
\end{ltx-code-result}
-\egroup
\subsection{Termes et expressions}
\label{sec:termes}
@@ -623,13 +635,19 @@ Ce ne sont pas toutes des \foreignloc{load-time options} :
{ doc name = gut },
{ doc name = lettre },
{ doc name = lettregut },
- { doc name = Cahier },
- { doc name = Cahiers },
+ { doc name = cahier },
+ { doc name = cahiers },
+ { doc name = cahiergut },
+ { doc name = cahiersgut },
{ doc name = letgut },
{ doc name = letgutcls },
{ doc name = knuth },
{ doc name = lamport },
+ { doc name = tl },
{ doc name = tugboat },
+ { doc name = linux },
+ { doc name = macos },
+ { doc name = windows },
}
%
Ce que ces commandes affichent est répertorié dans le \vref{tab:raccourcis}.
@@ -639,17 +657,23 @@ Ce ne sont pas toutes des \foreignloc{load-time options} :
\centering
\begin{tabular}{ll}
\toprule
- \refCom{gutenberg} & \gutenberg \\
- \refCom{gut} & \gut \\
- \refCom{lettre} & \lettre \\
- \refCom{lettregut} & \lettregut \\
- \refCom{Cahier} & \Cahier \\
- \refCom{Cahiers} & \Cahiers \\ \midrule
- \refCom{letgut} & \letgut \\
- \refCom{letgutcls} & \letgutcls \\ \midrule
- \refCom{knuth} & \knuth \\
- \refCom{lamport} & \lamport \\
- \refCom{tugboat} & \tugboat \\ \bottomrule
+ \refCom{gutenberg} & \gutenberg \\
+ \refCom{gut} & \gut \\
+ \refCom{lettre} & \lettre \\
+ \refCom{lettregut} & \lettregut \\
+ \refCom{cahier} & \cahier \\
+ \refCom{cahiergut} & \cahiergut \\
+ \refCom{cahiers} & \cahiers \\
+ \refCom{cahiersgut} & \cahiersgut \\ \midrule
+ \refCom{letgut} & \letgut \\
+ \refCom{letgutcls} & \letgutcls \\ \midrule
+ \refCom{knuth} & \knuth \\
+ \refCom{lamport} & \lamport \\
+ \refCom{tl} & \tl \\
+ \refCom{tugboat} & \tugboat \\ \midrule
+ \refCom{linux} & \linux \\
+ \refCom{macos} & \macos \\
+ \refCom{windows} & \windows \\ \bottomrule
\end{tabular}
\caption{Effet des commandes de raccourcis}
\label{tab:raccourcis}
@@ -672,9 +696,56 @@ de \docAuxCommand{section}%
(préfixe pas en grandes capitales).
\end{dbwarning}
-\section{Exemples de codes \hologo{(La)TeX}, possiblement avec résultats}
+\subsection{Touches de clavier}
+\label{sec:touches-de-clavier}
+
+Afin de disposer d'un moyen simple, riche et élégant pour composer des touches
+de clavier, la \letgutcls{} s'appuie sur le \package*{biolinum} et notamment sa
+commande ⅛\LKey⅛. Cette dernière a été légèrement étendue de façon à faciliter
+la saisie pour toutes les touches des diacritiques utilisés en français.
+
+\begin{ltx-code-result}[title addon=touches de clavier]
+% De base (échantillon) :
+\LKey{A} \LKey{Z} \LKey{0} \LKey{9}
+
+\LKeyF{1} \LKeyF{12}
+
+\LKeyCtrl \LKeyAlt \LKeyAltGr \LKeyShift \LKeyEnter \LKeyTab
+
+\LKeyCtrlX{A} \LKeyShiftX{A} \LKeyAltX{A} \LKeyAltGrX{A}
+
+\LKeyAt \LKeyScreenUp \LKeyScreenDown \LKeyCommand \LKeyOptionKey
+
+\LMouseN \LMouseL \LMouseM \LMouseR
+
+\LKey{exclam} \LKey{numbersign} \LKey{percent} \LKey{backslash}
+
+% Ajoutés par la classe `letgut`
+\LKey{à} \LKey{À} \LKey{â} \LKey{Â} \LKey{é} \LKey{É}
+\LKey{è} \LKey{È} \LKey{ê} \LKey{Ê} \LKey{ë} \LKey{Ë}
+\LKey{î} \LKey{Î} \LKey{ï} \LKey{Ï}
+\LKey{ô} \LKey{Ô}
+\LKey{ù} \LKey{Ù} \LKey{û} \LKey{Û} \LKey{ü} \LKey{Ü}
+\LKey{ÿ} \LKey{Ÿ} \LKey{ç} \LKey{Ç}
+\end{ltx-code-result}
+
+\begin{dbwarning}{Touche de clavier du symbole € manquant}{}
+ La touche de clavier du symbole € n'est pas fournie par le
+ \package*{biolinum}.
+\end{dbwarning}
+
+\section{Codes informatiques}
+\label{sec:code-informatique}
+
+Cette section est consacrée aux outils spécifiques à la \letgutcls{} permettant
+de faire figurer du code informatique dans la \lettre{}.
+
+\subsection{Codes \hologo{(La)TeX}}
\label{sec:exemples-de-codes}
+\subsubsection{Exemples de codes \hologo{(La)TeX}, possiblement avec résultats}
+\label{sec:listings-}
+
Afin de présenter aisément et de façon homogène les exemples de codes
\hologo{(La)TeX}, possiblement avec leurs résultats, la \letgutcls{} fournit les
environnements \enquote{verbatim} suivants.
@@ -719,7 +790,7 @@ environnements \enquote{verbatim} suivants.
ces codes et résulats :
\begin{itemize}
\item l'un sous l'autre par défaut ;
- \item l'un à gauche de l'autre si l'option \lstinline+sidebyside+ est
+ \item l'un à gauche de l'autre si l'option ⅛sidebyside⅛ est
employée.
\end{itemize}
\end{enumerate}
@@ -727,7 +798,7 @@ environnements \enquote{verbatim} suivants.
\begin{dbwarning}{Exemples de codes avec résultats : possiblement
flottants}{exemples-flottants}
- Si l'option \lstinline+sidebyside+ est passée à l'un ou l'autre des
+ Si l'option ⅛sidebyside⅛ est passée à l'un ou l'autre des
environnements \refEnv{ltx-code-result} et \refEnv{ltx-code-external-result},
l'exemple :
\begin{itemize}
@@ -752,7 +823,7 @@ Ces trois environnements admettent des \meta{options} :
\begin{itemize}
\item (toutes) celles acceptées par l'environnement
\docAuxEnvironment{tcblisting} et la commande \docAuxCommand{newtcblisting}
- fournis par la bibliothèque \lstinline+listings+ du
+ fournis par la bibliothèque ⅛listings⅛ du
\package*{tcolorbox}\footnote{Et, aussi, les commandes
\docAuxCommand{DeclareTCBListing} et assimilées fournies par la bibliothèque
\lstinline+xparse+ de ce package.}. Elles permettent notamment de surcharger
@@ -760,14 +831,11 @@ Ces trois environnements admettent des \meta{options} :
\begin{itemize}
\item de faire figurer l'éventuel résultat, non pas sous le code comme c'est
le cas par défaut, mais en regard (à droite) au moyen de l'option
- \lstinline+sidebyside+ ;
+ ⅛sidebyside⅛ ;
\item de supprimer les numéros de ligne au moyen de l'option
-\bgroup
-\lstset{deletekeywords=[3]{none},morekeywords=[4]{none},morekeywords=[3]{listing}}
\begin{ltx-code}
listing options={numbers=none}
\end{ltx-code}
-\egroup
\end{itemize}
\item trois spécifiques à ces environnements :
\begin{docKey*}{title addon}{=\meta{supplément au titre}}{\valinitdef}
@@ -785,7 +853,7 @@ listing options={numbers=none}
\begin{itemize}
\item avec l'un ou l'autre des environnements \refEnv{ltx-code-result} et
\refEnv{ltx-code-external-result} ;
- \item lorsque l'option \lstinline+sidebyside+ leur est passée ;
+ \item lorsque l'option ⅛sidebyside⅛ leur est passée ;
\item lorsque l'exemple s'avère se trouver sur une page autre que
celle de son point d'insertion.
\end{itemize}
@@ -795,17 +863,193 @@ listing options={numbers=none}
s'affranchir de ce texte en recourant à \lstinline+reference text=\{\}+.}.
\begin{dbwarning}{\refKey{reference text} avant \lstinline+sidebyside+}{}
Pour qu'elle soit prise en compte, l'option \refKey{reference text} doit
- être passée \emph{avant} l'option \lstinline+sidebyside+.
+ être passée \emph{avant} l'option ⅛sidebyside⅛.
\end{dbwarning}
\end{docKey*}
\end{itemize}
-\begin{dbwarning}{Caractère d'échappement}{}
+\subsubsection{Coloration syntaxique}
+\label{sec:coloration}
+
+Par défaut, en début de document et de chaque fichier importé au moyen de
+\refCom{inputarticle}, le langage supposé dans ces exemples de codes est
+\hologo{TeX}, chargé (seulement) avec ses \enquote{dialectes} :
+\begin{itemize}
+\item ⅛primitive⅛, ⅛common⅛, ⅛plain⅛, ⅛LaTeX⅛, ⅛AlLaTeX⅛ fournis par le
+ \package*{listings} ;
+\item ⅛classes⅛ fourni par \letgutcls{} (répertoriant les classes disponibles
+ sur le \ctan{}).
+\end{itemize}
+Une conséquence notable est la suivante :
+\begin{dbwarning}{Coloration syntaxique réduite par défaut}{}
+ La coloration syntaxique dans les exemples de codes n'est par défaut active
+ que pour le langage \hologo{TeX} et ses dialectes ⅛primitive⅛, ⅛common⅛,
+ ⅛plain⅛, ⅛LaTeX⅛, ⅛AlLaTeX⅛ et ⅛classes⅛.
+\end{dbwarning}
+
+Il est néanmoins possible de spécifier d'autres langages et dialectes au moyen
+de la commande \refCom{syntaxhl} suivante, à insérer avant le début de l'exemple
+de code concerné.
+
+\begin{docCommands}[
+doc name = syntaxhl,
+doc parameter = \marg{liste de dialectes},
+]
+{
+ { },
+ { doc parameter = \oarg{langage}\marg{liste de dialectes} },
+}
+Cette comande permet de spécifier :
+\begin{itemize}
+\item un \meta{langage} (par défaut \hologo{TeX}) ;
+\item une \meta{liste de dialectes}, séparés par des virgules ;
+\end{itemize}
+auxquels on souhaite que s'applique la coloration syntaxique.
+\end{docCommands}
+
+\begin{dbwarning}{Dialectes colorés syntaxiquement seulement si définis}{}
+ Ceci suppose que ces langages et dialectes sont définis (et saisis selon la
+ syntaxe du \package*{listings}) dans le \file*{letgut-lstlang.sty} situé :
+ \begin{itemize}
+ \item soit dans le dossier de la \lettre{} en cours ;
+ \item soit dans le dossier parent de celui de la \lettre{} en cours ;
+ \item soit dans un dossier de la \tds{}
+ \end{itemize}
+\end{dbwarning}
+
+Pour le langage \hologo{TeX}, ces dialectes sont essentiellement les classes et
+les packages \hologo{(La)TeX} et un exemple de déclaration de tel dialecte est
+fourni section~\enquote{\nameref{sec:exemple-de-decl}},
+\vpageref{sec:exemple-de-decl}.
+
+\subsection{Entrées et sorties dans un terminal}
+\label{sec:entrees-sorties}
+
+Afin de présenter aisément et de façon homogène des exemples de commandes
+entrées et éventuellement de leurs sorties correspondantes, la \letgutcls{}
+fournit la commande à arguments \enquote{verbatim} suivante.
+
+\begin{docCommand}{terminal}{\oarg{prompt}\oarg{options}\marg{stdin}\marg{stdout}}
+ %
+ Cette commande affiche les codes en entrée (\meta{stdin}) et en sortie
+ (\meta{stdout}), chacun des deux étant possiblement vide.
+
+ Le \meta{prompt}, ou \enquote{invite de commande}, est par défaut le symbole
+ \texttt{\$} affiché en rouge.
+
+ Il est possible de surcharger les réglages par défaut de cette commande au
+ moyen d'\meta{options} qui sont (toutes) celles acceptées par l'environnement
+ \docAuxEnvironment{tcblisting} et la commande \docAuxCommand{newtcblisting}
+ fournis par la bibliothèque ⅛listings⅛ du \package*{tcolorbox}\footnote{Et,
+ aussi, les commandes \docAuxCommand{DeclareTCBListing} et assimilées
+ fournies par la bibliothèque \lstinline+xparse+ de ce package.}.
+\end{docCommand}
+
+Ainsi le code suivant :
+\begingroup
+\lstset{basicstyle=\ttfamily\scriptsize}
+\begin{ltx-code}[listing options app={%
+ deletekeywords={[3]{latex,width,height,string,label,by,example,system,tex}},%
+ deletetexcs={edef,rlap,smash,expandafter,string}%
+}]
+\terminal{time rg foobar -g "*.sty" "/home/bitouze/texlive/2022"}{
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/skeyval/skeyval.sty
+445:% \usepackage[option1,option2]{foobar}
+447:% \expandafter\show\csname foobar.sty.poxkeys\endcsname
+
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/thmtools/thm-restate.sty
+197:%%% support for keyval-style: restate=foobar
+
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/pinlabel/pinlabel.sty
+284:\edef\foobar{[width=\@p@swidth sp,height=\@p@sheight sp]{\@p@dffile}}%
+286:\@message{\string\@includegraphics@\foobar}%
+287:\rlap{\smash{\expandafter\@includegraphics@\foobar}}%
+
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/theoremref/theoremref.sty
+129: its label by ``\thlabel{foobar}''. For example,
+
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/qrbill/qrbill.sty
+12:%% Marei Peischl (peiTeX) and Alex Antener (foobar LLC).
+rg -g 0,25s user 0,23s system 320% cpu 0,150 total
+}
+\end{ltx-code}
+
+donne-t-il :
+
+\terminal{time rg foobar -g "*.sty" "/home/bitouze/texlive/2022"}{
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/skeyval/skeyval.sty
+445:% \usepackage[option1,option2]{foobar}
+447:% \expandafter\show\csname foobar.sty.poxkeys\endcsname
+
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/thmtools/thm-restate.sty
+197:%%% support for keyval-style: restate=foobar
+
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/pinlabel/pinlabel.sty
+284:\edef\foobar{[width=\@p@swidth sp,height=\@p@sheight sp]{\@p@dffile}}%
+286:\@message{\string\@includegraphics@\foobar}%
+287:\rlap{\smash{\expandafter\@includegraphics@\foobar}}%
+
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/theoremref/theoremref.sty
+129: its label by ``\thlabel{foobar}''. For example,
+
+/home/bitouze/texlive/2022/texmf-dist/tex/latex/qrbill/qrbill.sty
+12:%% Marei Peischl (peiTeX) and Alex Antener (foobar LLC).
+rg -g 0,25s user 0,23s system 320% cpu 0,150 total
+}
+\endgroup
+
+\subsection{Caractères d'échappement et de raccourci pour les
+ extraits de code}
+\label{sec:caract-dech-et}
+
+\begin{dbwarning}{Caractère d'échappement des listings}{}
\lstset{escapechar=}%
- La \letgutcls{} définit ×£× comme caractère d'échappement dans \LaTeX{} au
- sein d'un code \LaTeX{}.
+ La \letgutcls{} définit ⅛£⅛ comme caractère d'échappement dans \LaTeX{} au
+ sein d'un listing.
\end{dbwarning}
+Au besoin, on pourra désactiver ce caractère actif au moyen de
+\begin{ltx-code}
+\lstset{escapechar=}
+\end{ltx-code}
+
+\begin{dbwarning}{Équivalent court de \docAuxCommand{lstinline}}{}
+ Les extraits de code peuvent être saisis au moyen de la commande
+ \docAuxCommand{lstinline} du \package*{listings} mais, pour
+ simplifier la tâche, la \letgutcls{} définit comme équivalent court
+ de \docAuxCommand{lstinline} le caractère unicode %
+ \lstDeleteShortInline⅛%
+ \texttt{⅛} %
+ \lstMakeShortInline⅛%
+ (U+215B)\footnote{Peu susceptible d'être utilisé dans du texte
+ ordinaire.}.
+\end{dbwarning}
+
+Autrement dit, la \letgutcls{} contient l'instruction\footnote{À peu
+ de choses près.} :
+ \lstDeleteShortInline⅛
+\begin{ltx-code}
+\lstMakeShortInline£\texttt{⅛}£
+\end{ltx-code}
+
+ Au besoin, on pourra désactiver ce caractère actif au moyen de :
+\begin{ltx-code}
+\lstDeleteShortInline£\texttt{⅛}£
+\end{ltx-code}
+
+\begin{dbremark}{Obtention du caractère \texttt{⅛}}{}
+Le caractère %
+\texttt{⅛} %
+s'obtient :
+\begin{itemize}
+\item sous \linux{} : \LKeyShiftAltGrX{2}\footnote{Touche \LKey{2} du clavier principal.} ;
+\item sous \macos{} : à l'aide du visualiseur de caractères\footnote{Et
+ possiblement de raccourcis claviers personnels.} ;
+\item sous \windows{} : \LKeyAltX{8}+\LKey{5}+\LKey{3}+\LKey{9}.
+\end{itemize}
+\end{dbremark}
+ \lstMakeShortInline⅛%
+
\section{Nouveautés apparues sur le \ctan}
\label{sec:rubr-cons-aux}
@@ -840,18 +1084,15 @@ suivante.
automatiquement situé en regard dans la marge, les signale comme telles.
\end{docCommands}
-\bgroup
-\lstset{deletekeywords=[3]{l},deletekeywords=[6]{hologo,matapli}}
-\begin{ltx-code-external-result}[title addon=nouveautés]{exemple-nouveautes}
+\begin{ltx-code-external-result}[title addon=nouveautés,listing options app={deletekeywords={[6]{hologo,matapli}}}]{exemple-nouveautes}
\begin{ctannews}
-\item[nl-interval] vise à simplifier le processus de représentation
- graphique des intervalles de l'axe réel.
+\item[nl-interval] vise à simplifier le processus de
+ représentation graphique des intervalles de l'axe réel.
\item*[matapli] classe \hologo{LaTeX} destinée à la composition
de la revue Matapli (conçue par \person{Chupin, Maxime},
secrétaire adjoint de \gutenberg{}).
\end{ctannews}
\end{ltx-code-external-result}
-\egroup
\begin{docCommand}{francophony}{}
Cette commande affiche le logo de la francophonie, ainsi : \francophony.
@@ -930,10 +1171,10 @@ commande dédiée \refCom{letgutacro}.
être employé au moyen des commandes fournies par le \package*{acro}, par
exemple :
\begin{itemize}
- \item ×\ac{×\meta{court}×}×\footnote{Acronyme automatiquement affiché sous sa
+ \item ⅛\ac{⅛\meta{court}⅛}⅛\footnote{Acronyme automatiquement affiché sous sa
forme complète à sa 1\iere{} occurrence, sous sa forme courte à ses
occurrences suivantes.} ;
- \item ×\acs{×\meta{court}×}×\footnote{Acronyme affiché sous sa forme courte
+ \item ⅛\acs{⅛\meta{court}⅛}⅛\footnote{Acronyme affiché sous sa forme courte
seulement.}.
\end{itemize}
Toutefois, pour simplifier l'usage de ces acronymes, la \letgutcls{} crée
@@ -942,7 +1183,7 @@ commande dédiée \refCom{letgutacro}.
Sauf si elle existe déjà, auquel cas la création d'une telle commande est
silencieusement escamotée. Ainsi par exemple, l'acronyme
%
- \lstinline!\\letgutacro[...]\{TIKZ\}\{...\}[...]!
+ \lstinline+\\letgutacro[...]\{TIKZ\}\{...\}[...]+
%
fourni par \letgut{} (cf. \vpageref{liste-acronymes}) ne surcharge-t-il
pas la commande \docAuxCommand{tikz} fournie notamment par le
@@ -951,8 +1192,8 @@ commande dédiée \refCom{letgutacro}.
%
qui agit comme :
\begin{itemize}
- \item ×\ac{×\meta{court}×}× en version non étoilée ;
- \item ×\acs{×\meta{court}×}× en version étoilée.
+ \item ⅛\ac{⅛\meta{court}⅛}⅛ en version non étoilée ;
+ \item ⅛\acs{⅛\meta{court}⅛}⅛ en version étoilée.
\end{itemize}
\end{docCommand}
Ainsi, l'acronyme utilisé via \docAuxCommand{\meta{court}} figure, pour ses
@@ -980,9 +1221,7 @@ En outre :
Ainsi, avec les définitions suivantes en préambule :
-\bgroup
-\lstset{deletekeywords={and},deletekeywords=[3]{and,emph,n,german},deletekeywords=[4]{and,TeX}}
-\begin{ltx-code}[title addon=définition d'acronymes,drop lifted shadow]
+\begin{ltx-code}[title addon=définition d'acronymes,listing options app={deletekeywords={[3]{TeX,LaTeX,emph,n,no}}}]
% Acronyme français
\letgutacro{LD}{\LaTeX{} dépendant}
@@ -1013,13 +1252,10 @@ Ainsi, avec les définitions suivantes en préambule :
{Ti\emph{k}Z ist \emph{kein} Zeichenprogramm}
[Ti\emph{k}Z \emph{n'}est \emph{pas} un programme de dessin]
\end{ltx-code}
-\egroup
a-t-on :
-\bgroup
-\lstset{deletekeywords=[3]{cd,tikz,on},deletekeywords=[4]{on},deletekeywords=[6]{cd}}
-\begin{ltx-code-result}[title addon=utilisation d'acronymes]
+\begin{ltx-code-result}[title addon=utilisation d'acronymes,listing options app={deletekeywords={cd},deletekeywords={[3]{cd,tikz,LaTeX,on}},deletekeywords={[6]{cd}},deletekeywords={itemize},morekeywords={[2]{itemize}}}]
On dispose désormais pour \enquote{\LaTeX{} dépendant}
d'un acronyme qu'on peut utiliser par exemple
\begin{itemize}
@@ -1035,28 +1271,21 @@ On peut également employer les acronymes :
\item \ac{tikz}, \ac{tikz}. % Noter le non emploi de `\tikz'
\end{itemize}
\end{ltx-code-result}
-\egroup
Les noms des commandes sous-jacentes ne doivent contenir que des lettres, mais
celles-ci peuvent être accentuées. Ainsi, avec la définition suivante en
préambule :
-\bgroup
-\lstset{deletekeywords=[3]{and}}
\begin{ltx-code}[title addon=définition d'acronyme avec lettres
accentuées,drop lifted shadow]
\letgutacro{CPGÉ}{Classes Préparatoires aux Grandes Écoles}
\end{ltx-code}
-\egroup
a-t-on :
-\bgroup
-\lstset{deletekeywords=[3]{l}}
-\begin{ltx-code-result}[title addon=utilisation d'acronyme avec lettres accentuées]
+\begin{ltx-code-result}[title addon=utilisation d'acronyme avec lettres accentuées,listing options app={deletekeywords={[3]{l}}}]
On peut également employer l'acronyme \cpgé{}, \cpgé{}.
\end{ltx-code-result}
-\egroup
La \letgutcls{} fournit un \file*{letgut-acronyms.tex} dans lequel sont définis
plusieurs acronymes anglais et français, directement utilisables. Ceux-ci sont
@@ -1091,8 +1320,6 @@ insère un filet horizontal.
\end{itemize}
\end{docCommand}
-\bgroup
-\lstset{deletekeywords=[5]{en}}
\begin{ltx-code-result}[title addon=boîtes d'alertes]
\alertbox{%
Adhérez, adhérez, il en restera toujours quelque chose !%
@@ -1103,7 +1330,6 @@ insère un filet horizontal.
Il en restera toujours quelque chose...%
}
\end{ltx-code-result}
-\egroup
\section{Fichier local de configuration}
\label{sec:fichier-local-de}
@@ -1188,13 +1414,7 @@ Ensuite, par exemple depuis un dossier où se trouve un \file*{mon-fichier.tex}
% }%
}) :
-% \begin{listingshell}
-% docker run --rm -it -v $(pwd):/workdir danteev/texlive lualatex mon-fichier
-% \end{listingshell}
-
-\begin{listingshell}
-docker run -i --rm --name latex -v "$PWD":/usr/src/app -w /usr/src/app registry.gitlab.com/islandoftex/images/texlive:latest-with-cache lualatex mon-fichier
-\end{listingshell}
+\terminal{docker run -i --rm --name latex -v "$PWD":/usr/src/app -w /usr/src/app registry.gitlab.com/islandoftex/images/texlive:latest-with-cache lualatex mon-fichier}{}%$
La toute première fois, cela provoque le téléchargement de plusieurs fichiers,
dont celui assez lourd de l'image d'une version allégée de la \tl{}~2021
@@ -1220,9 +1440,7 @@ pour pouvoir compiler au moyen de seulement\footnote{En lançant préalablement
\lstinline[language=bash]+source ~/.bashrc+ (ou assimilé) afin de pouvoir en
bénéficier dans un terminal déjà ouvert.} :
-\begin{listingshell}
-docker-latexmk-lua mon-fichier
-\end{listingshell}
+\terminal{docker-latexmk-lua mon-fichier}{}
\title{Packages chargés par \letgut{}}
\label{sec:packages-charges-par}
@@ -1280,7 +1498,7 @@ dressons ci-après la liste en les regroupant selon ces deux catégories.
\item[babel] support multilingue.
\begin{description}
\item[Options :] \docAuxKey*{english}, \docAuxKey*{french} ;
- \item[Configuration] \lstinline+\renewcommand*\frenchtablename{Tableau}+.
+ \item[Configuration] ⅛\renewcommand*\frenchtablename{Tableau}⅛.
\end{description}
\item[varioref] références de pages intelligentes.
\begin{description}
@@ -1320,11 +1538,11 @@ dressons ci-après la liste en les regroupant selon ces deux catégories.
\item[Options :]\leavevmode{}
\begin{itemize}
\item \docAuxKey*{first-style=footnote} ;
- \item \docAuxKey*{format/short=}\lstinline|\scshape| ;
- \item \docAuxKey*{format/foreign=}\lstinline|\em| ;
+ \item \docAuxKey*{format/short=}⅛\scshape⅛ ;
+ \item \docAuxKey*{format/foreign=}⅛\em⅛ ;
\item \docAuxKey*{foreign/display} ;
\item \docAuxKey*{locale/display} ;
- \item \docAuxKey*{locale/format=}\lstinline|\upshape|.
+ \item \docAuxKey*{locale/format=}⅛\upshape⅛.
\end{itemize}
\end{description}
\item[hyperref] prise en charge étendue de l'hypertexte.
@@ -1384,6 +1602,100 @@ dressons ci-après la liste en les regroupant selon ces deux catégories.
\item[letgut-banner] bannière de la 1\iere{} page de la \lettre{}.
\end{ctannews}
+\section{Exemple de déclaration de dialecte du langage \hologo{TeX}}
+\label{sec:exemple-de-decl}
+
+Nous fournissons ci-dessous un exemple de déclaration de dialecte (ici le
+package \hologo{(La)TeX} \package{graphicx}) du langage \hologo{TeX}
+(cf. section~\enquote{\nameref{sec:coloration}}, \vpageref{sec:coloration}).
+
+\begin{ltx-code}[listing options app={deletekeywords={[3]{
+ ,draft
+ ,final
+ ,setpagesize
+ ,dvips
+ ,dvipdfm
+ ,dvipdfmx
+ ,xetex
+ ,pdftex
+ ,dvipsone
+ ,dviwindo
+ ,textures
+ ,vtex
+ ,alt
+ ,width
+ ,height
+ ,totalheight
+ ,scale
+ ,clip
+ ,draft
+ ,type
+ ,command
+ ,page
+}}},
+listing options app={deletekeywords={[4]{
+ ,draft
+ ,final
+ ,dvips
+ ,dvipdfm
+ ,dvipdfmx
+ ,xetex
+ ,pdftex
+ ,luatex
+ ,vtex
+ ,scale
+ ,true
+ ,false
+}}}]
+\lst@definelanguage[graphicx]{TeX}[LaTeX]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ DeclareGraphicsExtensions,DeclareGraphicsRule,graphicspath,%
+ includegraphics*,includegraphics,reflectbox,resizebox*,%
+ resizebox,rotatebox,scalebox,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters
+ % (since of the same class as the ones specified as
+ % 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments)
+ % & optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ draft,final,hiresbb,demo,setpagesize,nosetpagesize,dvips,xdvi,%
+ dvipdf,dvipdfm,dvipdfmx,xetex,pdftex,luatex,dvisvgm,dvipsone,%
+ dviwindo,emtex,dviwin,oztex,textures,pctexps,pctexwin,pctexhp,%
+ pctex32,truetex,tcidvi,vtex,debugshow,hiderotate,hidescale,%
+ alt,%
+ %
+ bb,bbllx,bblly,bburx,bbury,natwidth,natheight,hiresbb,pagebox,%
+ viewport,trim,angle,origin,width,height,totalheight,%
+ keepaspectratio,scale,clip,type,ext,read,command,quiet,page,%
+ interpolate,decodearray,origin,x,y,units,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ mediabox,cropbox,bleedbox,trimbox,artbox,true,false,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":"
+ % in expl3 syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly
+ % derived packages)
+ morekeywords=[6]{%
+ graphicx,%
+ },%
+ % otherkeywords={},%
+ alsoletter={23},%
+ % alsodigit={},%
+ sensitive,%
+}[keywords,tex,comments]%
+\end{ltx-code}
+
\printacronyms[
, heading=title
% , template=longtable
diff --git a/macros/luatex/latex/letgut/doc/listings-conf.tex b/macros/luatex/latex/letgut/doc/listings-conf.tex
index dd58a10716..99ac8206f4 100644
--- a/macros/luatex/latex/letgut/doc/listings-conf.tex
+++ b/macros/luatex/latex/letgut/doc/listings-conf.tex
@@ -1,40 +1,7 @@
-\lstset{
- backgroundcolor=\color{__letgut_backgroundCode},
- rulecolor=\color{__letgut_borderCode},
- frame=single,
- aboveskip=\medskipamount,
- breaklines=false,
-}
-
-\lstset{
- language=TeX,%
- alsolanguage=[geometry]TeX,%
- alsolanguage=[LaTeX]TeX,%
- alsolanguage=[plain]TeX,%
- alsolanguage=[common]TeX,%
- alsolanguage=[primitive]TeX,%
- alsolanguage=[classes]TeX,%
- alsolanguage=[xcolor]TeX,%
- alsolanguage=[listings]TeX,%
- alsolanguage=[biblatex]TeX,%
- alsolanguage=[hyperref]TeX,%
- alsolanguage=[xparse]TeX,%
- alsolanguage=[lthooks]TeX,%
- alsolanguage=[extLaTeX]TeX,%
- alsolanguage=[letgut]TeX,%
- alsolanguage=[hologo]TeX,%
- alsolanguage=[acro]TeX,%
- alsolanguage=[tcolorbox]TeX,%
- alsolanguage=[graphicx]TeX,%
- alsolanguage=[csquotes]TeX,%
- alsolanguage=[varioref]TeX,%
- alsolanguage=[babel-french]TeX,%
- alsolanguage=[l3keys2e]TeX,%
- alsolanguage=[expl3]TeX,%
-}
-
% We need to disable `escapechar=£' enabled by the class in order to avoid this
% to make a mess in the listing which contains it.
\lstset{
escapechar=,%
}
+% Strangely, we can't rely on \syntaxhl{expl3}. To be checked!
+\lstset{alsolanguage=[expl3]TeX}
diff --git a/macros/luatex/latex/letgut/doc/localconf.tex b/macros/luatex/latex/letgut/doc/localconf.tex
index d7834205ee..32eab1c21e 100644
--- a/macros/luatex/latex/letgut/doc/localconf.tex
+++ b/macros/luatex/latex/letgut/doc/localconf.tex
@@ -22,26 +22,9 @@
\let\/\relax%
}
-\makeatletter
-\lst@InputCatcodes
-\def\lst@DefEC{%
- \lst@CCECUse \lst@ProcessLetter
- ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f%
- ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f%
- ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af%
- ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf%
- ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf%
- ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df%
- ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef%
- ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff%
- ^^^^201c^^^^201d% nouveaux pour “ et ”
- ^^00}
-\lst@RestoreCatcodes
-\makeatother
-
\ExplSyntaxOn
-\lstMakeShortInline×
+\lstset{style=__letgut_latex_listings_style}
\lstdefinelanguage{extrabash}{%
morekeywords={%
@@ -78,35 +61,6 @@
keywords~ bold=false
}%
-\DeclareTotalTCBox{\commandshell}{ v }{ commandshell}{#1}
-\newtcblisting{listingshell}[1][]{%
- % colback=black,
- % colupper=white,
- colback=white,
- colupper=black,
- colframe=yellow!75!black,
- breakable,
- listing~ only,
- listing~ options={%
- style=tcblatex,
- language=bash,
- alsolanguage=extrabash,%
- basicstyle=\footnotesize\ttfamily,
- escapeinside={(*@}{@*)},
- upquote=true,
- showstringspaces=false
- },
- every~ listing~ line={%
- \textcolor{red}{%
- \small\ttfamily\bfseries%
- \BeginAccSupp{method=plain,ActualText={}}
- \$~
- \EndAccSupp{}%
- }
- },
- #1
-}
-
\renewcommand*{\tcbdocnew}[1]{
\scriptsize\sffamily\textcolor{green!50!black}{\bfseries
Nouv. :} #1}
diff --git a/macros/luatex/latex/letgut/source/HOWTO.md b/macros/luatex/latex/letgut/source/HOWTO.md
index 678ece4f0c..b46c66817a 100644
--- a/macros/luatex/latex/letgut/source/HOWTO.md
+++ b/macros/luatex/latex/letgut/source/HOWTO.md
@@ -6,18 +6,18 @@ In order to:
from the Org Mode source files `letgut.org` and `letgut-banner.org`:
-- it is necessary a reasonably recent version of Emacs,
-- it is then sufficient to run (in a directory containing the `letgut.el` file
+- it is necessary to have a reasonably recent version of Emacs,
+- it is then sufficient to run (in a directory containing the `build-letgut.el` file
to be found in the current directory):
- for the `letgut` class:
- emacs -Q letgut.org --batch -l letgut.el -f org-babel-tangle --kill
- emacs -Q letgut.org --batch -l letgut.el -f org-latex-export-to-pdf --kill
+ emacs -Q letgut.org --batch -l build-letgut.el -f org-babel-tangle --kill
+ emacs -Q letgut.org --batch -l build-letgut.el -f org-latex-export-to-pdf --kill
- for the `letgut-banner` package:
- emacs -Q letgut-banner.org --batch -l letgut.el -f org-babel-tangle --kill
- emacs -Q letgut-banner.org --batch -l letgut.el -f org-latex-export-to-pdf --kill
+ emacs -Q letgut-banner.org --batch -l build-letgut.el -f org-babel-tangle --kill
+ emacs -Q letgut-banner.org --batch -l build-letgut.el -f org-latex-export-to-pdf --kill
This creates the files `letgut.cls`, `letgut-banner.sty`, `letgut-code.tex` and
`letgut-banner-code.tex`.
diff --git a/macros/luatex/latex/letgut/source/letgut-banner.org b/macros/luatex/latex/letgut/source/letgut-banner.org
index 6769c17905..b9c59dcee8 100644
--- a/macros/luatex/latex/letgut/source/letgut-banner.org
+++ b/macros/luatex/latex/letgut/source/letgut-banner.org
@@ -1,6 +1,6 @@
# Hey, Emacs! This is a -*- mode: org -*- file!
-#+TITLE: Support for the banner of the newsletter “La Lettre de GUTenberg”
+#+TITLE: Support for the banner of the newsletter "La Lettre de GUTenberg"
#+AUTHOR: Association GUTenberg
#+EMAIL: secretariat@gutenberg.eu.org
#+DESCRIPTION: ...
@@ -19,24 +19,24 @@
# #+LaTeX_HEADER: \input{codehigh-conf}
# #+LaTeX_HEADER: \letgutsetup{editorial=false,final}
-#+PROPERTY: header-args :padline no :tangle letgut-banner.sty :exports both :noweb yes :eval always
-#+export_file_name: letgut-banner-code
+#+PROPERTY: header-args :padline no :tangle ../../../tex/lualatex/letgut/letgut-banner.sty :exports both :noweb yes :eval always
+#+export_file_name: ../../../doc/lualatex/letgut/letgut-banner-code
-* Readme file :noexport:
+* Readme file
-#+begin_src markdown :tangle README.md :exports none
+#+begin_src markdown :tangle no :exports none
letgut-banner - Support for the banner of the newsletter
- “La Lettre de GUTenberg”
+ "La Lettre de GUTenberg"
=============================================================
About
-------
- This package automatically draw the banner of the newsletter “La Lettre de
- GUTenberg” with the current main font.
+ This package automatically draw the banner of the newsletter "La Lettre de
+ GUTenberg" with the current main font.
Release
-------
- 2022-03-22 v0.9.1
+ 2022-03-17 v0.9
Development
-----------
@@ -44,39 +44,43 @@
https://framagit.org/gutenberg/classe-lettre-gut.
#+end_src
-* Identification
-
-#+begin_src latex
-% This is file `letgut.cls',
-% generated with the Emacs Org-babel utility.
-%
-% The original source file is letgut-banner.org
-%
-% -------------:| ---------------------------------------------------
-% letgut-banner:| Package for the banner of the newsletter
-% | “La Lettre GUTenberg”
-% Author:| Association GUTenberg
-% E-mail:| secretariat@gutenberg.eu.org
-% License:| Released under the LaTeX Project Public License
-% | v1.3c or later
-% See:| http://www.latex-project.org/lppl.txt
-%
-% Copyright (C) 1994-2022 by Association GUTenberg
-% <secretariat@gutenberg.eu.org>
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License (LPPL), either
-% version 1.3c of this license or (at your option) any later
-% version. The latest version of this license is in the file:
-%
-% http://www.latex-project.org/lppl.txt
-%
-% This work is “maintained” (as per LPPL maintenance status)
-% by Association GUTenberg.
+#+NAME: preamble
+#+begin_src
+-------:| ---------------------------------------------------
+ letgut:| Package for the banner of the newsletter
+ | "La Lettre de GUTenberg"
+ Author:| Association GUTenberg
+ E-mail:| secretariat@gutenberg.eu.org
+License:| Released under the LaTeX Project Public License
+ | v1.3c or later
+ See:| http://www.latex-project.org/lppl.txt
+
+Copyright (C) 1994-2022 by Association GUTenberg
+ <secretariat@gutenberg.eu.org>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License (LPPL), either
+version 1.3c of this license or (at your option) any later
+version. The latest version of this license is in the file:
+
+http://www.latex-project.org/lppl.txt
+
+This work is "maintained" (as per LPPL maintenance status)
+by Association GUTenberg.
#+end_src
* Implementation
+** Identification
+
+#+begin_src
+ This is file `letgut-banner.sty,
+ generated with the Emacs Org-babel utility.
+
+ The original source file is letgut-banner.org
+ %% <<preamble>>
+#+end_src
+
These document classes can only be used with \LaTeXe, so we make
sure that an appropriate message is displayed when another \TeX{}
format is used.
@@ -89,10 +93,10 @@ Now, we can announce the package name and its version:
#+begin_src latex
\ProvidesExplPackage{letgut-banner}
-{2022-03-22}
-{0.9.1}
+{2022-03-17}
+{0.9}
{
- Package for the banner of the newsletter “La Lettre de GUTenberg”
+ Package for the banner of the newsletter "La Lettre de GUTenberg"
}
#+end_src
@@ -122,7 +126,7 @@ reader who wants to copy the interesting text be able to select it (see below).
What follows has to be done at this end of the preamble, otherwise the font set
with ~\setmainfont~ in the preamble isn't taken in account in the banner.
-We define an option for the color of the text in the “L” (that has to be the
+We define an option for the color of the text in the "L" (that has to be the
same as the page color of the document).
#+begin_src latex
@@ -224,7 +228,7 @@ same as the page color of the document).
- Dimensions of the banner. If the present package is used with the
\class*{letgut}, they are borrowed from it. Otherwise, they are set to
default values.
- - Thickness of the “L”.
+ - Thickness of the "L".
#+begin_src latex
\dim_if_exist:NTF \c__letgut_banner_thickness_dim {
\dim_const:NV \c__letgutbanner_banner_thickness_dim
@@ -234,7 +238,7 @@ same as the page color of the document).
{ 4cm }
}
#+end_src
- - Height of the “L” (that of the text area plus 3cm).
+ - Height of the "L" (that of the text area plus 3cm).
#+begin_src latex
\dim_if_exist:NTF \c__letgut_banner_height_dim {
\dim_const:NV \c__letgutbanner_banner_height_dim
@@ -247,13 +251,13 @@ same as the page color of the document).
}
}
#+end_src
- - Initial padding of the text embedded in the vertical bar of the “L”.
+ - Initial padding of the text embedded in the vertical bar of the "L".
#+begin_src latex
\dim_const:Nn \c__letgutbanner_banner_padding_dim { .25cm }
#+end_src
- - Width of the “L” (the width ($w$) of the text zone plus the width ($l$) of
+ - Width of the "L" (the width ($w$) of the text zone plus the width ($l$) of
the left margin minus half the difference between the width of the left
- margin and the width ($d$) of the “L”: $=w+l-(l-d)/2=w+(l+d)/2$).
+ margin and the width ($d$) of the "L": $=w+l-(l-d)/2=w+(l+d)/2$).
#+begin_src latex
\dim_const:Nn \c__letgutbanner_banner_width_dim {
\c__letgutbanner_textwidth_dim
@@ -265,7 +269,7 @@ same as the page color of the document).
)/2
}
#+end_src
- - Initial width of the text embedded in the “L” vertical bar.
+ - Initial width of the text embedded in the "L" vertical bar.
#+begin_src latex
\dim_const:Nn
\c__letgutbanner_banner_vertical_contents_width_dim {
@@ -274,10 +278,10 @@ same as the page color of the document).
2\c__letgutbanner_banner_padding_dim
}
#+end_src
- - Width of the text embedded in the horizontal bar of the “L” (of the text
+ - Width of the text embedded in the horizontal bar of the "L" (of the text
area plus half the difference between that of the left margin and that of
- the thickness of the “L”, minus the padding -- and not 2 times the
- padding because this text will be stuck to its left “margin”).
+ the thickness of the "L", minus the padding -- and not 2 times the
+ padding because this text will be stuck to its left "margin").
#+begin_src latex
\dim_const:Nn
\c__letgutbanner_banner_horizontal_contents_width_dim {
@@ -294,7 +298,7 @@ same as the page color of the document).
*** Boxes
-New boxes, for each of the letters in the word “LETTRE” (!), and then for the
+New boxes, for each of the letters in the word "LETTRE" (!), and then for the
rest of the content listed in the banner.
#+begin_src latex
\box_new:N \g__letgutbanner_L_box
@@ -309,13 +313,13 @@ rest of the content listed in the banner.
*** Floating point numbers
-- Minimum percentage of the common height of the letters of the word “LETTRE”
+- Minimum percentage of the common height of the letters of the word "LETTRE"
that their line spacing must represent.
#+begin_src latex
\fp_const:Nn \c__letgutbanner_leading_minimum_percent_fp { 0.15 }
#+end_src
-- Factor applied to the line spacing between “La” and the 1st letter of
- “LETTRE” compared to that between the letters of “LETTRE”.
+- Factor applied to the line spacing between "La" and the 1st letter of
+ "LETTRE" compared to that between the letters of "LETTRE".
#+begin_src latex
\fp_const:Nn \c__letgutbanner_leading_La_factor_fp { 1.5 }
#+end_src
@@ -352,7 +356,7 @@ rest of the content listed in the banner.
** Computations
-Determination of the widths of each of the letter boxes of the word “LETTRE”.
+Determination of the widths of each of the letter boxes of the word "LETTRE".
#+begin_src latex
\dim_const:Nn \c__letgutbanner_L_width_dim {
\box_wd:N \g__letgutbanner_L_box
@@ -394,14 +398,14 @@ it were).
}
{ No~ idea! }
#+end_src
-Resize the box containing “GUTenberg” to the width of the text embedded in the
-horizontal bar of the “L”.
+Resize the box containing "GUTenberg" to the width of the text embedded in the
+horizontal bar of the "L".
#+begin_src latex
\box_gresize_to_wd:Nn \g__letgutbanner_GUTenberg_box {
\c__letgutbanner_banner_horizontal_contents_width_dim
}
#+end_src
-Determination of the height and depth of the box containing “GUTenberg” resized.
+Determination of the height and depth of the box containing "GUTenberg" resized.
#+begin_src latex
\dim_const:Nn \c__letgutbanner_GUTenberg_height_dim {
\box_ht:N \g__letgutbanner_GUTenberg_box
@@ -411,12 +415,12 @@ Determination of the height and depth of the box containing “GUTenberg” resi
}
#+end_src
Determining the size of the vertical offset of the box containing the resized
-“GUTenberg”, so that it is vertically centered in the horizontal bar of the “L”:
+"GUTenberg", so that it is vertically centered in the horizontal bar of the "L":
the box positioned in $0$ would be at the very bottom of the box containing the
-banner so with base line at the bottom the horizontal bar of the “L” so we raise
+banner so with base line at the bottom the horizontal bar of the "L" so we raise
it first by its depth ($d$) and then by half the difference between the heights
-($H$) of the horizontal bar of the “L” and ($h+d$) total of the box containing
-“GUTenberg” resized ($=d+H/2-(h+d)/2=(H-h+d)/2$).
+($H$) of the horizontal bar of the "L" and ($h+d$) total of the box containing
+"GUTenberg" resized ($=d+H/2-(h+d)/2=(H-h+d)/2$).
#+begin_src latex
\dim_const:Nn \c__letgutbanner_GUTenberg_yoffset_dim {
(
@@ -428,11 +432,11 @@ it first by its depth ($d$) and then by half the difference between the heights
)/2
}
#+end_src
-Once the height of the zone devoted to “La LETTRE” in the vertical bar of the
-“L” has been fixed, the line spacing between the letters of the word “LETTRE”
+Once the height of the zone devoted to "La LETTRE" in the vertical bar of the
+"L" has been fixed, the line spacing between the letters of the word "LETTRE"
depends in fact only on the width occupied by the widest of them, by definition
equal to the width allocated to the text embedded in the vertical bar of the
-“L”. The latter, stored in ~\g__letgutbanner_banner_vertical_contents_width_dim~, is
+"L". The latter, stored in ~\g__letgutbanner_banner_vertical_contents_width_dim~, is
initially fixed:
#+begin_src latex
\dim_gset:Nn
@@ -441,7 +445,7 @@ initially fixed:
#+end_src
but, to avoid this line spacing being too small (or even negative), we test that
it is greater than a certain threshold, equal to a certain minimum percentage of
-the height common to the letters of the word “LETTRE”, stored in:
+the height common to the letters of the word "LETTRE", stored in:
~\c__letgutbanner_leading_minimum_percent_fp~
@@ -461,7 +465,7 @@ and loop until it is the case.
\g__letgutbanner_largest_LETR_box_height_dim
}{
#+end_src
-Resize the largest of these boxes to the width of the text embedded in the “L”.
+Resize the largest of these boxes to the width of the text embedded in the "L".
#+begin_src latex
\box_gresize_to_wd:Nn \g__letgutbanner_largest_LETR_box {
\g__letgutbanner_banner_vertical_contents_width_dim
@@ -473,7 +477,7 @@ Height of this resized larger box.
\box_ht:N \g__letgutbanner_largest_LETR_box
}
#+end_src
-Resize the boxes for each of the letters in the word “LETTRE” so that they are
+Resize the boxes for each of the letters in the word "LETTRE" so that they are
all the same height as the widest of them.
#+begin_src latex
\box_gresize_to_ht:Nn \g__letgutbanner_L_box {
@@ -489,14 +493,14 @@ all the same height as the widest of them.
\g__letgutbanner_largest_LETR_box_height_dim
}
#+end_src
-Resize the box containing “La” to the width of the text embedded in the “L”
+Resize the box containing "La" to the width of the text embedded in the "L"
vertical bar.
#+begin_src latex
\box_gresize_to_wd:Nn \g__letgutbanner_La_box {
\g__letgutbanner_banner_vertical_contents_width_dim
}
#+end_src
-Determine the height ($h$) and depth ($d$) of the resized box containing “La”.
+Determine the height ($h$) and depth ($d$) of the resized box containing "La".
#+begin_src latex
\dim_gset:Nn \g__letgutbanner_La_height_dim {
\box_ht:N \g__letgutbanner_La_box
@@ -505,11 +509,11 @@ Determine the height ($h$) and depth ($d$) of the resized box containing “La
\box_dp:N \g__letgutbanner_La_box
}
#+end_src
-Determining the size of the vertical offset of the resized box containing “La”
-so that its top is, relative to the top of the “L”, offset by the same amount as
-the bottom of the box containing “GUTenberg” is offset from the bottom of the
-“L” (i.e., the distance from the top of the page to the top of “La” and the
-distance from the bottom of the page to the baseline of “GUTenberg” are
+Determining the size of the vertical offset of the resized box containing "La"
+so that its top is, relative to the top of the "L", offset by the same amount as
+the bottom of the box containing "GUTenberg" is offset from the bottom of the
+"L" (i.e., the distance from the top of the page to the top of "La" and the
+distance from the bottom of the page to the baseline of "GUTenberg" are
identical).
#+begin_src latex
\dim_gset:Nn \g__letgutbanner_La_yoffset_dim {
@@ -522,10 +526,10 @@ identical).
\g__letgutbanner_La_depth_dim
}
#+end_src
-For the following, the area containing the letters of the word “LETTRE” aligned
+For the following, the area containing the letters of the word "LETTRE" aligned
vertically is fixed, defined as follows:
- - its top is the baseline of “La”,
- - its bottom is the baseline of “GUTenberg”.
+ - its top is the baseline of "La",
+ - its bottom is the baseline of "GUTenberg".
Determination of the height of this area.
#+begin_src latex
\dim_gset:Nn \g__letgutbanner_area_height_dim {
@@ -536,22 +540,22 @@ Determination of the height of this area.
\c__letgutbanner_GUTenberg_yoffset_dim
}
#+end_src
-Determining the vertical jump ($s$) between the letters in the word “LETTRE”
+Determining the vertical jump ($s$) between the letters in the word "LETTRE"
with the constraints that:
- - the top of the 1st letter (“L”) is $3e/2$ below the top of the area (where
+ - the top of the 1st letter ("L") is $3e/2$ below the top of the area (where
$e$ is the common vertical space separating the letters of the word
- “LETTRE”),
- - the baseline of the last letter (“E”) is merged with the bottom of the area,
+ "LETTRE"),
+ - the baseline of the last letter ("E") is merged with the bottom of the area,
- this jump must not be less than 20 % of the common height $h$ to all these
letters i.e.:
~\g__letgutbanner_largest_LETR_box_height_dim~
otherwise the size of the largest of these boxes is reduced to less than the
- width of the text embedded in the “L”.
+ width of the text embedded in the "L".
The sum of :
- - the 5 vertical spaces ($5e$) between the letters in the word “LETTRE”,
+ - the 5 vertical spaces ($5e$) between the letters in the word "LETTRE",
- the 6 common heights ($6h$) to all these letters,
- $3e/2$,
must equal the height ($H$) of the zone. So we have $H=3e/2+5e+6h$, that is
@@ -585,7 +589,7 @@ $s=e+h$ that is $s=(2H+h)/13$. Therefore:
}
}
#+end_src
-The width allocated to the text embedded in the vertical bar of the “L” may have
+The width allocated to the text embedded in the vertical bar of the "L" may have
been re-evaluated, so the padding (which must be symmetrical) may have changed
as well.
#+begin_src latex
@@ -597,7 +601,7 @@ as well.
)/2
}
#+end_src
-4. Determination of the vertical offset of the 1st letter (“L”).
+4. Determination of the vertical offset of the 1st letter ("L").
#+begin_src latex
\dim_const:Nn \c__letgutbanner_first_letter_yoffset_dim {
\g__letgutbanner_La_yoffset_dim
@@ -616,7 +620,7 @@ as well.
\g__letgutbanner_largest_LETR_box_height_dim
}
#+end_src
-Resize the box containing “g” to the width of the text.
+Resize the box containing "g" to the width of the text.
#+begin_src latex
\box_gresize_to_wd:Nn \g__letgutbanner_g_box {
\c__letgutbanner_textwidth_dim
@@ -625,9 +629,9 @@ Resize the box containing “g” to the width of the text.
Calculates the size by which the height of the text box on the 1st page must be
reduced so that the banner does not encroach on the text. Relative to the top of
the page:
- - the top of the horizontal bar of “L” is at a distance equal to the sum of :
+ - the top of the horizontal bar of "L" is at a distance equal to the sum of :
- the distance between this top of page and the top of the vertical bar of
- “L”, equal to the height ($p$) of the paper minus the height ($l$) of “L”
+ "L", equal to the height ($p$) of the paper minus the height ($l$) of "L"
#+begin_src latex
\dim_gset:Nn \g__letgutbanner_first_page_shrink_dim {
\c__letgutbanner_tmargin_dim
@@ -652,7 +656,7 @@ reader who wants to copy the interesting text be able to select it.
#+begin_src latex
\BeginAccSupp{ActualText={}}
#+end_src
-We put now the big “L” at the right place.
+We put now the big "L" at the right place.
#+begin_src latex
\put(
.5\c__letgutbanner_lmargin_dim-.5\c__letgutbanner_banner_thickness_dim
@@ -770,7 +774,7 @@ We close ~\AddToHook{begindocument}~.
#+end_src
If the package is used with another class than \class{letgut}, we reduce the
-textheight of the first page of the height of the horizontal bar of the “L”.
+textheight of the first page of the height of the horizontal bar of the "L".
#+begin_src latex
\@ifclassloaded{letgut}{
@@ -786,7 +790,7 @@ textheight of the first page of the height of the horizontal bar of the “L”.
* Example file (=letgut-banner-example.tex=)
-#+begin_src latex :tangle letgut-banner-example.tex :exports both
+#+begin_src latex :tangle ../../../doc/lualatex/letgut/letgut-banner-example.tex :exports none
\documentclass[twoside]{article}
\usepackage{fontspec}
\usepackage[a4paper]{geometry}
diff --git a/macros/luatex/latex/letgut/source/letgut.org b/macros/luatex/latex/letgut/source/letgut.org
index b4244888a2..39a3a2f6db 100644
--- a/macros/luatex/latex/letgut/source/letgut.org
+++ b/macros/luatex/latex/letgut/source/letgut.org
@@ -17,17 +17,18 @@
#+LaTeX_HEADER: \letgutsetup{editorial=false}
#+LaTeX_HEADER: \input{listings-conf}
# #+LaTeX_HEADER: \input{codehigh-conf}
+#+LaTeX_HEADER: \letgutsetup{detailedtoc}
# #+LaTeX_HEADER: \letgutsetup{editorial=false,final}
-#+PROPERTY: header-args :padline no :tangle letgut.cls :exports both :noweb yes :eval always
-#+export_file_name: letgut-code
+#+PROPERTY: header-args :padline no :mkdirp yes :tangle ../../../tex/lualatex/letgut/letgut.cls :exports both :noweb yes :eval always
+#+export_file_name: ../../../doc/lualatex/letgut/letgut-code
* Ctanomat file :noexport:
-We crete here a ~ctanomat~ description file in order to simplify the upload of
+We create here a ~ctanomat~ description file in order to simplify the upload of
new versions of the class on CTAN.
-#+begin_src markdown :tangle letgut.pkg
+#+begin_src markdown :tangle ../../../letgut.pkg
% This is a description file for ctan-o-mat.
% It manages uploads of a package to
% CTAN -- the Comprehensive TeX Archive Network.
@@ -50,7 +51,7 @@ new versions of the class on CTAN.
% This field contains the version of the package.
% The value is optional.
% The value is restricted to 32 characters.
- \version{0.9.1 2022-03-22}
+ \version{0.9.2 2022-06-18}
% -------------------------------------------------------------------------
% This field contains the name of the author(s).
% The value is optional.
@@ -89,7 +90,7 @@ new versions of the class on CTAN.
% The value is a URL.
% The value is restricted to 255 characters.
% Multiple values are allowed.
- \bugtracker{https://framagit.org/gutenberg/classe-lettre-gut/-/issues}
+ \bugtracker{https://framagit.org/gutenberg/letgut/-/issues}
% -------------------------------------------------------------------------
% This field contains the support channel.
% The value is optional.
@@ -103,14 +104,14 @@ new versions of the class on CTAN.
% The value is a URL.
% The value is restricted to 255 characters.
% Multiple values are allowed.
- \repository{https://framagit.org/gutenberg/classe-lettre-gut/}
+ \repository{https://framagit.org/gutenberg/letgut/}
% -------------------------------------------------------------------------
% This field contains the developer's channel.
% The value is optional.
% The value is a URL.
% The value is restricted to 255 characters.
% Multiple values are allowed.
- \development{https://framagit.org/gutenberg/classe-lettre-gut/-/merge_requests}
+ \development{https://framagit.org/gutenberg/letgut/-/merge_requests}
% -------------------------------------------------------------------------
% This field contains the update indicator; true for update.
% The value is optional.
@@ -127,6 +128,33 @@ new versions of the class on CTAN.
% The value is optional.
% The value is restricted to 8192 characters.
\begin{announcement}
+ ## [0.9.2] - 2022-06-18
+
+ ### Added
+ - Listings for commands in terminals.
+ - Aliases of frequently used commands.
+ - New commands for frequently used terms or expressions.
+ - Command for specifying LaTeX packages that benefit from syntax highlighting.
+ - Own ~listings~' language driver file for LaTeX packages syntax highlighting.
+ - Commands for keyboard keys of accentuated characters.
+ - ~detailedtoc~ option for Lettre's structure checking.
+ - Mimic the multiple option of the footmisc package.
+ - Command ~\inputarticle~ (instead of ~\input~) for the input of articles.
+ - ⅛ as a short equivalent of ~\lstinline~.
+ - Some tweaks and improvements.
+
+ ### Changed
+ - Last names of persons and authors not in small caps anymore.
+ - \tl isn't an acronym anymore and now typesets “TeX Live”.
+ - All the acronyms reset at the beginning of each ~\inputarticle~-ed article.
+ - All options now possibly load-time ones.
+ - Unlikely to change input files searched:
+ 1. in the parent directory if not in the current one,
+ 2. in the TDS.
+ - Right ISSN in case of “paper” version of la Lettre.
+
+ ### Fixed
+ Several bugs.
\end{announcement}
% -------------------------------------------------------------------------
% This field contains the one-liner for the package.
@@ -183,30 +211,58 @@ new versions of the class on CTAN.
* Changelog file :noexport:
-#+begin_src markdown :tangle CHANGELOG.md
+#+begin_src markdown :tangle ../../../doc/lualatex/letgut/CHANGELOG.md
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic
- Versioning](http://semver.org/spec/v2.0.0.html).
+ Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
+ ## [0.9.2] - 2022-06-18
+
+ ### Added
+ - Listings for commands in terminals.
+ - Aliases of frequently used commands.
+ - New commands for frequently used terms or expressions.
+ - Command for specifying LaTeX packages that benefit from syntax highlighting.
+ - Own ~listings~' language driver file for LaTeX packages syntax highlighting.
+ - Commands for keyboard keys of accentuated characters.
+ - ~detailedtoc~ option for Lettre's structure checking.
+ - Mimic the multiple option of the footmisc package.
+ - Command ~\inputarticle~ (instead of ~\input~) for the input of articles.
+ - ⅛ as a short equivalent of ~\lstinline~.
+ - Some tweaks and improvements.
+
+ ### Changed
+ - Last names of persons and authors not in small caps anymore.
+ - \tl isn't an acronym anymore and now typesets “TeX Live”.
+ - All the acronyms reset at the beginning of each ~\inputarticle~-ed article.
+ - All options now possibly load-time ones.
+ - Unlikely to change input files searched:
+ 1. in the parent directory if not in the current one,
+ 2. in the TDS.
+ - Right ISSN in case of “paper” version of la Lettre.
+
+ ### Fixed
+ Several bugs.
+
## [0.9.1] - 2022-03-22
### Changed
- File renamed (Karl Berry request)
+ File renamed (Karl Berry request).
## [0.9] - 2022-03-18
### Added
- First public testing release
+ First public testing release.
#+end_src
* Readme file :noexport:
-#+begin_src markdown :tangle README.md
+#+begin_src markdown :tangle ../../../doc/lualatex/letgut/README.md
letgut - Support for the newsletter “La Lettre GUTenberg”
=========================================================
@@ -217,12 +273,12 @@ to the newsletter “La Lettre GUTenberg” of GUTenberg, the French TeX User Gr
Release
-------
-2022-03-22 v0.9.1
+2022-06-18 v0.9.2
Development
-----------
Follow development, submit issues and suggest improvements at
-https://framagit.org/gutenberg/classe-lettre-gut.
+https://framagit.org/gutenberg/letgut.
#+end_src
* How to :noexport:
@@ -232,8 +288,8 @@ We explain in a \file*{HOWTO.md} file how to:
- tangle the \file*{letgut.cls} and \file*{letgut-banner.sty},
- build the:
- documented codes \file*{letgut-code.pdf} and \file*{letgut-banner-code.pdf}
- of the classe and the package,
- - \file*{letgut.pdf} of the class
+ of the class and the package,
+ - \file*{letgut.pdf} of the class,
from the \software[https://orgmode.org/]{Org Mode} source files
\file*{letgut.org} and \file*{letgut-banner.org}.
@@ -247,18 +303,18 @@ In order to:
from the Org Mode source files `letgut.org` and `letgut-banner.org`:
-- it is necessary a reasonably recent version of Emacs,
-- it is then sufficient to run (in a directory containing the `letgut.el` file
+- it is necessary to have a reasonably recent version of Emacs,
+- it is then sufficient to run (in a directory containing the `build-letgut.el` file
to be found in the current directory):
- for the `letgut` class:
- emacs -Q letgut.org --batch -l letgut.el -f org-babel-tangle --kill
- emacs -Q letgut.org --batch -l letgut.el -f org-latex-export-to-pdf --kill
+ emacs -Q letgut.org --batch -l build-letgut.el -f org-babel-tangle --kill
+ emacs -Q letgut.org --batch -l build-letgut.el -f org-latex-export-to-pdf --kill
- for the `letgut-banner` package:
- emacs -Q letgut-banner.org --batch -l letgut.el -f org-babel-tangle --kill
- emacs -Q letgut-banner.org --batch -l letgut.el -f org-latex-export-to-pdf --kill
+ emacs -Q letgut-banner.org --batch -l build-letgut.el -f org-babel-tangle --kill
+ emacs -Q letgut-banner.org --batch -l build-letgut.el -f org-latex-export-to-pdf --kill
This creates the files `letgut.cls`, `letgut-banner.sty`, `letgut-code.tex` and
`letgut-banner-code.tex`.
@@ -347,11 +403,10 @@ Now, we can announce the class name and its version:
#+begin_src latex
\ProvidesExplClass{letgut}
- {2022-03-22}
- {0.9.1}
+ {2022-03-17}
+ {0.9}
{
- Class~ for~ the~ newsletter~
- “\c__letgut_La_lettre_gutenberg_tl”
+ Class for the newsletter “The GUTenberg Letter”
}
#+end_src
@@ -438,6 +493,10 @@ Some messages are declared for future use.
#+begin_src latex
\bool_new:N \l__letgut_in_footnote_bool
#+end_src
+- For testing whether we currently ask the draft or the final version.
+ #+begin_src latex
+ \bool_new:N \g__letgut_draft_bool
+ #+end_src
*** Dimensions
@@ -642,60 +701,78 @@ We close the ~\AddToHook{begindocument/before}~ argument.
**** Constant ones
#+begin_src latex
- \tl_const:Nn \c__letgut_cahier_tl { \emph{ Cahier } }
- \tl_const:Nn \c__letgut_cahiers_tl {
- \c__letgut_cahier_tl \emph{ s }
- }
- \tl_const:Nn \c__letgut_tugboat_tl { \emph{ TUGboat } }
- \tl_const:Nn \c__letgut_banner_file_tl { bandeau }
- \tl_const:Nn \c__letgut_editorial_file_tl { editorial }
- \tl_const:Nn \c__letgut_informations_gutenberg_file_tl {
- informations-gut
- }
- \tl_const:Nn \c__letgut_acronyms_file_tl { letgut-acronyms }
- \tl_const:Nn \c__letgut_local_config_file_tl { localconf }
- \tl_const:Nn \c__letgut_contents_name_tl { Sommaire }
- \tl_const:Nn \c__letgut_draftwatermark_text_tl {
- \textnormal{Brouillon}
- }
- \tl_const:Nn \c__letgut_membership_reminder_tl {
- {\LARGE
- \bfseries
- Avez-vous~ pensé~ à~ régler~ votre~ cotisation~ ?
- % \the\year~ ?
- \par
- \medskip
- }
- Si~ vous~ avez~ oublié,~ ce~ n'est~ ni~ trop~ tard~
- ni~ difficile~ :
- \par
- \url{http://gutenberg.eu.org/?Adherer-en-ligne}
- \bool_if:NT \g__letgut_informations_bool {
- \file_if_exist:nT
- {./\c__letgut_informations_gutenberg_file_tl}{
- \par
- Voir~ aussi~ page~ \pageref{letgut_label_adhesions}.
- }
- }
- }
- \tl_const:Nn \c__letgut_missing_editorial_tl {
- Ne~ pas~ omettre~ l'éditorial~ !\\(à~ faire~ figurer~
- dans~ un~ \file*{\c__letgut_editorial_file_tl.tex}~
- dans~ le~ dossier~ courant)
- }
- \tl_const:Nn \c__letgut_missing_infomations_tl {
- Ne~ pas~ omettre~ les~ informations~ sur~
- \c__letgut_gutenberg_tl{}~ !\\(dans~ un~
- \file*{\c__letgut_informations_gutenberg_file_tl.tex}~
- situé~ dans~ le~ dossier~ courant)
- }
- \tl_const:Nn \c__letgut_default_alert_box_color_tl {
- gray9
- }
- \tl_const:Nn \c__letgut_default_allcolors_links_color_tl
- {
- teal!60!black
- }
+ \tl_const:Nn \c__letgut_online_issn_tl {
+ 2742-6149~ (version~ numérique)
+ }
+ \tl_const:Nn \c__letgut_paper_issn_tl {
+ 1257–2217~ (version~ papier)
+ }
+ \tl_const:Nn \c__letgut_cahier_tl { \emph{ Cahier } }
+ \tl_const:Nn \c__letgut_cahiers_tl {
+ \c__letgut_cahier_tl \emph{ s }
+ }
+ \tl_const:Nn \c__letgut_gnu_linux_tl { \software{GNU/Linux} }
+ \tl_const:Nn \c__letgut_macOS_tl { \software{macOS} }
+ \tl_const:Nn \c__letgut_windows_tl { \software{Windows} }
+ \tl_const:Nn \c__letgut_package_tl { package }
+ \tl_const:Nn \c__letgut_class_tl { classe }
+ \tl_const:Nn \c__letgut_file_tl { fichier }
+ \tl_const:Nn \c__letgut_software_tl { logiciel }
+ \tl_const:Nn \c__letgut_tugboat_tl { \emph{ TUGboat } }
+ \tl_const:Nn \c__letgut_tex_live_tl {
+ \hologo{ TeX }\nobreakspace Live
+ }
+ \tl_const:Nn \c__letgut_banner_file_tl { bandeau }
+ \tl_const:Nn \c__letgut_editorial_file_tl { editorial }
+ \tl_const:Nn \c__letgut_informations_gutenberg_file_tl {
+ informations-gut
+ }
+ \tl_const:Nn \c__letgut_acronyms_file_tl { letgut-acronyms }
+ \tl_const:Nn \c__letgut_local_config_file_tl { localconf }
+ \tl_const:Nn \c__letgut_lstlanguage_file_tl { letgut-lstlang.sty }
+ \tl_const:Nn \c__letgut_contents_name_tl { Sommaire }
+ \tl_const:Nn \c__letgut_draftwatermark_text_tl {
+ \textnormal{Brouillon}
+ }
+ \tl_const:Nn \c__letgut_membership_reminder_tl {
+ {\LARGE
+ \bfseries
+ Avez-vous~ pensé~ à~ régler~ votre~ cotisation~ ?
+ % \the\year~ ?
+ \par
+ \medskip
+ }
+ Si~ vous~ avez~ oublié,~ ce~ n'est~ ni~ trop~ tard~
+ ni~ difficile~ :
+ \par
+ \url{https://www.gutenberg-asso.fr/?Adherer-en-ligne}
+ \bool_if:NT \g__letgut_informations_bool {
+ \file_if_exist:nT
+ {./\c__letgut_informations_gutenberg_file_tl}{
+ \par
+ Voir~ aussi~ page~ \pageref{letgut_label_adhesions}.
+ }
+ }
+ }
+ \tl_const:Nn \c__letgut_missing_editorial_tl {
+ Ne~ pas~ omettre~ l'éditorial~ !\\(à~ faire~ figurer~
+ dans~ un~ \file*{\c__letgut_editorial_file_tl.tex}~
+ dans~ le~ dossier~ courant)
+ }
+ \tl_const:Nn \c__letgut_missing_infomations_tl {
+ Ne~ pas~ omettre~ les~ informations~ sur~
+ \c__letgut_gutenberg_tl{}~ !\\(dans~ un~
+ \file*{\c__letgut_informations_gutenberg_file_tl.tex}~
+ situé~ soit~ dans~ le~ dossier~ courant, soit~ dans~ le~
+ dossier~ parent)
+ }
+ \tl_const:Nn \c__letgut_default_alert_box_color_tl {
+ gray9
+ }
+ \tl_const:Nn \c__letgut_default_allcolors_links_color_tl
+ {
+ teal!60!black
+ }
#+end_src
**** Variables ones
@@ -740,15 +817,111 @@ We define the 2 load time options for the target audience:
- ~for-readers~ (the default), for the “normal” “Lettre”,
- ~for-authors~, (only) the author(s) of an article of the “Lettre”.
+** Date handling
+
#+begin_src latex
- \keys_define:nn { letgut }
+ \int_new:N \g__letgut_date_month_int
+ \int_new:N \g__letgut_date_year_int
+
+ \int_gset:Nn \g__letgut_date_month_int {\the\month}
+ \int_gset:Nn \g__letgut_date_year_int {\the\year}
+
+ \tl_new:N \g__letgut_date_month_tl
+ \tl_new:N \g__letgut_date_tl
+
+ \cs_new_protected:Npn \__letgut_date_parse:n #1
{
- , for-readers .bool_gset:N = \g__letgut_for_readers_bool
- , for-readers .initial:n = { true }
- , for-readers .default:n = { true }
- , for-authors .bool_gset_inverse:N = \g__letgut_for_readers_bool
+ \__letgut_if_is_iso_date:nTF {#1}
+ {
+ \__letgut_date_parse:www #1 \q_stop
+ }{
+ \msg_term:nnn{letgut}{Not~month~iso~date}{#1}
+ \tl_gset:Nn \g__letgut_date_tl { #1 }
+ }
+ }
+
+ \prg_new_protected_conditional:Npnn
+ \__letgut_if_is_iso_date:n #1 { T, F, TF }
+ {
+ \regex_match:nnTF { ^\d{4}-(\d{1,2}) } {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+ \prg_new_protected_conditional:Npnn
+ \__letgut_if_is_int:n #1 { T, F, TF }
+ {
+ \regex_match:nnTF { ^[\+\-]?[\d]+$ } {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+
+ \cs_new_protected:Npn \__letgut_month_name:n #1
+ {
+ % \text_titlecase_first:n {
+ \int_case:nnF
+ { #1 }
+ {
+ { 1 }{ janvier }
+ { 2 }{ février }
+ { 3 }{ mars }
+ { 4 }{ avril }
+ { 5 }{ mai }
+ { 6 }{ juin }
+ { 7 }{ juillet }
+ { 8 }{ août }
+ { 9 }{ septembre }
+ { 10 }{ octobre }
+ { 11 }{ novembre }
+ { 12 }{ décembre }
+ }
+ { Month~ Error! }
+ % }
+ }
+
+ \cs_new_protected:Npn \__letgut_date_parse:www #1-#2
+ \q_stop
+ {
+ \int_compare:nTF
+ {
+ \the\year <= #1 <= \the\year+1
+ #+end_src
+
+# >> (Just not to disturb the parentheses balancing
+# detection of my editor.)
+
+ #+begin_src latex
+ }{
+ \int_gset:Nn \g__letgut_date_year_int {#1}
+ }{
+ \int_gset:Nn \g__letgut_date_year_int {\the\year}
+ }
+ \__letgut_if_is_int:nTF {#2}
+ {
+ \int_compare:nTF
+ {
+ 1 <= #2 <= 12
+ #+end_src
+
+# >> (Just not to disturb the parentheses balancing
+# detection of my editor.)
+
+ #+begin_src latex
+ }
+ {\int_gset:Nn \g__letgut_date_month_int {#2}}
+ {\int_gset:Nn \g__letgut_date_month_int {\the\month}}
+ }{
+ \int_gset:Nn \g__letgut_date_month_int {\the\month}
+ }
+ \tl_gset:Nn \g__letgut_date_month_tl {
+ \__letgut_month_name:n { \g__letgut_date_month_int }
+ }
+ \tl_gset:Nn \g__letgut_date_tl {
+ \tl_use:N \g__letgut_date_month_tl
+ \c_space_tl
+ \int_use:N \g__letgut_date_year_int
+ }
}
- \ProcessKeysOptions { letgut }
#+end_src
** Class and package loading
@@ -793,6 +966,10 @@ We now load some packages.
#+begin_src latex
\RequirePackage{graphicx}
#+end_src
+- Biolinum font.
+ #+begin_src latex
+\RequirePackage{biolinum}
+ #+end_src
- Extending the array and tabular environments.
#+begin_src latex
\RequirePackage{array}
@@ -931,7 +1108,7 @@ We close the ~\AddToHook{begindocument/before}~ argument.
#+begin_src latex
\sisetup{
, locale=FR
- , mode=text
+ , mode=match
}
#+end_src
- Concerning floats, we ask:
@@ -970,211 +1147,6 @@ We close the ~\AddToHook{begindocument/before}~ argument.
#+begin_src latex
\renewcommand*\frenchtablename{Tableau}
#+end_src
-- We fix some defaults for the listings : we define a style for all the listings
- which resets all the \TeX{} control sequences/keywords and then load all the
- basic (La)TeX dialects of TeX. But we start with a dialect which is missing in
- the \package*{listings}.
- #+begin_src latex
- \lstdefinelanguage[classes]{TeX}[LaTeX]{TeX}{%
- % Control sequences
- moretexcs={%
- abovecaptionskip,abstractname,appendix,appendixname,
- arraycolsep,arrayrulewidth,author,backmatter,baselinestretch,
- belowcaptionskip,bf,bibindent,bibname,bigskipamount,
- bottomfraction,brokenpenalty,cal,chapter,chaptermark,
- chaptername,clubpenalty,columnsep,columnseprule,contentsname,
- date,dblfloatpagefraction,dblfloatsep,dbltextfloatsep,
- dbltopfraction,descriptionlabel,displaywidowpenalty,
- doublerulesep,evensidemargin,fboxrule,fboxsep,figurename,
- floatpagefraction,floatsep,footins,footnoterule,footnotesep,
- footnotesize,footskip,frontmatter,headheight,headsep,huge,Huge,
- indexname,indexspace,interlinepenalty,intextsep,it,jot,
- labelenumi,labelenumii,labelenumiii,labelenumiv,labelitemfont,
- labelitemi,labelitemii,labelitemiii,labelitemiv,labelsep,
- labelwidth,large,Large,LARGE,leftmargin,leftmargini,
- leftmarginii,leftmarginiii,leftmarginiv,leftmarginv,
- leftmarginvi,lineskip,listfigurename,listoffigures,
- listoftables,listtablename,mainmatter,maketitle,marginparpush,
- marginparsep,marginparwidth,maxdepth,medskipamount,mit,
- newblock,normallineskip,normalsize,oddsidemargin,paragraph,
- paragraphmark,parindent,parskip,part,partname,partopsep,
- postdisplaypenalty,predisplaypenalty,refname,rm,sc,scriptsize,
- section,sectionmark,sf,sl,small,smallskipamount,subitem,
- subparagraph,subparagraphmark,subsection,subsectionmark,
- subsubitem,subsubsection,subsubsectionmark,tabbingsep,
- tabcolsep,tablename,tableofcontents,textfloatsep,textfraction,
- textheight,textwidth,thechapter,theenumi,theenumii,theenumiii,
- theenumiv,theequation,theparagraph,thepart,thesection,
- thesubparagraph,thesubsection,thesubsubsection,tiny,title,
- today,topfraction,topmargin,topskip,tt,widowpenalty,
- },%
- % Keywords of class 1 : keywords that contain other characters
- % (since of the same class as the ones specified as
- % 'otherkeywords')
- morekeywords={%
- %
- },%
- % Keywords of class 2 : environments names
- morekeywords=[2]{%
- abstract,description,figure,quotation,quote,table,
- thebibliography,theindex,titlepage,verse%
- },%
- % Keywords of class 3 : mandatory arguments (not environments)
- % & optional arguments which are keys (in key=value)
- morekeywords=[3]{%
- },%
- % Keywords of class 4 : values of keys (in key=value)
- morekeywords=[4]{%
- },%
- % Keywords of class 5 : arguments specifications (after “:”
- % in expl3 syntax)
- morekeywords=[5]{%
- },%
- % Keywords of class 6 : current package name (and possibly
- % derived packages)
- morekeywords=[6]{%
- a0poster,aalok,aastex631,abntex2,achemso,acmart,acmconf,
- active-conf,adfathesis,afparticle,afthesis,aguplus,aiaa-tc,
- akklecture,akkscript,akktecdoc,akletter,myletter,ametsoc,
- amsart,amsbook,amsdtx,amsldoc,amsproc,aomart,apa,apa6,
- apa6e,apa7,arabart,arabbook,arabrep,arabrep1,articleingud,
- asaetr,ascelike,asmeconf,asmejour,assignment,aucklandthesis,
- bangorcsthesis,bangorexam,barticle,bbook,bletter,
- bankstatement,article,book,letter,ltnews,ltxdoc,ltxguide,
- minimal,proc,report,slides,source2edoc,basque-book,beamer,
- beamerswitch,beaulivre,beilstein,argetabelle,bewerbung,
- bgteubner,BHCexam,bitart,bitbook,bjfuthesis,BMSTU-IU8,
- bookcover,bookest,bookshelf,br-lex,brandeis-dissertation,
- brandeis-problemset,brandeis-thesis,buctcover,buctthesis,
- bxjsarticle,bxjsbook,bxjsreport,bxjsslide,cascadilla,cd,
- cd-cover,articoletteracdp,letteracdp,cesenaexam,cheatsheet,
- chemmacros-manual,chletter,cje,cnbwp,cnltx-doc,codedoc,
- colorart,colorbook,combine,cc,ConcProg,confproc,contracard,
- courseoutline,coursepaper,cquthesis,csbulletin,csbulobalka,
- csbulv1,ctexart,ctexbeamer,ctexbook,ctexrep,ctxdoc,curve,
- cv4tw,cweb,idcc,ijdc-v14,ijdc-v9,dinbrief,disser,gost732,
- dithesis,droit-fr,dtk,dvdcoll,easybook,ebsthesis,agecon,
- ajae,apecon,ecca,erae,itaxpf,jrurstud,njf,oegatb,pocoec,
- regstud,worlddev,ecv,einfart,ejpecp,elbioimp,elegantbook,
- elegantnote,elegantpaper,elpres,cas-dc,cas-sc,elsarticle,
- elteikthesis,emisa,emulateapj,erdc,eskd,eskdgraph,eskdtab,
- eskdtext,estcpmm,europasscv,europecv,exam,exam-n,examdesign,
- exesheet,extarticle,extbook,extletter,extproc,extreport,
- facsimile,factura,fancyhandout,fancyslides,fbithesis,fcavtex,
- fdudoc,fduthesis-en,fduthesis,fei,ffslides,fithesis,
- fithesis2,fithesis3,fithesis4,flacards,flashcards,frletter,
- g-brief,g-brief2,gaceta,gammas,gatech-thesis,gmdocc,
- gradstudentresume,grant-afosr,grant-aro,grant-darpa,grant-doe,
- grant-nih,grant-nrl,grant-nsf,grant-onr,grant,graphpaper,
- gridslides,gsemthesis,guitartabs,gzt,gztarticle,h2020proposal,
- hgbarticle,hgbreport,hgbthesis,harnon-cv,hausarbeit-jura,
- hcart,hcletter,hcreport,hcslides,hecthese,hepthesis,hitec,
- hithesis,hitreport,hitszthesis,hletter,hpsdiss,fsbispit,
- huawei,hustthesis,icsv,IEEEconf,IEEEtran,ijmart,ijsra,
- image-gallery,IMTEKda,inkpaper,invoice-class,iodhbwm,iscram,
- isov2,isodoc,iwhdp,jacow,jlreq,jmlr,jmlrbook,jnuexam,jpsj2,
- jura,jurabook,juraovw,juraurtl,kdgcoursetext,kdgmasterthesis,
- kdpcover,kerntest,kluwer,knittingpattern,scrartcl,scrarticle,
- scrbook,scrdoc,scrletter,scrlttr2,scrreport,scrreprt,komacv,
- oblivoir-utf,oblivoir-xl,oblivoir,xoblivoir,ksp-thesis,l3doc,
- labbook,leadsheet,leaflet,lebhart,lectures,letgut,lettre,limap,
- limecv,lion-msc,lni,lps,lt3graph-packagedoc,ltxdockit,
- ltxguidex,abstbook,beletter,flashcard,iagproc,cours,fiche,
- matapli,matc3mem,mcmthesis,ltxmdf,medstarbeamer,meetingmins,
- memoir,mensa-tex,mentis,metanorma,milog,minimart,minimbook,
- mla,mluexercise,mnras,moderncv,modernposter,msu-thesis,
- mucproc,mugsthesis,muling,musuos,muthesis,third-rep,mwart,
- mwbk,mwrep,mycv,nature,ncc,nccproc,sibjnm,nddiss2e,
- ndsu-thesis,newlfm,nih,nihbiosketch,njurepo,nlctdoc,nostarch,
- nrc1,nrc2,artikel1,artikel2,artikel3,boek,boek3,brief,
- rapport1,rapport3,nwejm,nwejmart,octavo,onrannual,
- oup-authoring-template,journal,paper,papertex,pbsheet,pecha,
- petiteannonce,philosophersimprint,pittetd,pkuthss,plari,play,
- postcards,powerdot,FUpowerdot,ppr-prv,pracjourn,pressrelease,
- proposal,reporting,dfgproposal,dfgreporting,euproposal,
- eureporting,prosper,protocol,prtec,upmgr,wkmgr,pst-doc,
- ptptex,qcm,quantumarticle,qyxf-book,ReadableCV,recipe,
- RecipeBook,recipecard,refart,refrep,resphilosophica,revtex4-2,
- revtex4,revtex4-1,rtklage,ryersonSGSThesis,ryethesis,sageep,
- sapthesis,schuleab,schulein,schuleit,schulekl,schuleub,
- schuleue,schullsg,schullzk,schulma-ab,schulma-gutachten,
- schulma-klausur,schulma-komp,schulma-mdlprf,schulma-praes,
- schwalbe,sciposter,screenplay,scrjrnl,sdapsclassic,sduthesis,
- seminar,semproc,sesamanuel,seuthesix,sffms,cassete,etiketka,
- shtthesis,caesar_book,sides,simplecv,simplivre,skbarticle,
- skbbeamer,skbbook,skblncsbeamer,skblncsppt,skbmoderncv,skdoc,
- skeyval-testclass,skrapport,smfart,smfbook,SPhdThesis,spie,
- sr-vorl,sslides,stage,standalone,usthesis,hwexam,mikoslides,
- omdoc,smglom,subfiles,suftesi,sugconf,tabriz-thesis,talk,
- tcldoc,tclldoc,powersem,thesis-ekf,thesis-gwu,thuthesis,
- tikz-kalender,tikzposter,tlc-article,TOPletter,toptesi,
- tudabeamer,tudaexercise,tudaleaflet,tudaletter,tudaposter,
- tudapub,tudasciposter,tudscrartcl,tudscrbook,tudscrdoc,
- tudscrmanual,tudscrposter,tudscrreprt,tufte-book,tufte-handout,
- ltugboat,ltugproc,tui,turabian,turabian-researchpaper,
- turabian-thesis,my-thesis,ua-thesis,uafthesis,
- uantwerpenbamathesis,uantwerpencoursetext,uantwerpenexam,
- uantwerpenletter,uantwerpenphdthesis,uantwerpenreport,
- ucalgmthesis,ucbthesis,ucdavisthesis,ucsmonograph,ucthesis,
- udesoftec,uebungsblatt,uestcthesis,uhhassignment,uiucredborder,
- uiucthesis,ulthese,legislation,umich-thesis,umthesis,
- unam-thesis,unifith,unitn-bimrep,univie-ling-expose,
- univie-ling-paper,univie-ling-thesis,univie-ling-wlg,
- unizgklasa,uothesis,UoWthesis,upmethodology-document,URbeamer,
- URletter,uspatent,ut-thesis,utexasthesis,uwmslide,uwthesis,
- verifica,webquiz,willowtreebook,withargs-packagedoc,
- wsemclassic,xduthesis,xebaposter,xmuthesis,xsim-manual,
- yaletter,yathesis,ycbook,ydoc,york-thesis,
- },%
- otherkeywords={},%
- alsoletter={0123456789-},%
- alsodigit={},%
- sensitive%
- }[keywords,tex,comments]%
- #+end_src
-
- #+begin_src latex
- \lstdefinestyle{__letgut_all_reset}{
- basicstyle=\ttfamily,
- language=TeX,%
- texcs={},%
- keywords={},%
- keywords=[2]{},%
- keywords=[3]{},%
- keywords=[4]{},%
- keywords=[5]{},%
- otherkeywords={},%
- alsoletter={},%
- alsodigit={},%
- alsolanguage=[AlLaTeX]TeX,%
- alsolanguage=[LaTeX]TeX,%
- alsolanguage=[plain]TeX,%
- alsolanguage=[common]TeX,%
- alsolanguage=[primitive]TeX,%
- alsolanguage=[classes]TeX,%
- #+end_src
- Because of a current issue involving \package{parskip} and
- \package{listings}
- (\url{https://github.com/FrankMittelbach/fmitex-parskip/issues/3}), we have to
- set the skip below the displayed listings to a zero length.
- #+begin_src latex
- belowskip=0pt,
- }
- \lstset{
- style=__letgut_all_reset
- }
- #+end_src
- This style is applied automatically at the beginning of each ~\input~
- file. Hence, the keywords defined in a previous file (by loading some
- peticular (La)TeX dialects, i.e. control sequences and keywords specific to
- some class or packages) won't interfere with the ones of the current file.
- #+begin_src latex
- \AddToHook{cmd/input/before}{
- \lstset{%
- style=__letgut_all_reset,%
- }
- }
- #+end_src
- The ~\printbibliography~ command is redefined in order its ~heading~ is by
default set to ~subbibliography~.
#+begin_src latex
@@ -1232,7 +1204,7 @@ We close the ~\AddToHook{begindocument/before}~ argument.
- We want the hyperlinks to be as unobtrusive as possible.
#+begin_src latex
\bool_if:NTF \g__letgut_paper_bool {
- \hypersetup{draft}
+ \hypersetup{hidelinks}
}{
\hypersetup{%
colorlinks,%
@@ -1241,10 +1213,19 @@ We close the ~\AddToHook{begindocument/before}~ argument.
}
#+end_src
- A preset of acronyms is input (if found).
+ A preset of acronyms is input (if found, firstly in the current directory,
+ secondly in the parent directory, thirdly in the TDS).
#+begin_src latex
- \file_if_exist:nT {\c__letgut_acronyms_file_tl}{
- \file_input:n {\c__letgut_acronyms_file_tl}
+ \file_if_exist:nTF {./\c__letgut_acronyms_file_tl}{
+ \file_input:n {./\c__letgut_acronyms_file_tl}
+ }{
+ \file_if_exist:nTF {../\c__letgut_acronyms_file_tl}{
+ \file_input:n {../\c__letgut_acronyms_file_tl}
+ }{
+ \file_if_exist:nT {\c__letgut_acronyms_file_tl}{
+ \file_input:n {\c__letgut_acronyms_file_tl}
+ }
+ }
}
#+end_src
@@ -1271,7 +1252,8 @@ We close the ~\AddToHook{begindocument/before}~ argument.
{
\Huge
#+end_src
- Currently, we can't use \package{l3color}'s ~\color_fill:n~[fn:1]
+ Currently, we can't use \package{l3color}'s ~\color_fill:n~ (see
+ \url{https://github.com/ho-tex/luacolor/issues/4\#issuecomment-848774260})
and we have to rely on \package{xcolor}'s ~\color~.
#+begin_src latex
% \color_fill:n {black!10}
@@ -1335,113 +1317,6 @@ We close the ~\AddToHook{begindocument/before}~ argument.
}
#+end_src
-** Date handling
-
-#+begin_src latex
- \int_new:N \g__letgut_date_month_int
- \int_new:N \g__letgut_date_year_int
-
- \int_gset:Nn \g__letgut_date_month_int {\the\month}
- \int_gset:Nn \g__letgut_date_year_int {\the\year}
-
- \tl_new:N \g__letgut_date_month_tl
- \tl_new:N \g__letgut_date_tl
-
- \cs_new_protected:Npn \__letgut_date_parse:n #1
- {
- \__letgut_if_is_iso_date:nTF {#1}
- {
- \__letgut_date_parse:www #1 \q_stop
- }{
- \msg_term:nnn{letgut}{Not~month~iso~date}{#1}
- \tl_gset:Nn \g__letgut_date_tl { #1 }
- }
- }
-
- \prg_new_protected_conditional:Npnn
- \__letgut_if_is_iso_date:n #1 { T, F, TF }
- {
- \regex_match:nnTF { ^\d{4}-(\d{1,2}) } {#1}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
- \prg_new_protected_conditional:Npnn
- \__letgut_if_is_int:n #1 { T, F, TF }
- {
- \regex_match:nnTF { ^[\+\-]?[\d]+$ } {#1}
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
- \cs_new_protected:Npn \__letgut_month_name:n #1
- {
- % \text_titlecase_first:n {
- \int_case:nnF
- { #1 }
- {
- { 1 }{ janvier }
- { 2 }{ février }
- { 3 }{ mars }
- { 4 }{ avril }
- { 5 }{ mai }
- { 6 }{ juin }
- { 7 }{ juillet }
- { 8 }{ août }
- { 9 }{ septembre }
- { 10 }{ octobre }
- { 11 }{ novembre }
- { 12 }{ décembre }
- }
- { Month~ Error! }
- % }
- }
-
- \cs_new_protected:Npn \__letgut_date_parse:www #1-#2
- \q_stop
- {
- \int_compare:nTF
- {
- \the\year <= #1 <= \the\year+1
- #+end_src
-
-# >> (Just not to disturb the parentheses balancing
-# detection of my editor.)
-
- #+begin_src latex
- }{
- \int_gset:Nn \g__letgut_date_year_int {#1}
- }{
- \int_gset:Nn \g__letgut_date_year_int {\the\year}
- }
- \__letgut_if_is_int:nTF {#2}
- {
- \int_compare:nTF
- {
- 1 <= #2 <= 12
- #+end_src
-
-# >> (Just not to disturb the parentheses balancing
-# detection of my editor.)
-
- #+begin_src latex
- }
- {\int_gset:Nn \g__letgut_date_month_int {#2}}
- {\int_gset:Nn \g__letgut_date_month_int {\the\month}}
- }{
- \int_gset:Nn \g__letgut_date_month_int {\the\month}
- }
- \tl_gset:Nn \g__letgut_date_month_tl {
- \__letgut_month_name:n { \g__letgut_date_month_int }
- }
- \tl_gset:Nn \g__letgut_date_tl {
- \tl_use:N \g__letgut_date_month_tl
- \c_space_tl
- \int_use:N \g__letgut_date_year_int
- }
- }
-#+end_src
-
** Page color default settings
By default, the page color will be the one linked to the ~screen~ option.
@@ -1454,26 +1329,34 @@ We close the ~\AddToHook{begindocument/before}~ argument.
** Options
-These options look to need to be specified rather at the end (throws an error if
-defined before the ~\__letgut_date_parse:n~'s definition):
+We now define the options of the class:
+- ~for-readers~/~for-authors~, depending on the target audience,
+- ~draft~/~final~ depending on the state of the document,
+- ~paper~/~screen~ depending on the way the document will be read,
- ~number~ for the number of the issue,
- ~date~ for the date of the issue, either empty (hence the current (month)
date) or at the format ~YYYY-MM~ or as free input,
- ~pagecolor~ (relevant only with the (default) ~screen~ load time option) for
a color of the page other than the default one,
+- ~allcolorslinks~ for the color of (all) the links,
- ~membership-reminder~ that typesets a membership reminder on the first page,
+- ~editorial~ depending on the editorial is wanted or not,
+- ~infomations~ depending on the GUTenberg informations are wanted or not,
+- ~detailedtoc~ depending on the automatic ToC is wanted maximally (until
+ subparagraphs) detailed or not.
#+begin_src latex
- \keys_define:nn { letgut/setup }
+ \keys_define:nn { letgut }
{
+ , for-readers .bool_gset:N = \g__letgut_for_readers_bool
+ , for-readers .initial:n = { true }
+ , for-readers .default:n = { true }
+ , for-authors .bool_gset_inverse:N = \g__letgut_for_readers_bool
, draft .bool_gset:N = \g__letgut_draft_bool
, draft .initial:n = { true }
, draft .default:n = { true }
, final .bool_gset_inverse:N = \g__letgut_draft_bool
- , number .int_gset:N = \g__letgut_number_int
- , date .code:n = { \__letgut_date_parse:n { #1 } }
- , date .initial:x = {\the\year-\the\month}
, paper .code:n = {
\bool_gset_true:N \g__letgut_paper_bool
\pagecolor[rgb]{\c__letgut_default_pagecolor_paper_clist}
@@ -1481,6 +1364,9 @@ defined before the ~\__letgut_date_parse:n~'s definition):
\c__letgut_default_pagecolor_paper_clist
}
, screen .bool_gset_inverse:N = \g__letgut_paper_bool
+ , number .int_gset:N = \g__letgut_number_int
+ , date .code:n = { \__letgut_date_parse:n { #1 } }
+ , date .initial:x = {\the\year-\the\month}
, pagecolor .initial:V
= \c__letgut_default_pagecolor_screen_clist
, pagecolor .code:n = {
@@ -1508,7 +1394,14 @@ defined before the ~\__letgut_date_parse:n~'s definition):
, editorial .initial:n = { true }
, informations .bool_gset:N = \g__letgut_informations_bool
, informations .initial:n = { true }
+ , detailedtoc .bool_gset:N = \g__letgut_detailedtoc_bool
+ , detailedtoc .initial:n = { false }
}
+ \ProcessKeysOptions { letgut }
+#+end_src
+
+#+begin_src latex
+ \definecolor{letgut_pagecolor}{rgb}{\g__letgut_pagecolor_clist}
#+end_src
** Headers
@@ -1554,16 +1447,40 @@ We now define the headers.
The table of contents is customized:
-- only the titles of the articles are shown (but the bookmarks have their natural depth):
-#+begin_src latex
- \etocsetnexttocdepth{0}
- #+end_src
- layout:
#+begin_src latex
\etocsetstyle {section}
{}
- {\leavevmode\leftskip 2cm\relax}
- {\normalsize%
+ {\leavevmode\leftskip 2.5cm\relax}
+ {\mdseries\small%
+ \etocname~\dotfill~\etocpage\par
+ }
+ {}
+ \etocsetstyle {subsection}
+ {}
+ {\leavevmode\leftskip 3cm\relax}
+ {\mdseries\footnotesize%
+ \etocname~\dotfill~\etocpage\par
+ }
+ {}
+ \etocsetstyle {subsubsection}
+ {}
+ {\leavevmode\leftskip 3.5cm\relax}
+ {\mdseries\scriptsize%
+ \etocname~\dotfill~\etocpage\par
+ }
+ {}
+ \etocsetstyle {paragraph}
+ {}
+ {\leavevmode\leftskip 4cm\relax}
+ {\mdseries\tiny%
+ \etocname~\dotfill~\etocpage\par
+ }
+ {}
+ \etocsetstyle {subparagraph}
+ {}
+ {\leavevmode\leftskip 4.5cm\relax}
+ {\mdseries\tiny%
\etocname~\dotfill~\etocpage\par
}
{}
@@ -1701,7 +1618,8 @@ The first page is inserted only is the target audience is the readers of the
Lettre.
#+begin_src latex
- \bool_if:NT \g__letgut_for_readers_bool {
+ \AddToHook{begindocument/before}{
+ \bool_if:NT \g__letgut_for_readers_bool {
#+end_src
#+begin_src latex
@@ -1848,27 +1766,37 @@ Here starts what is automatically added at the beginning of the document.
- No headers on the first page. This has to be inserted after the previous
(customized) ~\maketitle~ since this command inserts a ~\newpage~ which would
ruin the effort of ~\thispagestyle{empty}~ if inserted before.
- #+begin_src latex
- \thispagestyle{empty}
- #+end_src
-- The table of contents is automatically added and has a bookmark entry.
#+begin_src latex
+ \thispagestyle{empty}
+ #+end_src
+- The table of contents is automatically added and has a bookmark entry. By
+ default only the titles of the articles are shown (but the bookmarks have
+ their natural depth) but the ~detailedtoc~ option make its depth until
+ subpargraphs (which may be useful in order to check the structure of the
+ Lettre).
+ #+begin_src latex
+ \bool_if:NTF \g__letgut_detailedtoc_bool {
+ \etocsetnexttocdepth{5}
+ }{
+ \etocsetnexttocdepth{0}
+ }
\pdfbookmark[1]{
\c__letgut_contents_name_tl
}{
\c__letgut_contents_name_tl
}
\tableofcontents
- #+end_src
+ \etocsetnexttocdepth{1}
+ #+end_src
Should a title be displayed, the table of contents would be added after it,
followed by a new page (otherwise, if ~\title~ used after ~\begin{document}~
sees its title on the front page, it will overflow onto the banner).
- #+begin_src latex
- \bool_if:NTF \g__letgut_title_empty_bool {
- \vspace*{1.5cm}
- }{
- \newpage
- }
+ #+begin_src latex
+ \bool_if:NTF \g__letgut_title_empty_bool {
+ \vspace*{1.5cm}
+ }{
+ \newpage
+ }
#+end_src
- Conditionally to the fact the ~editorial~ option is not set to ~false~: if the
\file*{editorial.tex} of the editorial is found, its content is input and
@@ -1882,7 +1810,7 @@ Here starts what is automatically added at the beginning of the document.
\pdfbookmark[1]{Éditorial}{
\c__letgut_editorial_file_tl
}
- \file_input:n {./\c__letgut_editorial_file_tl}
+ \__letgut_input_article:n {./\c__letgut_editorial_file_tl}
% % \int_set:N \l_tmpa_int {\pagenumber}
% % \int_compare:nNnT \l_tmpa_int = 1 { \newpage }
#+end_src
@@ -1945,19 +1873,33 @@ The last page is special: it should automatically contain some informations abou
\AddToHook{enddocument}
{
#+end_src
-Conditionally to the fact the ~informations~ option is not set to ~false~: if the
-\file*{informations-gut.tex} which contains the informations about
-\gutenberg. Otherwise, a warning is displayed.
+Conditionally to the fact the ~informations~ option is not set to ~false~: if
+the \file*{informations-gut.tex} which contains the informations about
+\gutenberg{} is found (firstly in the current directory, secondly in the parent
+directory, thirdly in the TDS). Otherwise, a warning is displayed.
#+begin_src latex
\bool_if:NT \g__letgut_informations_bool {
\clearpage
\phantomsection
- \file_if_exist:nTF
- {./\c__letgut_informations_gutenberg_file_tl}{
- \file_input:n {./\c__letgut_informations_gutenberg_file_tl}
+ \file_if_exist:nTF {./\c__letgut_informations_gutenberg_file_tl}{
+ \__letgut_input_article:n {
+ ./\c__letgut_informations_gutenberg_file_tl
+ }
}{
- \msg_warning:nn{letgut}{Informations~file~missing}
- \alertbox{ \c__letgut_missing_infomations_tl }
+ \file_if_exist:nTF {../\c__letgut_informations_gutenberg_file_tl}{
+ \__letgut_input_article:n {
+ ../\c__letgut_informations_gutenberg_file_tl
+ }
+ }{
+ \file_if_exist:nTF {\c__letgut_informations_gutenberg_file_tl}{
+ \__letgut_input_article:n {
+ \c__letgut_informations_gutenberg_file_tl
+ }
+ }{
+ \msg_warning:nn{letgut}{Informations~file~missing}
+ \alertbox{ \c__letgut_missing_infomations_tl }
+ }
+ }
}
}
#+end_src
@@ -1973,6 +1915,7 @@ the author(s) of the “Lettre”.
#+begin_src latex
}
+ }
#+end_src
** Sections, subsections, etc.
@@ -2006,11 +1949,18 @@ the author(s) of the “Lettre”.
{
\leavevmode\leftskip 2cm\relax
}
- {\mdseries\normalsize
+ {
+ \bool_if:NTF \g__letgut_detailedtoc_bool {
+ \bfseries
+ }{
+ \mdseries
+ }
+ \normalsize
\etocname
\nobreak\leaders\hbox~ to~ 1ex{\hss.}\hfill
\etocpage
- \par}
+ \par
+ }
{}
#+end_src
- We also create the new level ~\subtitle~ for the subtitles of the
@@ -2123,7 +2073,7 @@ We define the command that lets us specify the newsletter setup.
#+begin_src latex
\NewDocumentCommand \letgutsetup { m } {
- \keys_set:nn { letgut/setup } { #1 }
+ \keys_set:nn { letgut } { #1 }
}
#+end_src
@@ -2229,7 +2179,8 @@ For both persons and authors, the argument of:
#+begin_src latex
\cs_new_protected:Nn \__letgut_person_last_name:n
{
- {\scshape \__letgut_titlecase_name:n {#1}}
+ {% \scshape
+ \__letgut_titlecase_name:n {#1}}
}
\cs_new_protected:Nn \__letgut_person_first_name_last_name:nn
{
@@ -2248,7 +2199,7 @@ For both persons and authors, the argument of:
\cs_new_protected:Npn \__letgut_process_list:n #1
{
\seq_clear:N \l__letgut_items_seq
- \seq_set_split:Nnn \l_tmpa_seq {and} {#1}
+ \seq_set_split:Nnn \l_tmpa_seq {~and~} {#1}
\seq_map_inline:Nn \l_tmpa_seq {
\seq_set_from_clist:Nn \l_tmpb_seq {##1}
\seq_pop_left:NN \l_tmpb_seq \l_letgut_last_name_tl
@@ -2356,28 +2307,28 @@ https://github.com/latex3/hyperref/issues/188#issuecomment-826302843.
{
{\l__letgut_files_font_switch_tl #1}
}
- \NewDocumentCommand{\package}{ s o m O{package} } {
+ \NewDocumentCommand{\package}{ s o m O{\c__letgut_package_tl} } {
\IfBooleanT{#1}{
#4
\c_space_tl
}
\__letgut_tex_stuff:nn {#2}{#3}
}
- \NewDocumentCommand{\class}{ s o m O{classe} } {
+ \NewDocumentCommand{\class}{ s o m O{\c__letgut_class_tl} } {
\IfBooleanT{#1}{
#4
\c_space_tl
}
\__letgut_tex_stuff:nn {#2}{#3}
}
- \NewDocumentCommand{\file}{ s m O{fichier} } {
+ \NewDocumentCommand{\file}{ s m O{\c__letgut_file_tl} } {
\IfBooleanT{#1}{
#3
\c_space_tl
}
\__letgut_file:n {#2}
}
- \NewDocumentCommand {\software} { s O{} m O{logiciel} } {
+ \NewDocumentCommand {\software} { s O{} m O{\c__letgut_software_tl} } {
\IfBooleanT{#1}{
#4
\c_space_tl
@@ -2386,7 +2337,7 @@ https://github.com/latex3/hyperref/issues/188#issuecomment-826302843.
}
#+end_src
-*** Names, etc.
+*** Names, expressions, etc.
#+begin_src latex
\NewExpandableDocumentCommand { \gutenberg } { } {
@@ -2407,6 +2358,18 @@ https://github.com/latex3/hyperref/issues/188#issuecomment-826302843.
\NewExpandableDocumentCommand { \Cahiers } { } {
\c__letgut_cahiers_tl
}
+ \NewExpandableDocumentCommand { \cahier } { } {
+ \c__letgut_cahier_tl
+ }
+ \NewExpandableDocumentCommand { \cahiers } { } {
+ \c__letgut_cahiers_tl
+ }
+ \NewExpandableDocumentCommand { \cahiergut } { } {
+ \cahier \c_space_tl \gutenberg
+ }
+ \NewExpandableDocumentCommand { \cahiersgut } { } {
+ \cahiers \c_space_tl \gutenberg
+ }
\NewExpandableDocumentCommand { \letgut } { } {
\class{letgut}
}
@@ -2417,10 +2380,22 @@ https://github.com/latex3/hyperref/issues/188#issuecomment-826302843.
\c__letgut_tugboat_tl
}
\NewExpandableDocumentCommand { \knuth } { } {
- \person{Knuth, Donald~ E.}
+ \person{Knuth,~ Donald~ E.}
}
\NewExpandableDocumentCommand { \lamport } { } {
- \person{Lamport, Leslie}
+ \person{Lamport,~ Leslie}
+ }
+ \NewExpandableDocumentCommand { \tl } { } {
+ \c__letgut_tex_live_tl
+ }
+ \NewExpandableDocumentCommand { \linux } { } {
+ \c__letgut_gnu_linux_tl
+ }
+ \NewExpandableDocumentCommand { \macos } { } {
+ \c__letgut_macOS_tl
+ }
+ \NewExpandableDocumentCommand { \windows } { } {
+ \c__letgut_windows_tl
}
#+end_src
@@ -2444,32 +2419,49 @@ https://github.com/latex3/hyperref/issues/188#issuecomment-826302843.
We disabling some commands when their arguments have to go to bookmarks.
#+begin_src latex
- \AddToHook{begindocument/end}{
- \pdfstringdefDisableCommands{
- \def\person#1{#1}
- \def\author#1{#1}
- \def\package#1{#1}
- % \def\package*#1{package~#1}
- \def\class#1{#1}
- % \def\class*#1{classe~#1}
- \def\file#1{#1}
- % \def\file*#1{fichier~#1}
- \def\software#1{#1}
- % \def\software*#1{logiciel~#1}
- \def\foreignloc#1{#1}
- \def\lettre{Lettre}
- \def\gutenberg{GUTenberg}
- \def\gut{\gutenberg}
- \def\lettregut{\lettre\c_space_tl\gutenberg}
- \def\Cahier{Cahier}
- \def\Cahiers{\Cahier s}
- \def\letgut{letgut}
- \def\letgutcls{classe~ letgut}
- \def\knuth{Donald~ E.~ Knuth}
- \def\lamport{Leslie~ Lamport}
- \def\latinloc#1{#1}
- }
- }
+ \AddToHook{begindocument/end}{
+ \pdfstringdefDisableCommands{
+ \RenewExpandableDocumentCommand\person { m }{#1}
+ \RenewExpandableDocumentCommand\author{ m }{#1}
+ \RenewExpandableDocumentCommand \package { s O{} m }{
+ \IfBooleanT{#1}{\c__letgut_package_tl\c_space_tl}#3
+ }
+ \RenewExpandableDocumentCommand\class { s O{} m }{
+ \IfBooleanT{#1}{\c__letgut_class_tl\c_space_tl}#3
+ }
+ \RenewExpandableDocumentCommand\file { s m }{
+ \IfBooleanT{#1}{\c__letgut_file_tl\c_space_tl}#2
+ }
+ \RenewExpandableDocumentCommand\software { s O{} m }{
+ \IfBooleanT{#1}{\c__letgut_software_tl\c_space_tl}#3
+ }
+ \RenewExpandableDocumentCommand\foreignloc{ m }{#1}
+ \RenewExpandableDocumentCommand\latinloc{ m }{#1}
+ \RenewExpandableDocumentCommand\lettre{ }{Lettre}
+ \RenewExpandableDocumentCommand\gutenberg{ }{GUTenberg}
+ \RenewExpandableDocumentCommand\gut{ }{\gutenberg}
+ \RenewExpandableDocumentCommand\lettregut{ }{
+ \lettre\c_space_tl\gutenberg
+ }
+ \RenewExpandableDocumentCommand\Cahier{ }{Cahier}
+ \RenewExpandableDocumentCommand\Cahiers{ }{\Cahier s}
+ \RenewExpandableDocumentCommand\cahier{ }{Cahier}
+ \RenewExpandableDocumentCommand\cahiers{ }{\cahier s}
+ \RenewExpandableDocumentCommand\cahiergut{ }{
+ \cahier\c_space_tl\gutenberg
+ }
+ \RenewExpandableDocumentCommand\cahiersgut{ }{
+ \cahier s\c_space_tl\gutenberg
+ }
+ \RenewExpandableDocumentCommand\letgut{ }{letgut}
+ \RenewExpandableDocumentCommand\letgutcls{ }{classe~ letgut}
+ \RenewExpandableDocumentCommand\knuth{ }{Donald~ E.~ Knuth}
+ \RenewExpandableDocumentCommand\lamport{ }{Leslie~ Lamport}
+ \RenewExpandableDocumentCommand\linux{ }{GNU/Linux}
+ \RenewExpandableDocumentCommand\macos{ }{macOS}
+ \RenewExpandableDocumentCommand\windows{ }{Windows}
+ }
+ }
#+end_src
*** Acronyms
@@ -2549,18 +2541,31 @@ be the uppercased acronym).
The first occurrences of the acronyms will be displayed in their short forms,
with the long ones in footnotes. But what about acronyms whom first occurrences
-arise within footnotes? We want the to be displayed as their short forms
+arise within footnotes? We want them to be displayed as their short forms
followed by their the long form in parentheses. For this, we have to add
a boolean at the beginning (and reversed at the end) of the ~\footnote~ command
to know whether we currently are in a footnote or not and display the acronym
accordingly.
+BTW, we hack the ~\footnote~ command in order to mimic the ~multiple~ option of
+the \package{footmisc} package (consecutive ~\footnote~ commands make their
+corresponding footnote marks separated by commas). See
+https://tex.stackexchange.com/a/62091.
+
#+begin_src latex
+ \let\__letgut_next_token\relax
+ \cs_new_protected:Npn \__letgut_next_token_is_footnote:
+ {\if_meaning:w\footnote\__letgut_next_token\textsuperscript{,}\fi}
\NewCommandCopy{\__letgut_old_footnote}{\footnote}
- \RenewDocumentCommand {\footnote} { m }{
+ \RenewDocumentCommand {\footnote} { O{} m }{
\bool_set_true:N \l__letgut_in_footnote_bool
- \__letgut_old_footnote { #1 }
+ \tl_if_empty:nTF {#1}{
+ \__letgut_old_footnote { #2 }
+ }{
+ \__letgut_old_footnote [#1] { #2 }
+ }
\bool_set_false:N \l__letgut_in_footnote_bool
+ \futurelet\__letgut_next_token\__letgut_next_token_is_footnote:
}
#+end_src
We change a bit both the ~footnote~ acro template, the ~description~ list
@@ -2581,7 +2586,7 @@ template, and the macro which prints the locale.
\space
(
\acroifT {alt} { \acrotranslate {or} ~ \acrowrite {alt} ~ }
- \acroifT {foreign} { \acrowrite {foreign} :~ }
+ \acroifT {foreign} { \acrowrite {foreign} }
\acrowrite {long}
\acrogroupcite
)
@@ -2789,7 +2794,7 @@ extensions of the ~graphicx~ package.
\noindent
\textsf{\fullcite{\g__letgut_bookreview_bibkey_tl}}
\tl_if_empty:NF \g__letgut_bookreview_price_tl{
- .\c_space_tl\EUR{\g__letgut_bookreview_price_tl}
+ .\c_space_tl\g__letgut_bookreview_price_tl\c_space_tl €
}
\par
}{
@@ -2797,6 +2802,56 @@ extensions of the ~graphicx~ package.
}
#+end_src
+** Keyboard keys
+
+We make use of the Linux Biolinum Keyboard font and extend somehow the ~\LKey~
+provided by the \package*{biolinum} in order to more easily write keyboard keys
+for usual characters on French keyboards.
+
+#+begin_src latex
+ \DeclareRobustCommand*\LKey[1]{%
+ \ifx#10\biolinumKeyGlyph{zero}% % spurious space removed 2016/06/24
+ \else\ifx#11\biolinumKeyGlyph{one}%
+ \else\ifx#12\biolinumKeyGlyph{two}%
+ \else\ifx#13\biolinumKeyGlyph{three}%
+ \else\ifx#14\biolinumKeyGlyph{four}%
+ \else\ifx#15\biolinumKeyGlyph{five}%
+ \else\ifx#16\biolinumKeyGlyph{six}%
+ \else\ifx#17\biolinumKeyGlyph{seven}%
+ \else\ifx#18\biolinumKeyGlyph{eight}%
+ \else\ifx#19\biolinumKeyGlyph{nine}%
+ \else\ifx#1à\biolinumKeyGlyph{agrave}%
+ \else\ifx#1À\biolinumKeyGlyph{Agrave}%
+ \else\ifx#1â\biolinumKeyGlyph{acircumflex}%
+ \else\ifx#1Â\biolinumKeyGlyph{Acircumflex}%
+ \else\ifx#1é\biolinumKeyGlyph{eacute}%
+ \else\ifx#1É\biolinumKeyGlyph{Eacute}%
+ \else\ifx#1è\biolinumKeyGlyph{egrave}%
+ \else\ifx#1È\biolinumKeyGlyph{Egrave}%
+ \else\ifx#1ê\biolinumKeyGlyph{ecircumflex}%
+ \else\ifx#1Ê\biolinumKeyGlyph{Ecircumflex}%
+ \else\ifx#1ë\biolinumKeyGlyph{edieresis}%
+ \else\ifx#1Ë\biolinumKeyGlyph{Edieresis}%
+ \else\ifx#1î\biolinumKeyGlyph{icircumflex}%
+ \else\ifx#1Î\biolinumKeyGlyph{Icircumflex}%
+ \else\ifx#1ï\biolinumKeyGlyph{idieresis}%
+ \else\ifx#1Ï\biolinumKeyGlyph{Idieresis}%
+ \else\ifx#1ô\biolinumKeyGlyph{ocircumflex}%
+ \else\ifx#1Ô\biolinumKeyGlyph{Ocircumflex}%
+ \else\ifx#1ù\biolinumKeyGlyph{ugrave}%
+ \else\ifx#1Ù\biolinumKeyGlyph{Ugrave}%
+ \else\ifx#1û\biolinumKeyGlyph{ucircumflex}%
+ \else\ifx#1Û\biolinumKeyGlyph{Ucircumflex}%
+ \else\ifx#1ü\biolinumKeyGlyph{udieresis}%
+ \else\ifx#1Ü\biolinumKeyGlyph{Udieresis}%
+ \else\ifx#1ÿ\biolinumKeyGlyph{ydieresis}%
+ \else\ifx#1Ÿ\biolinumKeyGlyph{Ydieresis}%
+ \else\ifx#1ç\biolinumKeyGlyph{ccedilla}%
+ \else\ifx#1Ç\biolinumKeyGlyph{Ccedilla}%
+ \else\biolinumKeyGlyph{#1}%
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+#+end_src
+
** Miscellanous
- We specify the possible hyphenations of \enquote{\gutenberg}.
@@ -2804,6 +2859,22 @@ extensions of the ~graphicx~ package.
\hyphenation{GUT-enberg}
#+end_src
+*** ISSN
+
+#+begin_src latex
+ \cs_new_protected:Npn \__letgut_issn:
+ {
+ \bool_if:NTF \g__letgut_paper_bool {
+ \c__letgut_paper_issn_tl
+ }{
+ \c__letgut_online_issn_tl
+ }
+ }
+ \NewDocumentCommand{\letgutissn}{ }{
+ \__letgut_issn:
+ }
+#+end_src
+
*** Non selectable text
We create a control sequence that makes its argument not selectable in the
@@ -2820,7 +2891,7 @@ watermarks.
We provide a ~\meta~ macro that (poorly) mimics the one of the
\package*{doc}. It is added at the very end of the preamble since other
- package that provide a better definition of this macro may have been loaded
+ package that provide another definition of this macro may have been loaded
(e.g. \package{tcolorbox}).
#+begin_src latex
\colorlet {__letgut_meta} {
@@ -2835,49 +2906,168 @@ watermarks.
\textcolor{#1}{$\langle$#2$\rangle$}
\egroup
}
- \AddToHook{begindocument/before}{
- \ProvideDocumentCommand{\meta}{ O{__letgut_meta} m } {
+ \AddToHook{begindocument/end}{
+ \DeclareDocumentCommand{\meta}{ O{__letgut_meta} m } {
\__letgut_meta:nn {#1}{#2}
}
}
#+end_src
-** LaTeX listings and examples
+** Listings
-We first define some colors used in the listings and examples.
+We define a style for all the listings which resets all the \TeX{} control
+sequences and keywords, and fix some defaults.
#+begin_src latex
- \definecolor{__letgut_backgroundCode}{cmyk}{0,0,0,0.04}
- \definecolor{__letgut_borderCode}{cmyk}{0,0,0,0.2}
- \definecolor{__letgut_foregroundLinenumber}{cmyk}{0,0,0,0.5}
- \definecolor{__letgut_foregroundMention}{cmyk}{0,0,0,0}
- \definecolor{__letgut_backgroundResult}{cmyk}{0,0,0,0}
+ \lstdefinestyle{__letgut_reset_listings_styles}{
+ basicstyle=\ttfamily,
+ breaklines,
+ language=TeX,%
+ texcs={},%
+ language={},%
+ keywords={},%
+ keywords=[2]{},%
+ keywords=[3]{},%
+ keywords=[4]{},%
+ keywords=[5]{},%
+ otherkeywords={},%
+ alsoletter={},%
+ alsodigit={},%
+ escapechar=£,
+ columns=fullflexible,
+ keepspaces=true,
+ upquote=true,
+ showstringspaces=false,
#+end_src
-We now define the colors for the syntax highlighting and define the style of our
-listings.
+If line numbers are asked, they should always have the same layout and not be
+selectable (hence the ~\__letgut_unselectable:n~).
+
+#+begin_src latex
+ numbersep=\c__letgut_number_sep_dim,
+ numberstyle=\scriptsize\ttfamily
+ \color{__letgut_foregroundLinenumber}
+ \__letgut_unselectable:n,
+ #+end_src
+
+Because of a current issue involving \package{parskip} and \package{listings}
+(\url{https://github.com/FrankMittelbach/fmitex-parskip/issues/3}), we have to
+set the skip below the displayed listings to a (almost) zero length. We do the
+same for the above skip.
+
+#+begin_src latex
+ aboveskip={0\p@ \@plus 6\p@},
+ belowskip={0\p@ \@plus 6\p@},
+ }
+#+end_src
+
+We define as short equivalent of ~\lstinline~ the character
+\lstDeleteShortInline⅛\texttt{⅛} which is unlikely to be used in ordinary text.
+
+#+begin_src latex
+\lstMakeShortInline[breaklines=false]⅛
+#+end_src
+
+We start with an empty listings style.
+
+#+begin_src latex
+ \lstset{ style=__letgut_reset_listings_styles }
+ #+end_src
+
+We create our own ~\input~ command for the articles of the Lettre with the
+following characteristics:
+
+- The previous style is applied automatically. Hence, the keywords defined in
+ a previous file (by loading some peticular (La)TeX dialects, i.e. control
+ sequences and keywords specific to some class or packages) won't interfere
+ with the ones of the current file.
+- All the acronyms are reset (each acronym is developped at its first occurrence).
+
+#+begin_src latex
+ \cs_new_protected:Npn \__letgut_input_article:n #1
+ {
+ \lstset{ style=__letgut_reset_listings_styles }
+ \acresetall%
+ \file_input:n{#1}%
+ }
+ \NewDocumentCommand{\inputarticle}{m}{
+ \__letgut_input_article:n { #1 }
+ }
+#+end_src
+
+*** LaTeX listings and examples
+
+We define the colors for the syntax highlighting of LaTeX listings.
#+begin_src latex
\colorlet{__letgut_texcs}{blue}
\colorlet{__letgut_comment}{gray}
- \colorlet{__letgut_argument-specification-separator}{red}
- \colorlet{__letgut_argument-specification}{cyan}
- \colorlet{__letgut_mandatory-argument}{purple}
+ \colorlet{__letgut_argument_specification_separator}{red}
+ \colorlet{__letgut_argument_specification}{cyan}
+ \colorlet{__letgut_mandatory_argument}{purple}
\colorlet{__letgut_environment}{teal}
- \colorlet{__letgut_key}{__letgut_mandatory-argument}
+ \colorlet{__letgut_key}{__letgut_mandatory_argument}
\colorlet{__letgut_value}{violet}
- \colorlet{__letgut_optional-argument}{__letgut_key}
+ \colorlet{__letgut_optional_argument}{__letgut_key}
\colorlet{__letgut_math}{green!50!black}
- \lstset{%
+#+end_src
+
+We add our own language files taken in account by the \package*{listings}. They
+will be considered after the other usual ones, if found. They are searched firstly
+in the current directory, secondly in the parent directory, thirdly in the TDS.
+
+#+begin_src latex
+ \def\lstlanguagefiles{
+ lstlang0.sty,
+ lstlang1.sty,
+ lstlang2.sty,
+ lstlang3.sty,
+ ./\c__letgut_lstlanguage_file_tl,
+ ../\c__letgut_lstlanguage_file_tl,
+ \c__letgut_lstlanguage_file_tl
+ }
+#+end_src
+
+We define a listing style specific to LaTeX listings.
+
+#+begin_src latex
+ \lstdefinestyle{__letgut_latex_listings_style}{
+ language=TeX,%
+ alsolanguage=[AlLaTeX]TeX,%
+ alsolanguage=[LaTeX]TeX,%
+ alsolanguage=[plain]TeX,%
+ alsolanguage=[common]TeX,%
+ alsolanguage=[primitive]TeX,%
+ alsolanguage=[extLaTeX]TeX,%
+ alsolanguage=[classes]TeX,%
texcsstyle=*\color{__letgut_texcs},
commentstyle=\color{__letgut_comment}\itshape,
- keywordstyle= \color{__letgut_argument-specification-separator},
+ keywordstyle= \color{__letgut_argument_specification_separator},
keywordstyle={[2]\color{__letgut_environment}},
keywordstyle={[3]\color{__letgut_key}},
keywordstyle={[4]\color{__letgut_value}},
- keywordstyle={[5]\color{__letgut_argument-specification}},
+ keywordstyle={[5]\color{__letgut_argument_specification}},
keywordstyle={[6]\color{__letgut_key}},
- escapechar=£,
+ numbers=left,
+#+end_src
+
+The ~listings~ package defines some of the LaTeX's environments as keywords of
+order 1. This would force us to do the same in our own language driver file but
+would ruin our effort to stylize in a special way (in red) other keywords (see
+~otherkeywords={...}~) that are stylized as keywords of order 1. Hence, we
+delete these keywords of order 1 and will add them as keywords of order 2 like
+all the environments in our own language driver file (in the ~extLaTeX~ dialect
+that we load by default).
+
+#+begin_src latex
+ deletekeywords={%
+ array,center,displaymath,document,enumerate,eqnarray,%
+ equation,flushleft,flushright,itemize,list,lrbox,math,minipage,%
+ picture,sloppypar,tabbing,tabular,trivlist,verbatim,%
+ },%
+#+end_src
+
+#+begin_src latex
literate=*%
{\\\\}{{{\color{__letgut_texcs}\textbackslash\textbackslash}}}{2}%
{\\[}{{\textcolor{__letgut_math}{\textbackslash[}}}{2}%
@@ -2886,11 +3076,31 @@ listings.
}
#+end_src
+We first define some colors used in the listings and examples.
+
+#+begin_src latex
+ \definecolor{__letgut_backgroundCode}{cmyk}{0,0,0,0.04}
+ \definecolor{__letgut_borderCode}{cmyk}{0,0,0,0.2}
+ \definecolor{__letgut_foregroundLinenumber}{cmyk}{0,0,0,0.5}
+ \definecolor{__letgut_foregroundMention}{cmyk}{0,0,0,0}
+ \definecolor{__letgut_backgroundResult}{cmyk}{0,0,0,0}
+ #+end_src
+
For the listings and examples, we rely on \package*{tcolorbox}, and more
specifically on some of its libraries.
#+begin_src latex
- \tcbuselibrary{listings,xparse,breakable,skins}
+ \tcbuselibrary{listings,xparse,breakable,skins,hooks}
+#+end_src
+
+We want some common settings for all the ~tcolorbox~es.
+
+#+begin_src latex
+ \tcbset{
+ breakable,
+ sharp~ corners,
+ fonttitle=\sffamily\bfseries,
+ }
#+end_src
The functions:
@@ -2932,7 +3142,7 @@ The functions:
}
#+end_src
-We define the style of the codes and the results boxes.
+We define the style of the codes.
#+begin_src latex
\tl_set:Nn \l__letgut_reference_text_tl {
@@ -2941,32 +3151,20 @@ We define the style of the codes and the results boxes.
\tcbset{
__letgut_code/.style={
listing~ options={
- % style=tcblatex,
- numbers=left,
- numbersep=\c__letgut_number_sep_dim,
- #+end_src
- We want the line numbers to not be selectable, hence the ~\__letgut_unselectable:n~:.
- #+begin_src latex
- numberstyle=
- \scriptsize
- \ttfamily
- \color{__letgut_foregroundLinenumber}
- \__letgut_unselectable:n,
- },
- every~ float=\raggedleft,
- colback=__letgut_backgroundCode,
- breakable,
- sharp~ corners,
- boxrule=0.25mm,
- colframe=__letgut_borderCode,
- sidebyside~ align=top~ seam,
- toprule~ at~ break=0mm,
- bottomrule~ at~ break=0mm,
- colbacktitle=__letgut_borderCode,
- fonttitle=\sffamily\bfseries,
- before~ title={
- \tl_set:Nn \l__letgut__tex_stuff_font_switch_tl {\rmfamily}
- },
+ style=__letgut_latex_listings_style,
+ },
+ every~ float=\raggedleft,
+ colback=__letgut_backgroundCode,
+ boxrule=0.25mm,
+ colframe=__letgut_borderCode,
+ sidebyside~ align=top~ seam,
+ toprule~ at~ break=0mm,
+ bottomrule~ at~ break=0mm,
+ colbacktitle=__letgut_borderCode,
+ fonttitle=\sffamily\bfseries,
+ before~ title={
+ \tl_set:Nn \l__letgut__tex_stuff_font_switch_tl {\rmfamily}
+ },
#+end_src
We define a custom \package*{tcolorbox}'s ~title addon~ option that let us
specify an addon to the title which will added after the automatically
@@ -2989,6 +3187,9 @@ specify the width of the result which is ~\linewidth~ by default.
result~ width/.store~ in=\l__letgut_result_width_dim,
result~ width=\linewidth,
},
+ #+end_src
+We define more specifically the style of the codes with results.
+ #+begin_src latex
__letgut_code_result/.style={
__letgut_code={#1},
bicolor,
@@ -3161,8 +3362,322 @@ We now use hooks in order to...
\skip_set_eq:NN \intextsep \c__letgut_reduced_intextsep_skip
}
}
+ #+end_src
+
+Since the syntax highlighting is reset at each ~\input~, the ~ltx-code-*~
+environments above provide syntax highlighting only for the commands of the \TeX
+dialects specified in the class. So we provide a specific command that let us
+specify (the dialects of) the main language (\TeX by default) for which we want
+syntax highlighting. This assumes that the commands and keywords of these
+packages are listed (properly, according to the ~listings~ package syntax) in
+the `lstlang0.sty` or ~letgut-lstlang.sty~ files.
+
+ #+begin_src latex
+ \cs_new_protected:Npn \__letgut_tcbset:n #1
+ {
+ \tcbset{
+ __letgut_code/.append~ style={
+ listing~ options~ app={
+ #1
+ }
+ }
+ }
+ }
+ \cs_new_protected:Npn \__letgut_alsolanguage_list:nn #1 #2
+ {
+ #+end_src
+ To reduce syntax highlighting conflicts, we reset all previous ones each
+ time a new one is asked.
+ #+begin_src latex
+ \lstset{%
+ style=__letgut_reset_listings_styles,%
+ }
+ \tl_if_empty:nTF {#1} {
+ \tl_set:Nx \l_tmpa_tl {
+ alsolanguage={#2}
+ }
+ \exp_args:NV \__letgut_tcbset:n
+ {
+ \l_tmpa_tl
+ }
+ }{
+ \seq_set_from_clist:Nn \l_tmpa_seq {#1}
+ \seq_set_map_x:NNn \l_tmpb_seq \l_tmpa_seq {
+ alsolanguage={[##1]#2}
+ }
+ \tl_set:Nx \l_tmpa_tl
+ {
+ \seq_use:Nn \l_tmpb_seq {,}
+ }
+ \exp_args:NV \__letgut_tcbset:n
+ {
+ \l_tmpa_tl
+ }
+ }
+ }
+ \NewDocumentCommand{\syntaxhl}{ O{TeX} m}{%
+ \__letgut_alsolanguage_list:nn {#2} {#1}
+ }
+ #+end_src
+
+*** Terminal listings
+
+We define a command dedicated to terminal stdin and stdout.
+
+#+begin_src latex
+\AddToHook{begindocument/before}{
+#+end_src
+
+We define a listing style specific to these terminal commands.
+
+ #+begin_src latex
+ \definecolor{__letgut_terminal_prompt}{RGB}{204,0,0}
+ \colorlet{__letgut_terminal_comment}{gray!80}
+ \definecolor{__letgut_terminal_commands}{RGB}{241,124,81}
+ \definecolor{__letgut_terminal_keywords}{RGB}{173,127,168}
+ \definecolor{__letgut_terminal_variables}{RGB}{114,159,207}
+ \colorlet{__letgut_terminal_utilities}{__letgut_terminal_commands}
+ \definecolor{__letgut_terminal_strings}{RGB}{78,154,6}
+#+end_src
+
+ #+begin_src latex
+ \lstdefinestyle{__letgut_terminal_listings_style}{
+ commentstyle= \color{__letgut_terminal_comment},
+ keywordstyle= \color{__letgut_terminal_commands},
+ keywordstyle={[2]\color{__letgut_terminal_keywords}},
+ keywordstyle={[3]\color{__letgut_terminal_utilities}},
+ stringstyle= \color{__letgut_terminal_strings},
+ literate=*%
+ {$}{{\textcolor{__letgut_terminal_variables}{\$}}}{1}%$
+ }
#+end_src
+We define a dialect which is missing in the \package*{listings}.
+
+#+begin_src latex
+ \lstdefinelanguage{terminal}{%
+ morekeywords={%
+ alias,bg,bind,break,builtin,caller,cd,command,compgen,%
+ complete,compopt,continue,declare,dirs,disown,echo,enable,%
+ eval,exec,exit,export,fc,fg,getopts,hash,help,history,%
+ jobs,kill,let,local,logout,mapfile,popd,printf,pushd,pwd,%
+ read,readarray,readonly,return,set,shift,shopt,source,%
+ suspend,test,times,trap,type,typeset,ulimit,umask,unalias,%
+ unset,wait,%
+ },%
+ morekeywords=[2]{%
+ case,do,done,elif,else,esac,fi,for,function,if,in,select,%
+ then,time,until,while,%
+ },%
+ morekeywords=[3]{%
+ apropos,apt,apt-get,aptitude,aspell,at,awk,base32,base64,%
+ basename,bash,bc,bzip2,cal,cat,cfdisk,chattr,chgrp,%
+ chkconfig,chmod,chown,chpasswd,chroot,cksum,clear,cmp,comm,%
+ cp,cpio,cron,crontab,csplit,curl,cut,date,dc,dd,ddrescue,%
+ df,diff,diff3,dig,dir,dircolors,dirname,dmesg,dos2unix,%
+ dpkg,du,egrep,eject,env,ethtool,expand,expr,false,fdformat,%
+ fdisk,fgrep,file,find,fmt,fold,format,free,fsck,ftp,fuser,%
+ gawk,grep,groupadd,groupdel,groupmod,groups,gzip,head,%
+ hostname,htop,iconv,id,ifconfig,ifdown,ifup,import,install,%
+ iostat,ip,join,killall,less,link,ln,locate,logname,look,%
+ lpc,lpr,lprint,lprintd,lprintq,lprm,ls,lsattr,lsblk,lsof,%
+ lspci,make,man,mkdir,mkfifo,mkfile,mkisofs,mknod,mktemp,%
+ mmv,more,most,mount,mtools,mtr,mv,nc,netstat,nft,nice,nl,%
+ nohup,notify-send,nslookup,op,open,passwd,paste,pathchk,%
+ Perf,pgrep,ping,pkill,pr,printcap,printenv,ps,pv,quota,%
+ quotacheck,ram,rar,rcp,reboot,remsync,rename,renice,rev,rm,%
+ rmdir,rsync,scp,screen,sdiff,sed,seq,sftp,shuf,shutdown,%
+ sleep,slocate,sort,split,ss,ssh,stat,strace,su,sudo,sum,%
+ sync,tail,tar,tee,timeout,tmux,top,touch,tput,tr,%
+ traceroute,true,tsort,tty,umount,uname,unexpand,uniq,units,%
+ unix2dos,unrar,unshar,uptime,useradd,userdel,usermod,users,%
+ uudecode,uuencode,vdir,vi,vmstat,watch,wc,wget,whereis,%
+ which,who,whoami,write,xargs,xdg-open,xxd,xz,yes,zip,%
+ },%
+ alsoletter={2346-},%
+ morecomment=[l]\#,%
+ morestring=[d]",%
+ morestring=[d]',%
+ sensitive%
+ }[keywords,comments,strings]%
+#+end_src
+
+We define some colors used in the terminal listings.
+
+ #+begin_src latex
+ \definecolor{__letgut_foreground_terminal_dark}{named}{black}
+ \colorlet{__letgut_background_terminal_dark_stdin}{
+ letgut_pagecolor!95!gray
+ }
+ \colorlet{__letgut_background_terminal_dark_stdout}{
+ __letgut_background_terminal_dark_stdin!60
+ }
+ \definecolor{__letgut_foreground_terminal_light}{named}{black}
+ \definecolor{__letgut_background_terminal_light_stdin}{rgb}{
+ 0.99,0.975,0.98
+ }
+ \colorlet{__letgut_background_terminal_light_stdout}{
+ __letgut_background_terminal_light_stdin!40
+ }
+#+end_src
+
+ #+begin_src latex
+ \bool_if:NTF \g__letgut_paper_bool {
+ \colorlet{__letgut_foreground_terminal}{
+ __letgut_foreground_terminal_light
+ }
+ \colorlet{__letgut_background_terminal_stdin}{
+ __letgut_background_terminal_light_stdin
+ }
+ \colorlet{__letgut_background_terminal_stdout}{
+ __letgut_background_terminal_light_stdout
+ }
+ }{
+ \colorlet{__letgut_foreground_terminal}{
+ __letgut_foreground_terminal_dark
+ }
+ \colorlet{__letgut_background_terminal_stdin}{
+ __letgut_background_terminal_dark_stdin
+ }
+ \colorlet{__letgut_background_terminal_stdout}{
+ __letgut_background_terminal_dark_stdout
+ }
+ }
+ #+end_src
+
+ We define the style of the ~tcolorbox~ in which the terminal stdin and stdout
+ will be displayed.
+
+ #+begin_src latex
+ \tcbset{%
+ terminal/.style={%
+ colupper=__letgut_foreground_terminal,
+ collower=__letgut_foreground_terminal,
+ breakable,
+ segmentation~ at~ break=false,
+ boxrule=0mm,
+ before~ lower={\tcbset{every~ listing~ line={}}},
+ listing~ options={%
+ style=__letgut_terminal_listings_style,
+ language=terminal,
+ },
+ every~ listing~ line={%
+ \textcolor{__letgut_terminal_prompt}{%
+ \ttfamily%
+ \bfseries%
+ \__letgut_unselectable:n {#1\c_space_tl}
+ }
+ },
+ },
+ }
+ #+end_src
+
+ We define now the command
+
+ #+begin_src latex
+ \cs_new_protected:Npn \__letgut_terminal:nnnn #1 #2 #3 #4
+ {
+ \bool_set_false:N \l_tmpa_bool
+ \tl_if_empty:nF {#3}{
+ \tcbset{tempfile=\jobname-stdin.tex}
+ \exp_args:Nx \scantokens
+ {
+ \token_to_str:N\begin{tcbwritetemp}
+ #3
+ \token_to_str:N\end{tcbwritetemp}
+ }
+ }
+ \tl_if_empty:nF {#4}{
+ \tcbset{tempfile=\jobname-stdout.tex}
+ \exp_args:Nx \scantokens
+ {
+ \token_to_str:N\begin{tcbwritetemp}
+ #4
+ \token_to_str:N\end{tcbwritetemp}
+ }
+ }
+ \tl_if_empty:nTF {#3}{
+ \tl_if_empty:nTF {#4}{
+ \bool_set_true:N \l_tmpa_bool
+ }{
+ \tcbset{colback=__letgut_background_terminal_stdout}
+ }
+ }{
+ \tcbset{colback=__letgut_background_terminal_stdin}
+ \tl_if_empty:nTF {#4}{
+ }{
+ \tcbset{
+ bicolor,
+ middle=0mm,
+ boxsep=0mm,
+ colbacklower=__letgut_background_terminal_stdout,
+ }
+ }
+ }
+ \bool_if:NF \l_tmpa_bool {
+ \begin{tcolorbox}[terminal={#1},#2]
+ \lstset{aboveskip=0pt}
+ \tl_if_empty:nF {#3}{
+ \tcbset{
+ tempfile=\jobname-stdin.tex,
+ }
+ \tcbusetemplisting
+ \tl_if_empty:nF {#4}{
+ \tcblower
+ }
+ }
+ \tl_if_empty:nF {#4}{
+ \tl_if_empty:nF {#3}{
+ \lstset{aboveskip=0pt}
+ }
+ \tcbset{
+ tempfile=\jobname-stdout.tex,
+ every~ listing~ line={},
+ listing~ options~ app={
+ language={}
+ }
+ }
+ \tcbusetemplisting
+ }
+ \end{tcolorbox}
+ }
+ }
+ \NewDocumentCommand{\terminal}{ O{\$} O{} +v +v}{
+ \__letgut_terminal:nnnn {#1} {#2} {#3} {#4}
+ }
+ #+end_src
+
+ We close the ~\AddToHook{begindocument/before}~ argument.
+
+ #+begin_src latex
+}
+ #+end_src
+
+*** Unicode characters with positions above 256
+
+Unicode characters with positions above 256 causes troubles in
+listings. Here is a workaround for some of them (see
+https://tex.stackexchange.com/a/25396).
+
+ #+begin_src latex
+ \lst@InputCatcodes
+ \def\lst@DefEC{%
+ \lst@CCECUse \lst@ProcessLetter
+ ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f%
+ ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f%
+ ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af%
+ ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf%
+ ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf%
+ ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df%
+ ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef%
+ ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff%
+ ^^^^201c^^^^201d% for “ and ”
+ ^^^^215b% for ⅛
+ ^^00%
+ }
+ \lst@RestoreCatcodes
+ #+end_src
+
** Local config file
Each issue of the Lettre requires certain local configurations: configuration
@@ -3170,13 +3685,13 @@ dedicated to the issue in question, particular packages used in the articles,
specific configurations of the \package*{listings}, etc. In order to not clutter
the main \file*{.tex} of the Lettre, a local configuration file named
\file{localconf.tex}, if present in the current directory, is automatically
-included at the end of the end of the preamble. And since this file is input in
-the current category régime (~\ExplSyntaxOn~), a ~\ExplSyntaxOff~ is
-automatically inserted at its beginning.
+included at the end the preamble. And since this file is input in the current
+category régime (~\ExplSyntaxOn~), a ~\ExplSyntaxOff~ is automatically inserted
+at its beginning.
#+begin_src latex
\file_if_exist:nT {./\c__letgut_local_config_file_tl}{
- \AddToHook { file/before/./\c__letgut_local_config_file_tl } {
+ \AddToHook { file/./\c__letgut_local_config_file_tl/before } {
\ExplSyntaxOff
}
\file_input:n {./\c__letgut_local_config_file_tl}
@@ -3201,22 +3716,22 @@ several purposes:
- the books reviews,
- the books advertisements.
-#+begin_src latex :tangle letgut.lbx :exports both
- \ProvidesFile{letgut.lbx}[2022-03-22 v0.9.1 letgut localization]
- \InheritBibliographyExtras{french}
- \DeclareBibliographyStrings{
- inherit = {french},
- number = {{\no}{\no}},
- volume = {{volume}{vol\adddot}},
- volumes = {{volumes}{vol\adddot}},
- }
+#+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.lbx :exports both
+\ProvidesFile{letgut.lbx}[2022-06-18 v0.9.2 letgut localization]
+\InheritBibliographyExtras{french}
+\DeclareBibliographyStrings{
+ inherit = {french},
+ number = {{\no}{\no}},
+ volume = {{volume}{vol\adddot}},
+ volumes = {{volumes}{vol\adddot}},
+}
#+end_src
We create the new bibliography driver ~bookreview~ (that seems to
create the corresponding new entry).
- #+begin_src latex :tangle letgut.dbx :exports both
- \ProvidesFile{letgut.dbx}[2022-03-22 v0.9.1 letgut data model macros]
+ #+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.dbx :exports both
+ \ProvidesFile{letgut.dbx}[2022-06-18 v0.9.2 letgut data model macros]
\DeclareBibliographyDriver{bookreview}{%
\usebibmacro{bibindex}%
\usebibmacro{begentry}%
@@ -3270,21 +3785,21 @@ several purposes:
We provide a specific ~biblatex~ citation style .
-#+begin_src latex :tangle letgut.cbx :exports both
- \ProvidesFile{letgut.cbx}[2022-03-22 v0.9.1 letgut base citation style]
+#+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.cbx :exports both
+ \ProvidesFile{letgut.cbx}[2022-06-18 v0.9.2 letgut base citation style]
\RequireCitationStyle{numeric}
#+end_src
The books reviewed have their titles not only emphasized, but in bold face as
well...
-#+begin_src latex :tangle letgut.cbx :exports both
+#+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.cbx :exports both
\DeclareFieldFormat[bookreview]{title}{\textbf{\emph{#1}}}
#+end_src
... but not their subtitles.
-#+begin_src latex :tangle letgut.cbx :exports both
+#+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut.cbx :exports both
\renewbibmacro*{title}{%
\ifboolexpr{
test {\iffieldundef{title}}
@@ -3304,7 +3819,9 @@ well...
** Example file of an issue of the newsletter
- #+begin_src latex :tangle lettre-example.tex :exports both
+ #+begin_src latex :tangle ../../../doc/lualatex/letgut/lettre-example.tex :exports both
+ % Hey, Emacs! This is a -*- mode: latex -*- file!
+
\documentclass{letgut}
\letgutsetup{
@@ -3366,6 +3883,13 @@ well...
% % `informations=false`.
%
% , informations=false
+ %
+ % % Lors de la conception d'un numéro de la Lettre,
+ % % il peut être utile d'avoir un plan détaillé au
+ % % maximum de l'ensemble du document. C'est ce que
+ % % permet l'option `detailedtoc`.
+ %
+ % , detailedtoc
}
\setmainfont{TeX Gyre Schola} % Par exemple
@@ -3380,7 +3904,6 @@ well...
\end{document}
%%% Local Variables:
- %%% mode: latex
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:
@@ -3388,7 +3911,7 @@ well...
** Example of an editorial
- #+begin_src latex :tangle editorial.tex :exports both
+ #+begin_src latex :tangle ../../../doc/lualatex/letgut/editorial.tex :exports both
Ceci est un intéressant éditorial de la \lettregut{}
dans lequel on peut causer de l'\ag{} et du \ca{}
de l'association. Il peut aussi y être question du \ctan.
@@ -3407,7 +3930,9 @@ well...
** Informations about \gutenberg
- #+begin_src latex :tangle informations-gut.tex :exports both
+ #+begin_src latex :tangle ../../../tex/lualatex/letgut/informations-gut.tex :exports both
+ % Hey, Emacs! This is a -*- mode: latex -*- file!
+
\enlargethispage{1.5cm}
\small
\vspace*{-1cm}
@@ -3418,24 +3943,24 @@ well...
\end{minipage}%
}%
\hfill%
- \begin{minipage}[t]{.4\textwidth}%\vspace{0pt}%
+ \begin{minipage}[t]{.5\textwidth}%\vspace{0pt}%
\footnotesize\raggedleft%
Association \gut{}\\
15 rue des Halles -- \textsc{bp} 74\\
75001 Paris\\
France\\
- \nolinkurl{secretariat@gutenberg.eu.org}
+ \url{secretariat[at]gutenberg[dot]eu[dot]org}
\end{minipage}%
\begin{description}
- \item[Site internet :] \url{https://www.gutenberg.eu.org/}
- \item[\Cahiers{} :] \url{http://cahiers.gutenberg.eu.org/}
+ \item[Site Internet :] \url{https://www.gutenberg-asso.fr/}
+ \item[\Cahiers{} :] \url{http://www.numdam.org/journals/CG/}
\item[Problèmes techniques :]
\leavevmode
\begin{description}
\item[la liste \texttt{gut} :]
- \url{https://www.gutenberg.eu.org/-Listes-de-diffusion-}
- \item[le site \TeX nique de questions et réponses :]
+ \url{https://www.gutenberg-asso.fr/-Listes-de-diffusion-}
+ \item[le site \hologo{TeX}nique de questions et réponses :]
\url{https://texnique.fr/}
\item[la foire aux questions :]
\url{https://faq.gutenberg.eu.org}
@@ -3443,9 +3968,9 @@ well...
\end{description}
%
\alertbox{%
- Cette association est la vôtre: faites-nous part de
+ Cette association est la vôtre : faites-nous part de
vos idées, de vos envies, de vos préoccupations
- à l'adresse \nolinkurl{secretariat@gutenberg.eu.org}.%
+ à l'adresse \url{secretariat[at]gutenberg[dot]eu[dot]org}.%
}
% \section[Association GUTenberg (tout sur l')]
@@ -3468,19 +3993,20 @@ well...
% confidentielles, merci de le signaler.
\end{itemize}
+ \vspace*{-0.7cm}
\section{Tarifs \the\year}
Les membres de \gut\ peuvent adhérer à l'association
internationale, le \acf{tug}, et recevoir son bulletin
- \emph{\acs{tug}boat} à un tarif préférentiel :
+ \tugboat{} à un tarif préférentiel :
\begin{description}
- \item[tarif normal :] \EUR{65} (au lieu de 85~\$)
- \item[tarif étudiant :] \EUR{40} (au lieu de 55~\$)
+ \item[tarif normal :] 65~€ (au lieu de 85~\$)
+ \item[tarif étudiant :] 40~€ (au lieu de 55~\$)
\end{description}
- % (\EUR{49,50}, étudiants et demandeurs d'emploi :
- % \EUR{29}, au lieu de 85\$ et % 65\$). Voir
+ % (49~€50}, étudiants et demandeurs d'emploi :
+ % 29~€, au lieu de 85\$ et % 65\$). Voir
% \url{%
- % https://www.gutenberg.eu.org/?Adherer-a-l-association%
+ % https://www.gutenberg-asso.fr/?Adherer-en-ligne%
% }.
\footnotesize
@@ -3489,13 +4015,13 @@ well...
\toprule
\textbf{Type d'adhésion} & \textbf{Prix} \\
\midrule
- Membre individuel & \EUR{30} \\
- Membre individuel + adhésion \acs{tug} & \EUR{95} \\
- Membre individuel étudiant/demandeur d'emploi & \EUR{15} \\
- Membre individuel étudiant + adhésion \acs{tug} & \EUR{55} \\
- Association d'étudiants & \EUR{65} \\
- Organisme à but non lucratif & \EUR{130} \\
- Organisme à but lucratif & \EUR{229} \\
+ Membre individuel & 30~€ \\
+ Membre individuel + adhésion \acs{tug} & 95~€ \\
+ Membre individuel étudiant/demandeur d'emploi & 15~€ \\
+ Membre individuel étudiant + adhésion \acs{tug} & 55~€ \\
+ Association d'étudiants & 65~€ \\
+ Organisme à but non lucratif & 130~€ \\
+ Organisme à but lucratif & 229~€ \\
\bottomrule
\end{tabular}
\end{center}
@@ -3506,7 +4032,7 @@ well...
\begin{itemize}
\item \textbf{virement bancaire}%
\footnote{Nous vous remercions de \textbf{privilégier}
- le \textbf{virement bancaire}.\label{fn:1}} (IBAN :
+ le \textbf{virement bancaire}.\label{fn:1}} (\textsc{iban} :
FR76 1870 7000 3003 0191 3568 475)%
\leavevmode
@@ -3515,9 +4041,9 @@ well...
dans les références du virement !%
}
\item Paypal\footnotemark[\value{footnote}] :
- \url{https://www.gutenberg.eu.org/?Adherer-en-ligne}
+ \url{https://www.gutenberg-asso.fr/?Adherer-en-ligne}
\item bulletin et chèque\footnotemark[\value{footnote}] :
- \url{https://www.gutenberg.eu.org/?Adherer-a-l-association}
+ \url{https://www.gutenberg-asso.fr/?Adherer-a-l-association}
\end{itemize}
\vfill
@@ -3544,8 +4070,8 @@ well...
Directeur de la publication :
& \person{Bideault, Patrick} \\
Comité de rédaction :
- & {Patrick \bsc{Bideault}, Denis \bsc{Bitouzé}, \\
- Céline \bsc{Chevalier} \& Maxime \bsc{Chupin}} \\
+ & {Patrick Bideault, Denis Bitouzé, \\
+ Céline Chevalier \& Maxime Chupin} \\
Adresse de la rédaction : &
{
Association \gut\\
@@ -3553,18 +4079,3707 @@ well...
75001 Paris
}
\\
- \acs{issn} : & 2742-6149 (version numérique)
+ \acs{issn} : & \letgutissn
\end{tblr}
\end{center}
\vfill
\mbox{}
\clearpage
-
- %%% Local Variables:
- %%% mode: latex
- %%% End:
#+end_src
-* Footnotes
+** Acronyms
+
+#+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut-acronyms.tex :exports both
+% Hey, Emacs! This is a -*- mode: latex -*- file!
+
+%%%%%%%%%%%%%%%%%%%%%
+% Acronymes anglais %
+%%%%%%%%%%%%%%%%%%%%%
+\letgutacro%
+{CTAN}%
+{\href{https://www.ctan.org/}{Comprehensive \hologo{TeX} Archive
+ Network}}%
+[réseau complet d'archives \hologo{TeX}]
+
+\letgutacro%
+{PDF}%
+{Portable Document Format}%
+[format de document portable]
+
+\letgutacro%
+{URL}%
+{Uniform Resource Locator}%
+[localisateur uniforme de ressource ou, plus clairement, format des
+ adresses du Web]
+
+\letgutacro%
+{ORCID}%
+{Open Researcher and Contributor \textsc{id}}%
+[identifiant ouvert pour chercheur et contributeur]
+
+\letgutacro%[extra-foreign=souvent librement traduit en \enquote{foire
+ %aux questions}]
+{FAQ}%
+{Frequently Asked Questions}%
+[questions fréquemment posées]
+
+\letgutacro%
+{SVG}%
+{Scalable Vector Graphics}%
+[graphiques vectoriels extensibles]
+
+\letgutacro%
+{DNS}%
+{Domain Name System}%
+[système de noms de domaine]
+
+\letgutacro%
+{VPS}%
+{Virtual Private Server}%
+[serveur dédié virtuel]
+
+\letgutacro%
+{LDAP}%
+{Lightweight Directory Access Protocol}%
+[protocole d'accès à répertoire léger, sytème garantissant
+ l'authentification d'utilisateurs de plusieurs services dispersés]
+
+\letgutacro%
+{OTF}%
+{Open Type Format}%
+[]
+
+\letgutacro%
+{DOI}%
+{Digital Object Identifier}%
+[identifiant numérique d'objet]
+
+\letgutacro%
+{ISSN}%
+{International Standard Serial Number}%
+[numéro international normalisé des publications en série]
+
+\letgutacro%
+{TUG}%
+{\hologo{TeX} User Group}%
+[groupe (international) d'utilisateurs de \hologo{TeX}]
+
+\letgutacro%
+{WCAG}%
+{Web Content Accessibility Guidelines}%
+[directives sur l'accessibilité du contenu Web]
+
+\letgutacro%
+{HTML}%
+{HyperText Markup Language}%
+[langage de balises pour l'hypertexte]
+
+\letgutacro%
+{CSS}%
+{Cascading Style Sheets}%
+[feuilles de style en cascade]
+
+\letgutacro%
+{UTF}%
+{Universal (Character Set) Transformation Format}%
+[format de transformation (du jeu) universel (de caractères codés)]
+
+\letgutacro%[short=\emph{Ti\emph{k}Z},short-format=\em,foreign-babel=german,foreign-locale=allemand]
+{TIKZ}%
+{Ti\emph{k}Z ist \emph{kein} Zeichenprogramm}%
+[Ti\emph{k}Z \emph{n'}est \emph{pas} un programme de dessin]
+
+\letgutacro%
+{PGF}%
+{Portable Graphics Format}%
+[format de graphiques portable]
+
+\letgutacro%
+{GPL}%
+{\textsc{gnu} General Public License}%
+[licence publique générale \textsc{gnu}]
+
+\letgutacro%
+{OFL}%
+{SIL Open Font License}%
+[]
+
+\letgutacro%
+{DVI}%
+{DeVice-Independent}%
+[indépendant du type de périphérique]
+
+\letgutacro%
+{PS}%
+{PostScript}%
+[]
+
+\letgutacro%
+{DVIPS}%
+{\acs{dvi}-to-\acs{ps} (translator)}%
+[(convertisseur) \acs{dvi} vers \acs{ps}]
+
+\letgutacro%
+{IPA}%
+{International Phonetic Alphabet}%
+[alphabet phonétique international]
+
+\letgutacro%
+{TIPA}%
+{\hologo{TeX} \acs{ipa} or Tokyo \acs{ipa}}%
+[alphabet phonétique international]
+
+\letgutacro%
+{XML}%
+{eXtensible Markup Language}%
+[langage de balisage extensible]
+
+\letgutacro%
+{APA}%
+{American Psychological Association}%
+[association américaine de psychologie]
+
+\letgutacro%
+{OS}%
+{Operating System}%
+[système d'exploitation]
+
+\letgutacro%
+{BSD}%
+{Berkeley Software Distribution}%
+[collection de logiciels de Berkeley]
+
+\letgutacro%
+{IMAP}%
+{Internet Message Access Protocol}%
+[]
+
+\letgutacro%
+{SMTP}%
+{Simple Mail Transfer Protocol}%
+[protocole simple de transfert de courrier]
+
+\letgutacro%
+{RTF}%
+{Rich Text Format}%
+[format de texte enrichi]
+
+\letgutacro%
+{WYSIWYG}%
+{What You See Is What You Get}%
+[ce que vous voyez est ce que vous obtenez]
+
+\letgutacro%
+{ISO}%
+{\href{https://www.iso.org/home.html}{International Organization for
+ Standardization}}%
+[\href{https://www.iso.org/fr/home.html}{organisation internationale de
+ normalisation}]
+
+\letgutacro%
+{OFF}%
+{Open Font Format}%
+[format de fonte ouvert]
+
+\letgutacro%
+{CSV}%
+{Comma-separated values}%
+[valeurs séparées par des virgules]
+
+\letgutacro%
+{YAML}%
+{\textsc{yaml} Ain’t Markup Language}%
+[\textsc{yaml} n'est pas un langage de balisage (acronyme récursif)]
+
+\letgutacro%
+{UCA}%
+{Unicode Collation Algorithm}%
+[algorithme de tris d'Unicode]
+
+\letgutacro%
+{NFSS}%
+{New Font Selection Scheme}%
+[nouveau schéma de sélection de fonte]
+
+\letgutacro%
+{ASCII}%
+{American Standard Code for Information Interchange}%
+[code américain normalisé pour l'échange d'information]
+
+\letgutacro%
+{TDS}%
+{\TeX{} Directory Structure}%
+[structure de répertoire de \TeX{}]
+
+%%%%%%%%%%%%%%%%%%%%%%
+% Acronymes français %
+%%%%%%%%%%%%%%%%%%%%%%
+\letgutacro%
+{SMAI}%
+{\href{http://smai.emath.fr/}{Société de Mathématiques Appliquées et
+ Industrielles}}%
+
+\letgutacro%
+{AG}%
+{Assemblée Générale}%
+
+\letgutacro%
+{CA}%
+{Conseil d'Administration}%
+
+\letgutacro%
+{SHS}%
+{Sciences Humaines et Sociales}%
+
+\letgutacro%
+{IREM}%
+{\href{https://www.univ-irem.fr/}{Instituts de Recherche sur
+ l'Enseignement des Mathématiques}}%
+
+\letgutacro%
+{MEEF}%
+{Métiers de l'Enseignement, de l'Éducation et de la Formation}%
+
+\letgutacro%
+{ECM}%
+{\href{https://texnique.fr/osqa/faq/\#custom-id-ecm}{Exemple Complet
+ Minimal}}%
+
+\letgutacro%
+{INSPÉ}%
+{\href{https://www.reseau-inspe.fr/}{Instituts Nationaux Supérieurs du
+ Professorat et de l'Éducation}}%
+
+\letgutacro%[short=\textsc{gra}pp\textsc{a},short-format=\upshape]
+{GRAppA}%
+{Groupe de recherche en Apprentissage Automatique}%
+
+\letgutacro%
+{BBB}%
+{BigBlueButton}%
+
+\letgutacro%
+{CV}%
+{Curriculum Vitæ}%
+
+\letgutacro%
+{RGPD}%
+{Règlement Général sur la Protection des Données}%
+
+\letgutacro%
+{NDLR}%
+{Note de la Rédaction}%
+
+\letgutacro%
+{BTS}%
+{Brevet de Technicien Supérieur}%
+
+\letgutacro%
+{APMEP}%
+{Association des Professeurs de Mathématiques de l'Enseignement Public}%
+
+\letgutacro%
+{PAO}%
+{Publication Assistée par Ordinateur}%
+#+end_src
-[fn:1]See \url{https://github.com/ho-tex/luacolor/issues/4\#issuecomment-848774260}.
+** Language driver file
+
+#+begin_src latex :tangle ../../../tex/lualatex/letgut/letgut-lstlang.sty :exports both
+ % \lst@definelanguage[...]{TeX}{%
+ % % Control sequences names
+ % moretexcs={%
+ % },%
+ % % Keywords of class 1 : keywords that contain other characters
+ % % (since of the same class as the ones specified as 'otherkeywords')
+ % morekeywords={%
+ % },%
+ % % Keywords of class 2 : environments names
+ % morekeywords=[2]{%
+ % },%
+ % % Keywords of class 3 : mandatory arguments (not environments) &
+ % % optional arguments which are keys (in key=value)
+ % morekeywords=[3]{%
+ % },%
+ % % Keywords of class 4 : values of keys (in key=value)
+ % morekeywords=[4]{%
+ % },%
+ % % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % % syntax)
+ % morekeywords=[5]{%
+ % },%
+ % % Keywords of class 6 : current package name (and possibly derived
+ % % packages)
+ % morekeywords=[6]{%
+ % %
+ % },%
+ % % otherkeywords={},
+ % % alsoletter={},
+ % % alsodigit={},%
+ % % alsoother={},%
+ % sensitive,%
+ % }[keywords,tex,comments%]
+
+ \lst@definelanguage[letgut]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ letgutsetup,title,subtitle,author,francophony,person,author,%
+ package,package*,class,class*,software,software*,file,file*,%
+ foreignloc,latinloc,gutenberg,gut,lettre,lettregut,Cahier,%
+ Cahiers,letgut,letgutcls,knuth,lamport,tugboat,item*,letgutacro,%
+ separator,alertbox,terminal,inputarticle,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ ctannews,ltx-code,ltx-code-result,ltx-code-external-result,%
+ bookreview,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ for-authors,for-readers,draft,final,screen,paper,number,date,%
+ pagecolor,allcolorslinks,membership-reminder,editorial,informations,%
+ title,addon,result width,reference,text,title,reviewer,bibkey,%
+ frontcover,price,result,and,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ letgut%
+ },%
+ % otherkeywords={},%
+ alsoletter={-\ },%
+ % alsodigit={},%
+ alsoother={*},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % LaTeX texcs and keywords that are missing in `listings` driver file
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[extLaTeX]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ Huge,LARGE,Large,LoadClass,NewCommandCopy,RequirePackage,%
+ ShowCommand,abovecaptionskip,abstractname,appendix,appendixname,%
+ arraycolsep,arrayrulewidth,author,backmatter,baselinestretch,%
+ belowcaptionskip,bf,bibindent,bibname,bigskipamount,bottomfraction,%
+ brokenpenalty,cal,chapter,chaptermark,chaptername,clubpenalty,%
+ columnsep,columnseprule,contentsname,date,dblfloatpagefraction,%
+ dblfloatsep,dbltextfloatsep,dbltopfraction,descriptionlabel,%
+ displaywidowpenalty,doublerulesep,evensidemargin,fboxrule,fboxsep,%
+ figurename,floatpagefraction,floatsep,footins,footnoterule,%
+ footnotesep,footnotesize,footskip,frontmatter,headheight,headsep,%
+ huge,indexname,indexspace,interlinepenalty,intextsep,it,jot,%
+ labelenumi,labelenumii,labelenumiii,labelenumiv,labelitemfont,%
+ labelitemi,labelitemii,labelitemiii,labelitemiv,labelsep,%
+ labelwidth,large,leftmargin,leftmargini,leftmarginii,leftmarginiii,%
+ leftmarginiv,leftmarginv,leftmarginvi,lineskip,listfigurename,%
+ listoffigures,listoftables,listtablename,mainmatter,maketitle,%
+ marginparpush,marginparsep,marginparwidth,maxdepth,medskipamount,%
+ mit,newblock,normallineskip,normalsize,oddsidemargin,paragraph,%
+ paragraphmark,parindent,parskip,part,partname,partopsep,%
+ postdisplaypenalty,predisplaypenalty,refname,rm,sc,scriptsize,%
+ section,sectionmark,setlength,sf,sl,small,smallskipamount,%
+ subitem,subparagraph,subparagraphmark,subsection,subsectionmark,%
+ subsubitem,subsubsection,subsubsectionmark,tabbingsep,tabcolsep,%
+ tablename,tableofcontents,textfloatsep,textfraction,textheight,%
+ textwidth,thechapter,theenumi,theenumii,theenumiii,theenumiv,%
+ theequation,theparagraph,thepart,thesection,thesubparagraph,%
+ thesubsection,thesubsubsection,tiny,title,today,topfraction,%
+ topmargin,topskip,tt,widowpenalty,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ abstract,array,center,description,displaymath,document,enumerate,%
+ eqnarray,equation,figure,flushleft,flushright,itemize,list,lrbox,math,%
+ minipage,picture,quotation,quote,sloppypar,tabbing,table,tabular,%
+ thebibliography,theindex,titlepage,trivlist,verbatim,verse,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ % c,cc,ccc,cccc,X,l,
+ empty,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ %
+ },
+ otherkeywords={|},%
+ % alsoletter={},% alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[listings]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ lstDeleteShortInline,lstMakeShortInline,lstalias,lstaspectfiles,%
+ lstdefineformat,lstdefinelanguage,lst@definelanguage,lstdefinestyle,%
+ lstindexmacro,lstinline,lstinputlisting,lstlanguagefiles,%
+ lstlgrindeffile,lstlistingname,lstlistingnamestyle,%
+ lstlistlistingname,lstlistoflistings,lstloadlanguages,lstname,%
+ lstnewenvironment,lstset,theHlstnumber,thelstlabel,thelstlisting,%
+ thelstnumber,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ lstlisting,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ 0.21,ABAP,ACM,ACMscript,ACSL,Ada,Algol,Ant,Assembler,Awk,%
+ Basic,C,C++,CIL,Caml,Clean,Cobol,Comal 80,Comsol,Delphi,%
+ Eiffel,Elan,Euphoria,Fortran,GAP,GCL,Gnuplot,Go,HTML,Haskell,%
+ IDL,JVMIS,Java,LLVM,Lingo,Lisp,Logo,Lua,ML,Mathematica,Matlab,%
+ Mercury,MetaPost,Miranda,Mizar,Modula-2,MuPAD,NASTRAN,OCL,%
+ OORexx,Oberon-2,Octave,Oz,PHP,PL/I,POV,PSTricks,Pascal,Perl,%
+ Plasm,PostScript,Prolog,Promela,Python,R,RSL,Reduce,Rexx,Ruby,%
+ S,SAS,SHELXL,SPARQL,SQL,Scala,Scilab,Simula,Swift,TeX,%
+ VBScript,VHDL,VRML,Verilog,XML,XSLT,[03]Fortran,[08]Fortran,%
+ [1.0]Mathematica,[11.0]Mathematica,[11]C++,[1974]Cobol,[1985]Cobol,%
+ [2005]Ada,[3.0]Mathematica,[5.0]Lua,[5.1]Lua,[5.2]Lua,%
+ [5.2]Mathematica,[5.3]Lua,[60]Algol,[67]Simula,[68]Algol,%
+ [77]Fortran,[83]Ada,[90]Fortran,[95]Ada,[95]Fortran,[97]VRML,%
+ [AMS]VHDL,[ANSI]C,[ANSI]C++,[AlLaTeX]TeX,[AspectJ]Java,[Auto]Lisp,%
+ [Borland6]Pascal,[CII]Simula,[CORBA]IDL,[DEC]Simula,[GNU]C++,%
+ [Handel]C,[IBM]Simula,[ISO]C++,[LaTeX]TeX,[Motorola68k]Assembler,%
+ [OMG]OCL,[Objective]C,[Objective]Caml,[PLUS]S,[POSIX]Awk,[R/2
+ 4.3]ABAP,[R/2 5.0]ABAP,[R/3 3.1]ABAP,[R/3 4.6C]ABAP,[R/3 6.10]ABAP,%
+ [Sharp]C,[Standard]Pascal,[VM/XA]Rexx,[Visual]Basic,[Visual]C++,%
+ [WinXP]command.com,[XSC]Pascal,[common]TeX,[decorative]OCL,%
+ [empty]IDL,[empty]Java,[empty]Lisp,[empty]Rexx,[empty]S,%
+ [empty]VHDL,[empty]make,[empty]tcl,[gnu]Awk,[gnu]make,[ibm]Cobol,%
+ [light]Caml,[plain]TeX,[primitive]TeX,[tk]tcl,[x86masm]Assembler,%
+ abovecaptionskip,aboveskip,alsodigit,alsolanguage,alsoletter,%
+ alsoother,backgroundcolor,basewidth,bash,basicstyle,%
+ belowcaptionskip,belowskip,boxpos,breakatwhitespace,breakautoindent,%
+ breakindent,breaklines,caption,captionpos,classoffset,columns,%
+ command.com,comment,comments,commentstyle,consecutivenumbers,csh,%
+ defaultdialect,deletecomment,deletedelim,deletedirectives,%
+ deleteemph,deleteendkeywords,deletehyperref,deleteindex,%
+ deletekeywordcomment,deletekeywords,deleteprocnamekeys,deletestring,%
+ deletetxcs,delim,directives,directivestyle,draft,elisp,emph,%
+ emphstyle,emptylines,erlang,escapebegin,escapechar,escapeend,%
+ escapeinside,extendedchars,fancyvrb,fillcolor,final,firstline,%
+ firstnumber,flexiblecolumns,float,floatplacement,fontadjust,%
+ formats,formfeed,frame,frameround,framerule,framesep,frameshape,%
+ framexbottommargin,framexleftmargin,framexrightmargin,%
+ framextopmargin,fvcmdparams,gobble,hansl,hyper,hyperanchor,%
+ hyperlink,hyperref,identifierstyle,includerangemarker,index,%
+ indexprocnames,indexstyle,inform,inputencoding,inputpath,%
+ keepspaces,keywordcomment,keywordcommentsemicolon,keywords,%
+ keywordsprefix,keywordstyle,ksh,label,language,lastline,lgrind,%
+ lgrindef,linerange,lineskip,linewidth,literate,make,makemacrouse,%
+ markfirstintag,mathescape,morecomment,moredelim,moredirectives,%
+ moreemph,moreendkeywords,morefvcmdparams,morehyperref,moreindex,%
+ morekeywordcomment,morekeywords,moreprocnamekeys,morestring,%
+ moretexcs,multicols,name,ndkeywords,ndkeywordstyle,noaspects,%
+ nolol,numberblanklines,numberbychapter,numberfirstline,numbers,%
+ numbersep,numberstyle,otherkeywords,podcomment,postbreak,prebreak,%
+ print,printpod,procnamekeys,procnames,procnamestyle,%
+ rangebeginprefix,rangebeginsuffix,rangeendprefix,rangeendsuffix,%
+ rangeprefix,rangesuffix,resetmargins,rulecolor,rulesep,%
+ rulesepcolor,savemem,sensitive,%
+ sh,showlines,showspaces,showstringspaces,showtabs,stepnumber,%
+ string,stringstyle,style,tab,tabsize,tag,tagstyle,tcl,texcl,%
+ texcs,texcsstyle,title,upquote,usekeywordsintag,xleftmargin,%
+ xrightmargin,LaTeX,TeX,tex%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ b,c,t,none,left,right,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ listings,%
+ },%
+ % otherkeywords={},%
+ alsoletter={@021.[]},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[xcolor]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ color,pagecolor,definecolor,colorlet,textcolor,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,%
+ lightgray,brown,lime,olive,orange,pink,purple,teal,violet },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ xcolor },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[expl3]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ .bool_gset,%
+ ExplFileDate,ExplFileDescription,ExplFileName,ExplFileVersion,%
+ ExplSyntaxOff,ExplSyntaxOn,GetIdInfo,ProvidesExplClass,%
+ ProvidesExplFile,ProvidesExplPackage,bool_case_false,bool_case_true,%
+ bool_const,bool_do_until,bool_do_while,bool_gset,bool_gset_eq,%
+ bool_gset_false,bool_gset_inverse,bool_gset_true,bool_if,%
+ bool_if_exist,bool_if_exist_p,bool_if_p,bool_lazy_all,%
+ bool_lazy_all_p,bool_lazy_and,bool_lazy_and_p,bool_lazy_any,%
+ bool_lazy_any_p,bool_lazy_or,bool_lazy_or_p,bool_log,bool_new,%
+ bool_not_p,bool_set,bool_set_eq,bool_set_false,bool_set_inverse,%
+ bool_set_true,bool_show,bool_to_str,bool_until_do,bool_while_do,%
+ bool_xor,bool_xor_p,box_autosize_to_wd_and_ht,%
+ box_autosize_to_wd_and_ht_plus_dp,box_clear,box_clear_new,box_clip,%
+ box_dp,box_gautosize_to_wd_and_ht,box_gautosize_to_wd_and_ht_plus_dp,%
+ box_gclear,box_gclear_new,box_gclip,box_gresize_to_ht,%
+ box_gresize_to_ht_plus_dp,box_gresize_to_wd,box_gresize_to_wd_and_ht,%
+ box_gresize_to_wd_and_ht_plus_dp,box_grotate,box_gscale,box_gset_dp,%
+ box_gset_eq,box_gset_eq_drop,box_gset_ht,box_gset_to_last,%
+ box_gset_trim,box_gset_viewport,box_gset_wd,box_ht,box_ht_plus_dp,%
+ box_if_empty,box_if_empty_p,box_if_exist,box_if_exist_p,%
+ box_if_horizontal,box_if_horizontal_p,box_if_vertical,%
+ box_if_vertical_p,box_log,box_move_down,box_move_left,%
+ box_move_right,box_move_up,box_new,box_resize_to_ht,%
+ box_resize_to_ht_plus_dp,box_resize_to_wd,box_resize_to_wd_and_ht,%
+ box_resize_to_wd_and_ht_plus_dp,box_rotate,box_scale,box_set_dp,%
+ box_set_eq,box_set_eq_drop,box_set_ht,box_set_to_last,box_set_trim,%
+ box_set_viewport,box_set_wd,box_show,box_use,box_use_drop,box_wd,%
+ c_alignment_token,c_ampersand_str,c_atsign_str,c_backslash_str,%
+ c_catcode_active_space_tl,c_catcode_active_tl,c_catcode_letter_token,%
+ c_catcode_other_space_tl,c_catcode_other_token,c_circumflex_str,%
+ c_code_cctab,c_colon_str,c_document_cctab,c_dollar_str,c_e_fp,%
+ c_empty_box,c_empty_clist,c_empty_coffin,c_empty_prop,c_empty_seq,%
+ c_empty_tl,c_false_bool,c_group_begin_token,c_group_end_token,%
+ c_hash_str,c_inf_fp,c_initex_cctab,c_left_brace_str,c_log_iow,%
+ c_math_subscript_token,c_math_superscript_token,c_math_toggle_token,%
+ c_max_char_int,c_max_dim,c_max_int,c_max_muskip,c_max_register_int,%
+ c_max_skip,c_minus_inf_fp,c_minus_zero_fp,c_nan_fp,c_novalue_tl,%
+ c_one_degree_fp,c_one_fp,c_one_int,c_other_cctab,c_parameter_token,%
+ c_percent_str,c_pi_fp,c_right_brace_str,c_space_tl,c_space_token,%
+ c_str_cctab,c_sys_backend_str,c_sys_day_int,c_sys_engine_exec_str,%
+ c_sys_engine_format_str,c_sys_engine_str,c_sys_engine_version_str,%
+ c_sys_hour_int,c_sys_jobname_str,c_sys_minute_int,c_sys_month_int,%
+ c_sys_output_str,c_sys_platform_str,c_sys_shell_escape_int,%
+ c_sys_year_int,c_term_iow,c_tilde_str,c_true_bool,c_underscore_str,%
+ c_zero_dim,c_zero_fp,c_zero_int,c_zero_muskip,c_zero_skip,%
+ c_zero_str,cctab_begin,cctab_const,cctab_end,cctab_gset,%
+ cctab_if_exist,cctab_if_exist_p,cctab_item,cctab_new,cctab_select,%
+ char_foldcase,char_generate,char_gset_active_eq,char_lowercase,%
+ char_set_active_eq,char_set_catcode,char_set_catcode_active,%
+ char_set_catcode_alignment,char_set_catcode_comment,%
+ char_set_catcode_end_line,char_set_catcode_escape,%
+ char_set_catcode_group_begin,char_set_catcode_group_end,%
+ char_set_catcode_ignore,char_set_catcode_invalid,%
+ char_set_catcode_letter,char_set_catcode_math_subscript,%
+ char_set_catcode_math_superscript,char_set_catcode_math_toggle,%
+ char_set_catcode_other,char_set_catcode_parameter,%
+ char_set_catcode_space,char_set_lccode,char_set_mathcode,%
+ char_set_sfcode,char_set_uccode,char_show_value_catcode,%
+ char_show_value_lccode,char_show_value_mathcode,%
+ char_show_value_sfcode,char_show_value_uccode,char_str_foldcase,%
+ char_str_lowercase,char_str_titlecase,char_str_uppercase,%
+ char_titlecase,char_to_nfd,char_to_utfviii_bytes,char_uppercase,%
+ char_value_catcode,char_value_lccode,char_value_mathcode,%
+ char_value_sfcode,char_value_uccode,clist_clear,clist_clear_new,%
+ clist_concat,clist_const,clist_count,clist_gclear,clist_gclear_new,%
+ clist_gconcat,clist_get,clist_gpop,clist_gpush,clist_gput_left,%
+ clist_gput_right,clist_gremove_all,clist_gremove_duplicates,%
+ clist_greverse,clist_gset,clist_gset_eq,clist_gset_from_seq,%
+ clist_gsort,clist_if_empty,clist_if_empty_p,clist_if_exist,%
+ clist_if_exist_p,clist_if_in,clist_item,clist_log,clist_map_break,%
+ clist_map_function,clist_map_inline,clist_map_tokens,%
+ clist_map_variable,clist_new,clist_pop,clist_push,clist_put_left,%
+ clist_put_right,clist_rand_item,clist_remove_all,%
+ clist_remove_duplicates,clist_reverse,clist_set,clist_set_eq,%
+ clist_set_from_seq,clist_show,clist_sort,clist_use,coffin_attach,%
+ coffin_clear,coffin_display_handles,coffin_dp,coffin_gattach,%
+ coffin_gclear,coffin_gjoin,coffin_gresize,coffin_grotate,%
+ coffin_gscale,coffin_gset_eq,coffin_gset_horizontal_pole,%
+ coffin_gset_vertical_pole,coffin_ht,coffin_if_exist,%
+ coffin_if_exist_p,coffin_join,coffin_log,coffin_log_structure,%
+ coffin_mark_handle,coffin_new,coffin_resize,coffin_rotate,%
+ coffin_scale,coffin_set_eq,coffin_set_horizontal_pole,%
+ coffin_set_vertical_pole,coffin_show,coffin_show_structure,%
+ coffin_typeset,coffin_wd,color_ensure_current,color_export,%
+ color_fill,color_group_begin,color_group_end,color_log,color_math,%
+ color_model_new,color_profile_apply,color_select,color_set,%
+ color_set_eq,color_show,color_stroke,cs_argument_spec,cs,cs_end,%
+ cs_generate_from_arg_count,cs_generate_variant,cs_gset,cs_gset_eq,%
+ cs_gset_nopar,cs_gset_protected,cs_gset_protected_nopar,cs_if_eq,%
+ cs_if_eq_p,cs_if_exist,cs_if_exist_p,cs_if_exist_use,cs_if_free,%
+ cs_if_free_p,cs_log,cs_meaning,cs_new,cs_new_eq,cs_new_nopar,%
+ cs_new_protected,cs_new_protected_nopar,cs_prefix_spec,%
+ cs_replacement_spec,cs_set,cs_set_eq,cs_set_nopar,cs_set_protected,%
+ cs_set_protected_nopar,cs_show,cs_split_function,cs_to_str,%
+ cs_undefine,debug_off,debug_on,debug_resume,debug_suspend,dim_abs,%
+ dim_add,dim_case,dim_compare,dim_compare_p,dim_const,dim_do_until,%
+ dim_do_while,dim_eval,dim_gadd,dim_gset,dim_gset_eq,dim_gsub,%
+ dim_gzero,dim_gzero_new,dim_if_exist,dim_if_exist_p,dim_log,%
+ dim_max,dim_min,dim_new,dim_ratio,dim_set,dim_set_eq,dim_show,%
+ dim_sign,dim_step_function,dim_step_inline,dim_step_variable,%
+ dim_sub,dim_to_decimal,dim_to_decimal_in_bp,dim_to_decimal_in_sp,%
+ dim_to_decimal_in_unit,dim_to_fp,dim_until_do,dim_use,dim_while_do,%
+ dim_zero,dim_zero_new,draw_begin,draw_end,else,exp_after,exp_args,%
+ exp_args_generate,exp_end,exp_end_continue_f,exp_last_two_unbraced,%
+ exp_last_unbraced,exp_not,exp_stop_f,expandafter,expanded,fi,%
+ file_compare_timestamp,file_compare_timestamp_p,file_full_name,%
+ file_get,file_get_full_name,file_get_hex_dump,file_get_mdfive_hash,%
+ file_get_size,file_get_timestamp,file_hex_dump,file_if_exist,%
+ file_if_exist_input,file_input,file_input_stop,file_log_list,%
+ file_mdfive_hash,file_parse_full_name,file_parse_full_name_apply,%
+ file_show_list,file_size,file_timestamp,flag_clear,flag_clear_new,%
+ flag_height,flag_if_exist,flag_if_exist_p,flag_if_raised,%
+ flag_if_raised_p,flag_log,flag_new,flag_raise,flag_raise_if_clear,%
+ flag_show,fp_abs,fp_add,fp_compare,fp_compare_p,fp_const,%
+ fp_do_until,fp_do_while,fp_eval,fp_format,fp_gadd,fp_gset,%
+ fp_gset_eq,fp_gsub,fp_gzero,fp_gzero_new,fp_if_exist,fp_if_exist_p,%
+ fp_if_nan,fp_if_nan_p,fp_log,fp_max,fp_min,fp_new,fp_set,%
+ fp_set_eq,fp_show,fp_sign,fp_step_function,fp_step_inline,%
+ fp_step_variable,fp_sub,fp_to_decimal,fp_to_dim,fp_to_int,%
+ fp_to_scientific,fp_to_tl,fp_trap,fp_until_do,fp_use,fp_while_do,%
+ fp_zero,fp_zero_new,fparray_count,fparray_gset,fparray_gzero,%
+ fparray_item,fparray_item_to_tl,fparray_new,g_file_curr_dir_str,%
+ g_file_curr_ext_str,g_file_curr_name_str,g_msg_module_name_prop,%
+ g_msg_module_type_prop,g_peek_token,g_tmpa_bool,g_tmpa_box,%
+ g_tmpa_clist,g_tmpa_coffin,g_tmpa_dim,g_tmpa_fp,g_tmpa_int,%
+ g_tmpa_ior,g_tmpa_iow,g_tmpa_muskip,g_tmpa_prop,g_tmpa_regex,%
+ g_tmpa_seq,g_tmpa_skip,g_tmpa_str,g_tmpa_tl,g_tmpb_bool,g_tmpb_box,%
+ g_tmpb_clist,g_tmpb_coffin,g_tmpb_dim,g_tmpb_fp,g_tmpb_int,%
+ g_tmpb_ior,g_tmpb_iow,g_tmpb_muskip,g_tmpb_prop,g_tmpb_regex,%
+ g_tmpb_seq,g_tmpb_skip,g_tmpb_str,g_tmpb_tl,group_align_safe_begin,%
+ group_align_safe_end,group_begin,group_end,group_insert_after,%
+ group_log_list,group_show_list,hbox,hbox_gset,hbox_gset_end,%
+ hbox_gset_to_wd,hbox_overlap_center,hbox_overlap_left,%
+ hbox_overlap_right,hbox_set,hbox_set_end,hbox_set_to_wd,hbox_to_wd,%
+ hbox_to_zero,hbox_unpack,hbox_unpack_drop,hcoffin_gset,%
+ hcoffin_gset_end,hcoffin_set,hcoffin_set_end,if,if_bool,%
+ if_box_empty,if_case,if_catcode,if_charcode,if_cs_exist,if_dim,%
+ if_eof,if_false,if_hbox,if_int_compare,if_int_odd,if_meaning,%
+ if_mode_horizontal,if_mode_inner,if_mode_math,if_mode_vertical,%
+ if_predicate,if_true,if_vbox,int_abs,int_add,int_case,int_compare,%
+ int_compare_p,int_const,int_decr,int_div_round,int_div_truncate,%
+ int_do_until,int_do_while,int_eval,int_from_alph,int_from_base,%
+ int_from_bin,int_from_hex,int_from_oct,int_from_roman,int_gadd,%
+ int_gdecr,int_gincr,int_gset,int_gset_eq,int_gsub,int_gzero,%
+ int_gzero_new,int_if_even,int_if_even_p,int_if_exist,int_if_exist_p,%
+ int_if_odd,int_if_odd_p,int_incr,int_log,int_max,int_min,int_mod,%
+ int_new,int_rand,int_set,int_set_eq,int_show,int_sign,%
+ int_step_...,int_step_function,int_step_inline,int_step_variable,%
+ int_sub,int_to_Alph,int_to_Base,int_to_Hex,int_to_Roman,%
+ int_to_alph,int_to_arabic,int_to_base,int_to_bin,int_to_hex,%
+ int_to_oct,int_to_roman,int_to_symbols,int_until_do,int_use,%
+ int_value,int_while_do,int_zero,int_zero_new,%
+ intarray_const_from_clist,intarray_count,intarray_gset,%
+ intarray_gset_rand,intarray_gzero,intarray_item,intarray_log,%
+ intarray_new,intarray_rand_item,intarray_show,intarray_to_clist,%
+ ior_close,ior_get,ior_get_term,ior_if_eof,ior_if_eof_p,ior_log,%
+ ior_log_list,ior_map_break,ior_map_inline,ior_map_variable,ior_new,%
+ ior_open,ior_shell_open,ior_show,ior_show_list,ior_str_get,%
+ ior_str_get_term,ior_str_map_inline,ior_str_map_variable,%
+ iow_allow_break,iow_char,iow_close,iow_indent,iow_log,iow_log_list,%
+ iow_new,iow_newline,iow_now,iow_open,iow_shipout,iow_shipout_x,%
+ iow_show,iow_show_list,iow_term,iow_wrap,keys_define,%
+ keys_if_choice_exist,keys_if_choice_exist_p,keys_if_exist,%
+ keys_if_exist_p,keys_log,keys_set,keys_set_filter,keys_set_groups,%
+ keys_set_known,keys_show,keyval_parse,l_char_active_seq,%
+ l_char_special_seq,l_color_fixed_model_tl,l_color_math_active_tl,%
+ l_file_search_path_seq,l_iow_line_count_int,l_keys_choice_int,%
+ l_keys_choice_tl,l_keys_key_str,l_keys_path_str,%
+ l_keys_usage_load_prop,l_keys_usage_preamble_prop,l_keys_value_tl,%
+ l_my_int,l_peek_token,l_text_accents_tl,l_text_case_exclude_arg_tl,%
+ l_text_expand_exclude_tl,l_text_letterlike_tl,l_text_math_arg_tl,%
+ l_text_math_delims_tl,l_text_titlecase_check_letter_bool,l_tmpa_bool,%
+ l_tmpa_box,l_tmpa_clist,l_tmpa_coffin,l_tmpa_dim,l_tmpa_fp,%
+ l_tmpa_int,l_tmpa_muskip,l_tmpa_prop,l_tmpa_regex,l_tmpa_seq,%
+ l_tmpa_skip,l_tmpa_str,l_tmpa_tl,l_tmpb_bool,l_tmpb_box,%
+ l_tmpb_clist,l_tmpb_coffin,l_tmpb_dim,l_tmpb_fp,l_tmpb_int,%
+ l_tmpb_muskip,l_tmpb_prop,l_tmpb_regex,l_tmpb_seq,l_tmpb_skip,%
+ l_tmpb_str,l_tmpb_tl,legacy_if,legacy_if_gset,legacy_if_gset_false,%
+ legacy_if_gset_true,legacy_if_p,legacy_if_set,legacy_if_set_false,%
+ legacy_if_set_true,lua_escape,lua_now,lua_shipout,lua_shipout_e,%
+ mode_if_horizontal,mode_if_horizontal_p,mode_if_inner,%
+ mode_if_inner_p,mode_if_math,mode_if_math_p,mode_if_vertical,%
+ mode_if_vertical_p,mode_leave_vertical,msg_critical,%
+ msg_critical_text,msg_error,msg_error_text,msg_expandable_error,%
+ msg_fatal,msg_fatal_text,msg_gset,msg_if_exist,msg_if_exist_p,%
+ msg_info,msg_info_text,msg_line_context,msg_line_number,msg_log,%
+ msg_log_eval,msg_module_name,msg_module_type,msg_new,msg_none,%
+ msg_note,msg_redirect_class,msg_redirect_module,msg_redirect_name,%
+ msg_see_documentation_text,msg_set,msg_show,msg_show_eval,%
+ msg_show_item,msg_show_item_unbraced,msg_term,msg_warning,%
+ msg_warning_text,muskip_add,muskip_const,muskip_eval,muskip_gadd,%
+ muskip_gset,muskip_gset_eq,muskip_gsub,muskip_gzero,%
+ muskip_gzero_new,muskip_if_exist,muskip_if_exist_p,muskip_log,%
+ muskip_new,muskip_set,muskip_set_eq,muskip_show,muskip_sub,%
+ muskip_use,muskip_zero,muskip_zero_new,pdf_destination,%
+ pdf_object_if_exist,pdf_object_if_exist_p,pdf_object_new,%
+ pdf_object_ref,pdf_object_ref_last,pdf_object_unnamed_write,%
+ pdf_object_write,pdf_pageobject_ref,pdf_pagobject_ref,pdf_uncompress,%
+ pdf_version,pdf_version_compare,pdf_version_compare_p,%
+ pdf_version_gset,pdf_version_major,pdf_version_min_gset,%
+ pdf_version_minor,peek_N_type,peek_after,peek_analysis_map_break,%
+ peek_analysis_map_inline,peek_catcode,peek_catcode_collect_inline,%
+ peek_catcode_remove,peek_charcode,peek_charcode_collect_inline,%
+ peek_charcode_remove,peek_gafter,peek_meaning,%
+ peek_meaning_collect_inline,peek_meaning_remove,peek_regex,%
+ peek_regex_remove_once,peek_regex_replace_once,peek_remove_filler,%
+ peek_remove_spaces,prg_break,prg_break_point,prg_do_nothing,%
+ prg_generate_conditional_variant,prg_map_break,prg_new_conditional,%
+ prg_new_eq_conditional,prg_new_protected_conditional,prg_replicate,%
+ prg_return_false,prg_return_true,prg_set_conditional,%
+ prg_set_eq_conditional,prg_set_protected_conditional,prop_clear,%
+ prop_clear_new,prop_concat,prop_const_from_keyval,prop_count,%
+ prop_gclear,prop_gclear_new,prop_gconcat,prop_get,prop_gpop,%
+ prop_gput,prop_gput_from_keyval,prop_gput_if_new,prop_gremove,%
+ prop_gset_eq,prop_gset_from_keyval,prop_if_empty,prop_if_empty_p,%
+ prop_if_exist,prop_if_exist_p,prop_if_in,prop_if_in_p,prop_item,%
+ prop_log,prop_map_break,prop_map_function,prop_map_inline,%
+ prop_map_tokens,prop_new,prop_pop,prop_put,prop_put_from_keyval,%
+ prop_put_if_new,prop_rand_key_value,prop_remove,prop_set_eq,%
+ prop_set_from_keyval,prop_show,prop_to_keyval,q_mark,q_nil,%
+ q_no_value,q_recursion_stop,q_recursion_tail,q_stop,quark_if_nil,%
+ quark_if_nil_p,quark_if_no_value,quark_if_no_value_p,%
+ quark_if_recursion_tail_break,quark_if_recursion_tail_stop,%
+ quark_if_recursion_tail_stop_do,quark_new,regex_const,regex_count,%
+ regex_extract_all,regex_extract_once,regex_gset,regex_log,%
+ regex_match,regex_match_case,regex_new,regex_replace,%
+ regex_replace_all,regex_replace_case_all,regex_replace_case_once,%
+ regex_replace_once,regex_set,regex_show,regex_split,reverse_if,%
+ s_stop,scan_new,scan_stop,seq_clear,seq_clear_new,seq_concat,%
+ seq_const_from_clist,seq_count,seq_gclear,seq_gclear_new,%
+ seq_gconcat,seq_get,seq_get_left,seq_get_right,seq_gpop,%
+ seq_gpop_item,seq_gpop_left,seq_gpop_right,seq_gpush,seq_gput_left,%
+ seq_gput_right,seq_gremove_all,seq_gremove_duplicates,seq_greverse,%
+ seq_gset_eq,seq_gset_filter,seq_gset_from_clist,%
+ seq_gset_from_function,seq_gset_from_inline_x,seq_gset_item,%
+ seq_gset_map,seq_gset_map_x,seq_gset_split,%
+ seq_gset_split_keep_spaces,seq_gshuffle,seq_gsort,seq_if_empty,%
+ seq_if_empty_p,seq_if_exist,seq_if_exist_p,seq_if_in,seq_item,%
+ seq_log,seq_map_break,seq_map_function,seq_map_indexed_function,%
+ seq_map_indexed_inline,seq_map_inline,seq_map_tokens,%
+ seq_map_variable,seq_mapthread_function,seq_new,seq_pop,%
+ seq_pop_item,seq_pop_left,seq_pop_right,seq_push,seq_put_left,%
+ seq_put_right,seq_rand_item,seq_remove_all,seq_remove_duplicates,%
+ seq_reverse,seq_set_eq,seq_set_filter,seq_set_from_clist,%
+ seq_set_from_function,seq_set_from_inline_x,seq_set_item,seq_set_map,%
+ seq_set_map_x,seq_set_split,seq_set_split_keep_spaces,seq_show,%
+ seq_shuffle,seq_sort,seq_use,skip_add,skip_const,skip_eval,%
+ skip_gadd,skip_gset,skip_gset_eq,skip_gsub,skip_gzero,%
+ skip_gzero_new,skip_horizontal,skip_if_eq,skip_if_eq_p,%
+ skip_if_exist,skip_if_exist_p,skip_if_finite,skip_if_finite_p,%
+ skip_log,skip_new,skip_set,skip_set_eq,skip_show,skip_sub,%
+ skip_use,skip_vertical,skip_zero,skip_zero_new,sort_return_same,%
+ sort_return_swapped,str_case,str_case_e,str_clear,str_clear_new,%
+ str_compare,str_compare_p,str_concat,str_const,str_convert_pdfname,%
+ str_count,str_count_ignore_spaces,str_count_spaces,str_foldcase,%
+ str_gclear,str_gconcat,str_gput_left,str_gput_right,str_gremove_all,%
+ str_gremove_once,str_greplace_all,str_greplace_once,str_gset,%
+ str_gset_convert,str_gset_eq,str_head,str_head_ignore_spaces,%
+ str_if_empty,str_if_empty_p,str_if_eq,str_if_eq_p,str_if_exist,%
+ str_if_exist_p,str_if_in,str_item,str_item_ignore_spaces,str_log,%
+ str_lowercase,str_map_break,str_map_function,str_map_inline,%
+ str_map_tokens,str_map_variable,str_new,str_put_left,str_put_right,%
+ str_range,str_range_ignore_spaces,str_remove_all,str_remove_once,%
+ str_replace_all,str_replace_once,str_set,str_set_convert,str_set_eq,%
+ str_show,str_tail,str_tail_ignore_spaces,str_uppercase,str_use,%
+ sys_finalise,sys_get_shell,sys_gset_rand_seed,sys_if_engine_luatex,%
+ sys_if_engine_luatex_p,sys_if_engine_pdftex,sys_if_engine_pdftex_p,%
+ sys_if_engine_ptex,sys_if_engine_ptex_p,sys_if_engine_uptex,%
+ sys_if_engine_uptex_p,sys_if_engine_xetex,sys_if_engine_xetex_p,%
+ sys_if_output_dvi,sys_if_output_dvi_p,sys_if_output_pdf,%
+ sys_if_output_pdf_p,sys_if_platform_unix,sys_if_platform_unix_p,%
+ sys_if_platform_windows,sys_if_platform_windows_p,sys_if_rand_exist,%
+ sys_if_rand_exist_p,sys_if_shell,sys_if_shell_p,%
+ sys_if_shell_restricted,sys_if_shell_restricted_p,%
+ sys_if_shell_unrestricted,sys_if_shell_unrestricted_p,%
+ sys_load_backend,sys_load_debug,sys_rand_seed,sys_shell_now,%
+ sys_shell_shipout,sys_timer,text_declare_expand_equivalent,%
+ text_declare_purify_equivalent,text_expand,text_lowercase,%
+ text_purify,text_titlecase,text_titlecase_first,text_uppercase,%
+ tl_analysis_log,tl_analysis_map_inline,tl_analysis_show,%
+ tl_build_begin,tl_build_clear,tl_build_end,tl_build_gbegin,%
+ tl_build_gclear,tl_build_gend,tl_build_get,tl_build_gput_left,%
+ tl_build_gput_right,tl_build_put_left,tl_build_put_right,tl_case,%
+ tl_clear,tl_clear_new,tl_concat,tl_const,tl_count,tl_count_tokens,%
+ tl_gclear,tl_gclear_new,tl_gconcat,tl_gput_left,tl_gput_right,%
+ tl_gremove_all,tl_gremove_once,tl_greplace_all,tl_greplace_once,%
+ tl_greverse,tl_gset,tl_gset_eq,tl_gset_rescan,tl_gsort,%
+ tl_gtrim_spaces,tl_head,tl_if_blank,tl_if_blank_p,tl_if_empty,%
+ tl_if_empty_p,tl_if_eq,tl_if_eq_p,tl_if_exist,tl_if_exist_p,%
+ tl_if_head_eq_catcode,tl_if_head_eq_catcode_p,tl_if_head_eq_charcode,%
+ tl_if_head_eq_charcode_p,tl_if_head_eq_meaning,%
+ tl_if_head_eq_meaning_p,tl_if_head_is_N_type,tl_if_head_is_N_type_p,%
+ tl_if_head_is_group,tl_if_head_is_group_p,tl_if_head_is_space,%
+ tl_if_head_is_space_p,tl_if_in,tl_if_novalue,tl_if_novalue_p,%
+ tl_if_single,tl_if_single_p,tl_if_single_token,tl_if_single_token_p,%
+ tl_item,tl_log,tl_map_break,tl_map_function,tl_map_inline,%
+ tl_map_tokens,tl_map_variable,tl_new,tl_put_left,tl_put_right,%
+ tl_rand_item,tl_range,tl_range_braced,tl_range_unbraced,%
+ tl_remove_all,tl_remove_once,tl_replace_all,tl_replace_once,%
+ tl_rescan,tl_reverse,tl_reverse_items,tl_set,tl_set_eq,%
+ tl_set_rescan,tl_show,tl_sort,tl_tail,tl_to_str,tl_trim_spaces,%
+ tl_trim_spaces_apply,tl_use,token_case_catcode,token_case_charcode,%
+ token_case_meaning,token_if_active,token_if_active_p,%
+ token_if_alignment,token_if_alignment_p,token_if_chardef,%
+ token_if_chardef_p,token_if_cs,token_if_cs_p,token_if_dim_register,%
+ token_if_dim_register_p,token_if_eq_catcode,token_if_eq_catcode_p,%
+ token_if_eq_charcode,token_if_eq_charcode_p,token_if_eq_meaning,%
+ token_if_eq_meaning_p,token_if_expandable,token_if_expandable_p,%
+ token_if_font_selection,token_if_font_selection_p,%
+ token_if_group_begin,token_if_group_begin_p,token_if_group_end,%
+ token_if_group_end_p,token_if_int_register,token_if_int_register_p,%
+ token_if_letter,token_if_letter_p,token_if_long_macro,%
+ token_if_long_macro_p,token_if_macro,token_if_macro_p,%
+ token_if_math_subscript,token_if_math_subscript_p,%
+ token_if_math_superscript,token_if_math_superscript_p,%
+ token_if_math_toggle,token_if_math_toggle_p,token_if_mathchardef,%
+ token_if_mathchardef_p,token_if_muskip_register,%
+ token_if_muskip_register_p,token_if_other,token_if_other_p,%
+ token_if_parameter,token_if_parameter_p,token_if_primitive,%
+ token_if_primitive_p,token_if_protected_long_macro,%
+ token_if_protected_long_macro_p,token_if_protected_macro,%
+ token_if_protected_macro_p,token_if_skip_register,%
+ token_if_skip_register_p,token_if_space,token_if_space_p,%
+ token_if_toks_register,token_if_toks_register_p,token_to_meaning,%
+ token_to_str,unvcopy,use,use_i,use_i_delimit_by_q_nil,%
+ use_i_delimit_by_q_recursion_stop,use_i_delimit_by_q_stop,use_i_ii,%
+ use_ii,use_ii_i,use_iii,use_iv,use_none,use_none_delimit_by_q_nil,%
+ use_none_delimit_by_q_recursion_stop,use_none_delimit_by_q_stop,%
+ use_none_delimit_by_s_stop,vbox,vbox_gset,vbox_gset_end,%
+ vbox_gset_split_to_ht,vbox_gset_to_ht,vbox_gset_top,vbox_set,%
+ vbox_set_end,vbox_set_split_to_ht,vbox_set_to_ht,vbox_set_top,%
+ vbox_to_ht,vbox_to_zero,vbox_top,vbox_unpack,vbox_unpack_drop,%
+ vcoffin_gset,vcoffin_gset_end,vcoffin_set,vcoffin_set_end,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ name,alternative-model,alternative-values,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ cmyk,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ D,N,Nn,NF,NN,Nx,NT,NTF,NNn,NnV,Nnn,Npn,Nnnn,V,c,e,en,f,n,nF,%
+ nn,nT,nnn,nnF,nnV,nTF,nnnn,nNnF,nNnT,nnVV,o,p,v,w,x,%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ expl3,%
+ },
+ otherkeywords={:,~},%
+ alsoletter={_-.},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[pdftex]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ pdfinfo,pdfcatalog,pdfpageattr,pdfpagesattr,pdfpageresources,%
+ pdfcolorstack,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ pdftex,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[luatex]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ pdfextension,ifluatex,directlua,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ colorstack },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ luatex,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[dvips]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ color,push,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ dvips,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[xetex]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ pdfcolorstack,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ xetex,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[inputenc]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ latin1 },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ inputenc,%
+ },%
+ % otherkeywords={},%
+ alsoletter={1},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[pdfmanagement-testphase]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ pdfmanagement_add,DeclareDocumentMetadata,AddToDocumentProperties,%
+ ShowDocumentProperties,GetDocumentProperties,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{% Keys or optional arguments
+ pdfmanagement-testphase,uncompress,geometry,top-level,backend,Info,%
+ ThisPage,pdfversion,pdfstandard,paper,topic,Title,Rotate,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ dvipdfmx,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ nnn,%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ pdfmanagement-testphase,%
+ },
+ otherkeywords={:},%
+ alsoletter={_-},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[rotating]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ sidewaystable,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ rotating,%
+ },%
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[fontenc]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ T1 },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ fontenc,%
+ },%
+ % otherkeywords={},
+ % alsoletter={1},%
+ alsodigit={1},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[babel]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ foreignlanguage,selectlanguage,iflanguage,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ otherlanguage,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ UKenglish,USenglish,acadian,afrikaans,american,arabic,australian,%
+ austrian,azerbaijani,bahasa,bahasai,basque,bgreek,brazil,%
+ brazilian,breton,british,bulgarian,canadian,canadien,catalan,%
+ croatian,czech,danish,dutch,english,esperanto,estonian,ethiop,%
+ farsi,finnish,francais,french,frenchle,friulan,galician,german,%
+ germanb,greek,hebrew,hindi,ibygreek,icelandic,indon,indonesian,%
+ interlingua,irish,italian,japanese,latin,latvian,lithuanian,%
+ lowersorbian,magyar,malay,melayu (bahasam),mongolian,naustrian,%
+ newzealand,ngerman,norsk,nynorsk,pinyin,polish,polutonikogreek,%
+ portuges,portuguese,romanian,romansh,russian,samin,scottish,%
+ serbian,serbianc,slovak,slovene,spanglish,spanish,swedish,thai,%
+ thaicjk,turkish,turkmen,ukrainian,uppersorbian,vietnamese,%
+ welsh,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ babel,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[babel-french]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ og,fg,up,bsc,ier,iers,iere,ieres,ieme,iemes,primo,secundo,%
+ tertio,quarto,FrenchEnumerate,No,Nos,no,nos,degre,nombre,%
+ frenchabstractname,frenchbibname,frenchrefname,frenchprefacename,%
+ frenchchaptername,frenchappendixname,frenchcontentsname,%
+ frenchlistfigurename,frenchlisttablename,frenchindexname,%
+ frenchglossaryname,frenchfigurename,frenchtablename,frenchpartname,%
+ frenchenclname,frenchccname,frenchheadtoname,frenchpagename,%
+ frenchseename,frenchalsoname,frenchproofname%,%
+ frquote,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ babel-french,%
+ },%
+ % otherkeywords={},%
+ alsoletter={-},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[kantlipsum]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ kant,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ kantlipsum,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[hyperxmp]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ hyperxmp,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[hyperref]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ hypersetup,href,phantomsection,pdfstringdefDisableCommands,url,%
+ nolinkurl,hyperbaseurl,hyperimage,hyperdef,hyperref,hyperlink,%
+ hypertarget,hyperget,autoref,autopageref,ref*,pageref*,autoref*,%
+ autopageref*,pdfstringdef,pdfbookmark,currentpdfbookmark,%
+ subpdfbookmark,belowpdfbookmark,texorpdfstring,thispdfpagelabel,%
+ hypercalcbp,nameref,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ allbordercolors,allcolors,anchorcolor,backref,baseurl,bookmarks,%
+ bookmarksnumbered,bookmarksopen,bookmarksopenlevel,bookmarkstype,%
+ breaklinks,CJKbookmarks,citebordercolor,citecolor,colorlinks,debug,%
+ destlabel,draft,driverfallback,dvipdfm,dvipdfmx,dvips,dvipsone,%
+ dviwindo,encap,extension,filebordercolor,filecolor,final,%
+ frenchlinks,hidelinks,hyperfigures,hyperfootnotes,hyperindex,%
+ hypertex,hypertexnames,implicit,latex2html,linkbordercolor,%
+ linkcolor,linktoc,linktocpage,menubordercolor,menucolor,nativepdf,%
+ naturalnames,nesting,next-anchor,pageanchor,pagebackref,pdfauthor,%
+ pdfborder,pdfborderstyle,pdfcenterwindow,pdfcreator,pdfdirection,%
+ pdfdisplaydoctitle,pdfduplex,pdffitwindow,pdfhighlight,pdfinfo,%
+ pdfkeywords,pdflang,pdfmark,pdfmenubar,pdfnewwindow,%
+ pdfnonfullscreenpagemode,pdfnumcopies,pdfpagelabels,pdfpagelayout,%
+ pdfpagemode,pdfpagescrop,pdfpagetransition,pdfpicktraybypdfsize,%
+ pdfprintarea,pdfprintclip,pdfprintpagerange,pdfprintscaling,%
+ pdfproducer,pdfremotestartview,pdfstartpage,pdfstartview,pdfsubject,%
+ pdftex,pdftitle,pdftoolbar,pdftrapped,pdfview,pdfviewarea,%
+ pdfviewclip,pdfwindowui,plainpages,ps2pdf,psdextra,raiselinks,%
+ runbordercolor,runcolor,setpagesize,tex4ht,textures,unicode,%
+ urlbordercolor,urlcolor,verbose,vtex,xetex,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ hyperref,%
+ },%
+ % otherkeywords={},%
+ alsoletter={*},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[graphicx]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ includegraphics,includegraphics*,definecolor,color,textcolor,%
+ mathcolor,pagecolor,nopagecolor,colorbox,fcolorbox,rotatebox,%
+ scalebox,reflectbox,resizebox,resizebox*,graphicspath,%
+ DeclareGraphicsExtensions,DeclareGraphicsRule },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ draft,final,hiresbb,demo,setpagesize,nosetpagesize,dvips,xdvi,%
+ dvipdf,dvipdfm,dvipdfmx,xetex,pdftex,luatex,dvisvgm,dvipsone,%
+ dviwindo,emtex,dviwin,oztex,textures,pctexps,pctexwin,pctexhp,%
+ pctex32,truetex,tcidvi,vtex,debugshow,hiderotate,hidescale,alt,%
+ %
+ bb,bbllx,bblly,bburx,bbury,natwidth,natheight,hiresbb,pagebox,%
+ viewport,trim,angle,origin,width,height,totalheight,%
+ keepaspectratio,scale,clip,draft,type,ext,read,command,quiet,%
+ page,interpolate,decodearray,origin,x,y,units,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ mediabox,cropbox,bleedbox,trimbox,artbox,true,false,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ graphicx,%
+ },%
+ % otherkeywords={},%
+ alsoletter={23},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[geometry]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ geometry,newgeometry,restoregeometry,savegeometry,loadgeometry,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ paper,papername,paperwidth,paperheight,papersize,landscape,%
+ portrait,layout,layoutwidth,layoutheight,layoutsize,layouthoffset,%
+ layoutvoffset,layoutoffset,hscale,vscale,scale,width,totalwidth,%
+ height,totalheight,total,textwidth,textheight,text,body,lines,%
+ includehead,includefoot,includeheadfoot,includemp,includeall,%
+ ignorehead,ignorefoot,ignoreheadfoot,ignoremp,ignoreall,%
+ heightrounded,hdivide,vdivide,divide,left,lmargin,inner,right,%
+ rmargin,outer,top,tmargin,bottom,bmargin,hmargin,vmargin,margin,%
+ hmarginratio,vmarginratio,marginratio,ratio,hcentering,vcentering,%
+ centering,twoside,asymmetric,headheight,head,headsep,footskip,%
+ foot,nohead,nofoot,noheadfoot,footnotesep,marginparwidth,%
+ marginparsep,nomarginpar,columnsep,hoffset,voffset,offset,%
+ twocolumn,onecolumn,reversemp,reversemarginpar,verbose,reset,mag,%
+ truedimen,pass,showframe,showcrop,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ a0paper,a1paper,a2paper,a3paper,a4paper,a5paper,a6paper,b0paper,%
+ b1paper,b2paper,b3paper,b4paper,b5paper,b6paper,c0paper,c1paper,%
+ c2paper,c3paper,c4paper,c5paper,c6paper,b0j,b1j,b2j,b3j,b4j,%
+ b5j,b6j,ansiapaper,ansibpaper,ansicpaper,ansidpaper,ansiepaper,%
+ letterpaper,executivepaper,legalpaper,screen,dvips,dvipdfm,pdftex,%
+ luatex,xetex,vtex,dvipdfmx,xdvipdfmx,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ geometry,%
+ },%
+ % otherkeywords={},%
+ alsoletter={0123456},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[newpax]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ newpaxsetup,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ addannots,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ false,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ newpax,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[tikz]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ usetikzlibrary,draw,node,matrix,fill,foreach,tikz,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ tikzpicture,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ pic,rotate,xshift,yshift,every node,inner sep,blend mode,fill,%
+ fit,circle,anchor,in,count,x,y,matrix,of,math,nodes,above
+ right,at,--,-|,|-,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ multiply,lightgray,base,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ tikz,%
+ },%
+ % otherkeywords={},%
+ alsoletter={-| \ },%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[tikzducks]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ duck,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ alien,aodai,baguette,basket,beard,beret,bill,body,book,%
+ bookcolour,bowtie,bubblecolour,bunny,buttons,cake,cap,cape,%
+ cheese,chef,cocktail,conicalhat,crazyhair,cricket,crown,crozier,%
+ crystalball,darthvader,devil,easter,egga,eggb,eggc,eye,eyebrow,%
+ flavoura,flavourb,flavourc,football,glasses,graduate,grumpy,%
+ handbag,harlequin,hat,head,helmet,hockey,horsetail,icecream,%
+ inear,invisible,jacket,kingcrown,lapel,laughing,lightsaber,%
+ longhair,magichat,magicstars,magicwand,mask,milkshake,mohican,%
+ mullet,name,neckerchief,necklace,niuqelrah,overleaf,parrot,%
+ parting,peakedcap,pickaxe,pizza,prison,queencrown,recedinghair,%
+ ribbon,rollingpin,sailor,santa,sheep,shorthair,shovel,signback,%
+ signcolour,signpost,snowduck,speech,squareglasses,stethoscope,%
+ strawhat,sunglasses,tail,tassel,think,tie,tophat,torch,tshirt,%
+ umbrella,umbrellaclosed,unicorn,vampire,viking,water,wine,wing,%
+ witch,woggle,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ blue,green,red,yellow,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ tikzducks,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[tikzlings]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ anteater,bear,bee,cat,chicken,coati,elephant,hippo,koala,%
+ marmot,mole,mouse,owl,panda,penguin,pig,rhino,sheep,sloth,%
+ squirrel,snowman,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ 3D,eye,contour,back,globalwarming,whiskers,schroedinger,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ tikzlings,%
+ },%
+ % otherkeywords={},%
+ alsoletter={3},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[amsmath]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ cdots,ddots,vdots,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ pmatrix,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ amsmath,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % xparse
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[xparse]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ NewDocumentCommand,RenewDocumentCommand,ProvideDocumentCommand,%
+ DeclareDocumentCommand,NewDocumentEnvironment,%
+ RenewDocumentEnvironment,ProvideDocumentEnvironment,%
+ DeclareDocumentEnvironment,NewExpandableDocumentCommand,%
+ RenewExpandableDocumentCommand,ProvideExpandableDocumentCommand,%
+ DeclareExpandableDocumentCommand,IfNoValueT,IfNoValueF,IfNoValueTF,%
+ IfValueT,IfValueF,IfValueTF,IfBooleanT,IfBooleanF,IfBooleanTF,%
+ BooleanTrue,BooleanFalse,ProcessedArgument,ReverseBoolean,%
+ SplitArgument,SplitList,ProcessList,TrimSpaces,%
+ GetDocumentCommandArgSpec,GetDocumentEnvironmentArgSpec,%
+ ShowDocumentCommandArgSpec,ShowDocumentEnvironmentArgSpec,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ log-declarations,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ xparse,%
+ },%
+ % otherkeywords={},%
+ alsoletter={-},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % colortbl
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[colortbl]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ columncolor,rowcolor,cellcolor,arrayrulecolor,doublerulesepcolor,%
+ minrowclearance,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ colortbl,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % multirow
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[multirow]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ multirow,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ multirow,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % nicematrix
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[nicematrix]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ Cdots,Ddots,Vdots,Body,CodeBefore,CodeAfter,Block,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ pNiceMatrix,NiceMatrix,NiceTabular,bNiceArray,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ hvlines,rules/width,baseline,colortbl-like,margin,right-margin,%
+ create-cell-nodes,rounded-corners,draw,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ nicematrix,%
+ },
+ otherkeywords={&},%
+ alsoletter={/},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % booktabs
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[booktabs]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ toprule,midrule,bottomrule,cmidrule,addlinespace,morecmidrules,%
+ specialrule,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ booktabs,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % strands
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[strands]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ strands,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ strands,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % cartonaugh
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[cartonaugh]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ maxterms,minterms,terms,implicant,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ cartonaugh,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ cartonaugh,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % xistercian
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[xistercian]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ cisterciannum,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ xistercian,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ xistercian,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % aboensis
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[aboensis]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ abcursivefamily,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ aboensis,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % tabularray
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[tabularray]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ ,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ tblr,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ width,colspec,row,bg,fg,font,column,hlines,X,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ odd,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ tabularray,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % ninecolors
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[ninecolors]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ NineColors,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ gray1,red1,brown1,yellow1,olive1,green1,teal1,cyan1,azure1,%
+ blue1,violet1,magenta1,purple1,gray2,red2,brown2,yellow2,olive2,%
+ green2,teal2,cyan2,azure2,blue2,violet2,magenta2,purple2,gray3,%
+ red3,brown3,yellow3,olive3,green3,teal3,cyan3,azure3,blue3,%
+ violet3,magenta3,purple3,gray4,red4,brown4,yellow4,olive4,%
+ green4,teal4,cyan4,azure4,blue4,violet4,magenta4,purple4,gray5,%
+ red5,brown5,yellow5,olive5,green5,teal5,cyan5,azure5,blue5,%
+ violet5,magenta5,purple5,gray6,red6,brown6,yellow6,olive6,%
+ green6,teal6,cyan6,azure6,blue6,violet6,magenta6,purple6,gray7,%
+ red7,brown7,yellow7,olive7,green7,teal7,cyan7,azure7,blue7,%
+ violet7,magenta7,purple7,gray8,red8,brown8,yellow8,olive8,%
+ green8,teal8,cyan8,azure8,blue8,violet8,magenta8,purple8,gray9,%
+ red9,brown9,yellow9,olive9,green9,teal9,cyan9,azure9,blue9,%
+ violet9,magenta9,purple9,gray1,red1,brown1,yellow1,olive1,%
+ green1,teal1,cyan1,azure1,blue1,violet1,magenta1,purple1,gray2,%
+ red2,brown2,yellow2,olive2,green2,teal2,cyan2,azure2,blue2,%
+ violet2,magenta2,purple2,gray3,red3,brown3,yellow3,olive3,%
+ green3,teal3,cyan3,azure3,blue3,violet3,magenta3,purple3,gray4,%
+ red4,brown4,yellow4,olive4,green4,teal4,cyan4,azure4,blue4,%
+ violet4,magenta4,purple4,gray5,red5,brown5,yellow5,olive5,%
+ green5,teal5,cyan5,azure5,blue5,violet5,magenta5,purple5,gray6,%
+ red6,brown6,yellow6,olive6,green6,teal6,cyan6,azure6,blue6,%
+ violet6,magenta6,purple6,gray7,red7,brown7,yellow7,olive7,%
+ green7,teal7,cyan7,azure7,blue7,violet7,magenta7,purple7,gray8,%
+ red8,brown8,yellow8,olive8,green8,teal8,cyan8,azure8,blue8,%
+ violet8,magenta8,purple8,gray9,red9,brown9,yellow9,olive9,%
+ green9,teal9,cyan9,azure9,blue9,violet9,magenta9,purple9,%
+ saturation,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ low,medium,high,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ ninecolors,%
+ },%
+ % otherkeywords={},%
+ alsoletter={123456789},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[fontspec]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ EncodingAccent,EncodingCommand,EncodingComposite,%
+ EncodingCompositeCommand,EncodingSymbol,IfFontExistsTF,%
+ IfFontFeatureActiveTF,UndeclareAccent,UndeclareCommand,%
+ UndeclareComposite,UndeclareSymbol,addfontfeature,addfontfeatures,%
+ aliasfontfeature,aliasfontfeatureoption,defaultfontfeatures,fontspec,%
+ liningnums,newAATfeature,newfontface,newfontfamily,newfontfeature,%
+ newfontlanguage,newfontscript,newopentypefeature,oldstylenums,%
+ providefontface,providefontfamily,renewfontface,renewfontfamily,%
+ setboldmathrm,setfontface,setfontfamily,setmainfont,setmathrm,%
+ setmathsf,setmathtt,setmonofont,setromanfont,setsansfont,strong,%
+ strongfontdeclare,strongresetsetmainfont,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ Alternate,Annotation,AutoFakeBold,AutoFakeSlant,BoldFeatures,%
+ BoldFont,BoldItalicFeatures,BoldItalicFont,BoldSlantedFeatures,%
+ BoldSlantedFont,BoldSwashFeatures,BoldSwashFont,CJKShape,%
+ CharacterVariant,CharacterWidth,Color,Colour,Contextuals,%
+ Diacritics,Extension,FakeBold,FakeSlant,FakeStretch,Font,FontFace,%
+ Fractions,HyphenChar,IgnoreFontspecFileItalicFeatures,ItalicFont,%
+ Kerning,Language,LetterSpace,Letters,Ligatures,LocalForms,%
+ NFSSFamily,Numbers,OpticalSize,Ornament,Path,PunctuationSpace,%
+ RawFeature,Scale,ScaleAgain,Script,Size,SizeFeatures,%
+ SlantedFeatures,SlantedFont,SmallCapsFeatures,SmallCapsFont,Style,%
+ StylisticAlternates,StylisticSet,SwashFeatures,SwashFont,%
+ UprightFeatures,UprightFont,Variant,Vertical,VerticalPosition,%
+ WordSpace,Mapping,Renderer,Traditional,Simplified,JIS1978,JIS1983,%
+ JIS1990,Expert,NLC,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ AboveBase,Alternate,AlternateHalf,AlternateMetrics,%
+ AlternateProportional,Alternates,AlternatesForRotation,Arabic,%
+ ArabicOff,BelowBase,Common,Contextual,Cursive,Denominator,%
+ Discretionary,Expert,Full,Half,HalfMetrics,Historic,%
+ HorizontalKana,Inferior,Inner,Italic,JIS1978,JIS1983,JIS1990,%
+ KanaAlternates,Kerning,LineFinal,Lining,LiningOff,Lowercase,%
+ LowercaseOff,MarkToBase,MarkToMark,Monospaced,MonospacedOff,NLC,%
+ Numerator,Off,OldStyle,OldStyleOff,On,Ordinal,PetiteCaps,%
+ Proportional,ProportionalMetrics,ProportionalOff,Quarter,Rare,%
+ Required,Reset,ResetAll,RotatedGlyphs,Ruby,ScientificInferior,%
+ Simplified,SlashedZero,SlashedZeroOff,SmallCaps,Superior,Swash,%
+ TeX,Thurd,Titling,Traditional,Unicase,Uppercase,UppercaseOff,%
+ UppercasePetiteCaps,UppercaseSmallCaps,VerticalKana,WordFinal,%
+ WordInitial,ResetAll,c2sc,scmp,sinf,sups,zero,ss06,ss01,%
+ ss04,-liga,frac,titl,swsh,hist,hlig%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ fontspec%
+ },%
+ % otherkeywords={},%
+ alsoletter={20614-},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[ProfCollege]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ Thales,Pourcentage,ResolEquation%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ Twitter,Scratch,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ Auteur,Logo,Calculer,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ Place,Drapeau,Avancer,Repeter,Tournerg,FinBlocRepeter,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ ProfCollege,%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[tkz-euclide]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ tkzDefPoint,tkzInterCC,tkzGetPoints,tkzDrawCircles,tkzDrawPolygon,%
+ tkzDrawPoints,tkzMarkSegments,tkzLabelSegments,tkzLabelPoints,%
+ tkzLabelPoints,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ tikzpicture,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ mark,swap,above,scale,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ tkz-euclide },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[tkz-fct]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ tkzInit,tkzDrawX,tkzDrawY,tkzFct,tkzDefPoint,tkzDrawPoint,%
+ tkzPointShowCoord,tkzDefPoint,tkzDrawPoint,tkzPointShowCoord,%
+ tkzRep,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ tikzpicture,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ xmin,xmax,ymin,ymax,samples,domain,xlabel,ylabel,xscale,yscale%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ tkz-fct },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[tkz-tab]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ tkzTabInit,tkzTabLine,tkzTabVar,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ tikzpicture,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ lgt,espcl,t,d,z,+,-,-D+/,+/,-/,+D/,scale,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ tkz-tab },%
+ % otherkeywords={},%
+ alsoletter={+-/},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[mecaso]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ KineticT,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ mecaso },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[hanzibox]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ hanzibox*,hanziboxset,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ frametype,pinyinline,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ none,true,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ hanzibox },%
+ % otherkeywords={},%
+ % alsoletter={},%
+ % alsodigit={},%
+ alsoother={*},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[tikz-bagua]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ Bagua*,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ tikz-bagua },%
+ % otherkeywords={},%
+ % alsoletter={},%
+ % alsodigit={},%
+ alsoother={*},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[bodeplot]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ addBodeZPKPlots },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ BodePlot,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ ylabel,ytick,distance,height,width,magnitude,z,p,k,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ true,black,thick,linear,red,dashed,thick,asymptotic,blue,%
+ dotted,thick,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ bodeplot },%
+ % otherkeywords={},%
+ alsoletter={/},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[formal-grammar]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ highlight,firstcase,gralt,nonterm },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ grammar },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ formal-grammar },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[numerica-plus]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ nmcRecur,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ do,see1,f_,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ numerica-plus },%
+ % otherkeywords={},%
+ alsoletter={_1},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[pascaltriangle]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ pascal,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ pascaltriangle },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[pgf-interference]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ pgfinterferencepattern,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters
+ % (since of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ slits,wavelength,slit-distance,intensity,ruler,scale,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ pgf-interference%
+ },%
+ % otherkeywords={},%
+ alsoletter={-},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[clistmap]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ ExplSyntaxOn,ExplSyntaxOff,clistmap,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ first_math,serial_rest_math_and,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ nnn,N,%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ clistmap },%
+ % otherkeywords={},%
+ alsoletter={_},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[hexboard]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ hexmove,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ hexgamelabels,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ hexboard },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[robotarm]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ robotArm,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ tikzpicture },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ config,q1,q2,q3,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ robotarm },%
+ % otherkeywords={},%
+ alsoletter={123},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[amsfonts]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ mathbb,mathfrak,angle,Box,dasharrow,dashleftarrow,dashrightarrow,%
+ Diamond,hbar,Join,leadsto,lhd,llcorner,lozenge,lrcorner,mho,%
+ rhd,rightleftharpoons,rightsquigarrow,sqsubset,sqsupset,square,%
+ trianglelefteq,trianglerighteq,ulcorner,unlhd,unrhd,urcorner,%
+ vartriangleleft,vartriangleright,widehat{arg},widetilde{arg},yen,%
+ checkmark,circledR,maltese,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ amsfonts },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[biolinum]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ biolinum,biolinumOsF,biolinumLF,biolinumkey,sufigures,textsu,%
+ textsuperior,oldstylenums,liningnums,oldstylenumsf,liningnumsf,%
+ tabularnums,proportionalnums,tabularnumsf,proportionalnumsf,%
+ DeclareTextGlyphY,biolinumGlyph,biolinumKeyGlyph,LKey,LKeyPad,%
+ LKeyF,LKeyAltF,LKeyStrgAltF,LKeyCtrlAltF,LKeyStrgX,LKeyCtrlX,%
+ LKeyShiftX,LKeyAltX,LKeyAltGrX,LKeyShiftStrgX,LKeyShiftCtrlX,%
+ LKeyShiftAltX,LKeyShiftAltGrX,LKeyStrgAltX,LKeyCtrlAltX,%
+ LKeyStrgAltEnt,LKeyCtrlAltEnt,LKeyReset,LKeyTux,LKeyWin,LKeyMenu,%
+ LKeyStrg,LKeyCtrl,LKeyAlt,LKeyAltGr,LKeyShift,LKeyTab,LKeyEnter,%
+ LKeyCapsLock,LKeyPos,LKeyEntf,LKeyEinf,LKeyLeer,LKeyEsc,LKeyEnde,%
+ LKeyCommand,LKeyOptionKey,LKeyBack,LKeyUp,LKeyDown,LKeyLeft,%
+ LKeyRight,LKeyPgUp,LKeyPgDown,LKeyAt,LKeyFn,LKeyHome,LKeyDel,%
+ LKeySpace,LKeyScreenUp,LKeyScreenDown,LKeyIns,LKeyEnd,LKeyGNU,%
+ LKeyPageUp,LKeyPageDown,LMouseEmpty,LMouseN,LMouseL,LMouseM,%
+ LMouseR,LMouseLR,LMouseIIEmpty,LMouseIIN,LMouseIIL,LMouseIIR,%
+ LMouseIILR,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ sfdefault,type1,nofontspec,lining,nf,lf,oldstyle,osf,sflining,%
+ sflf,sfoldstyle,sfosf,osfss,tabular,t,p,sftabular,sft,%
+ sfproportional,sfp,scaled,scale,defaultfeatures,space,uni0020,%
+ exclam,uni0021,quotedbl,uni0022,numbersign,uni0023,dollar,%
+ uni0024,percent,uni0025,ampersand,uni0026,quotesingle,uni0027,%
+ parenleft,uni0028,parenright,uni0029,asterisk,uni002A,plus,%
+ uni002B,comma,uni002C,hyphen,uni002D,period,uni002E,slash,%
+ uni002F,zero,uni0030,one,uni0031,two,uni0032,three,uni0033,%
+ four,uni0034,five,uni0035,six,uni0036,seven,uni0037,eight,%
+ uni0038,nine,uni0039,colon,uni003A,semicolon,uni003B,less,%
+ uni003C,equal,uni003D,greater,uni003E,question,uni003F,at,%
+ bracketleft,uni005B,backslash,uni005C,bracketright,uni005D,%
+ asciicircum,uni005E,underscore,uni005F,grave,uni0060,uni007A,%
+ braceleft,uni007B,bar,uni007C,braceright,uni007D,asciitilde,%
+ uni007E,exclamdown,uni00A1,cent,uni00A2,sterling,uni00A3,%
+ currency,uni00A4,yen,uni00A5,brokenbar,uni00A6,section,uni00A7,%
+ dieresis,uni00A8,guillemotleft,uni00AB,uni00AD,degree,uni00B0,%
+ plusminus,uni00B1,acute,uni00B4,uni00B5,periodcentered,uni00B7,%
+ cedilla,uni00B8,guillemotright,uni00BB,Agrave,uni00C0,Aacute,%
+ uni00C1,Acircumflex,uni00C2,Atilde,uni00C3,Adieresis,uni00C4,%
+ Aring,uni00C5,Ccedilla,uni00C7,Egrave,uni00C8,Eacute,uni00C9,%
+ Ecircumflex,uni00CA,Edieresis,uni00CB,Igrave,uni00CC,Iacute,%
+ uni00CD,Icircumflex,uni00CE,Idieresis,uni00CF,Eth,uni00D0,Ntilde,%
+ uni00D1,Ograve,uni00D2,Oacute,uni00D3,Ocircumflex,uni00D4,Otilde,%
+ uni00D5,Odieresis,uni00D6,multiply,uni00D7,Oslash,uni00D8,Ugrave,%
+ uni00D9,Uacute,uni00DA,Ucircumflex,uni00DB,Udieresis,uni00DC,%
+ Yacute,uni00DD,Thorn,uni00DE,germandbls,uni00DF,agrave,uni00E0,%
+ aacute,uni00E1,acircumflex,uni00E2,atilde,uni00E3,adieresis,%
+ uni00E4,aring,uni00E5,ae,uni00E6,ccedilla,uni00E7,egrave,%
+ uni00E8,eacute,uni00E9,ecircumflex,uni00EA,edieresis,uni00EB,%
+ igrave,uni00EC,iacute,uni00ED,icircumflex,uni00EE,idieresis,%
+ uni00EF,eth,uni00F0,ntilde,uni00F1,ograve,uni00F2,oacute,%
+ uni00F3,ocircumflex,uni00F4,otilde,uni00F5,odieresis,uni00F6,%
+ divide,uni00F7,oslash,uni00F8,ugrave,uni00F9,uacute,uni00FA,%
+ ucircumflex,uni00FB,udieresis,uni00FC,yacute,uni00FD,thorn,%
+ uni00FE,ydieresis,uni00FF,Amacron,uni0100,amacron,uni0101,Abreve,%
+ uni0102,abreve,uni0103,Aogonek,uni0104,aogonek,uni0105,Cacute,%
+ uni0106,cacute,uni0107,Ccircumflex,uni0108,ccircumflex,uni0109,%
+ Cdotaccent,uni010A,cdotaccent,uni010B,Ccaron,uni010C,ccaron,%
+ uni010D,Dcaron,uni010E,dcaron,uni010F,Dcroat,uni0110,dcroat,%
+ uni0111,Emacron,uni0112,emacron,uni0113,Ebreve,uni0114,ebreve,%
+ uni0115,Edotaccent,uni0116,edotaccent,uni0117,Eogonek,uni0118,%
+ eogonek,uni0119,Ecaron,uni011A,ecaron,uni011B,Gcircumflex,%
+ uni011C,gcircumflex,uni011D,Gbreve,uni011E,gbreve,uni011F,%
+ Gdotaccent,uni0120,gdotaccent,uni0121,Gcommaaccent,uni0122,%
+ gcommaaccent,uni0123,Hcircumflex,uni0124,hcircumflex,uni0125,Hbar,%
+ uni0126,hbar,uni0127,Itilde,uni0128,itilde,uni0129,Imacron,%
+ uni012A,imacron,uni012B,Ibreve,uni012C,ibreve,uni012D,Iogonek,%
+ uni012E,iogonek,uni012F,Idotaccent,uni0130,dotlessi,uni0131,IJ,%
+ uni0132,ij,uni0133,Jcircumflex,uni0134,jcircumflex,uni0135,%
+ Kcommaaccent,uni0136,kcommaaccent,uni0137,kgreenlandic,uni0138,%
+ Lacute,uni0139,lacute,uni013A,Lcommaaccent,uni013B,lcommaaccent,%
+ uni013C,Lcaron,uni013D,lcaron,uni013E,Ldot,uni013F,ldot,uni0140,%
+ Lslash,uni0141,lslash,uni0142,Nacute,uni0143,nacute,uni0144,%
+ Ncommaaccent,uni0145,ncommaaccent,uni0146,Ncaron,uni0147,ncaron,%
+ uni0148,napostrophe,uni0149,Omacron,uni014C,omacron,uni014D,%
+ Obreve,uni014E,obreve,uni014F,Ohungarumlaut,uni0150,ohungarumlaut,%
+ uni0151,Racute,uni0154,racute,uni0155,Rcommaaccent,uni0156,%
+ rcommaaccent,uni0157,Rcaron,uni0158,rcaron,uni0159,Sacute,%
+ uni015A,sacute,uni015B,Scircumflex,uni015C,scircumflex,uni015D,%
+ Scedilla,uni015E,scedilla,uni015F,Scaron,uni0160,scaron,uni0161,%
+ Tcedilla,uni0162,tcedilla,uni0163,Tcaron,uni0164,tcaron,uni0165,%
+ Tbar,uni0166,tbar,uni0167,Utilde,uni0168,utilde,uni0169,Umacron,%
+ uni016A,umacron,uni016B,Ubreve,uni016C,ubreve,uni016D,Uring,%
+ uni016E,uring,uni016F,Uhungarumlaut,uni0170,uhungarumlaut,uni0171,%
+ Uogonek,uni0172,uogonek,uni0173,Wcircumflex,uni0174,wcircumflex,%
+ uni0175,Ycircumflex,uni0176,ycircumflex,uni0177,Ydieresis,uni0178,%
+ Zacute,uni0179,zacute,uni017A,Zdotaccent,uni017B,zdotaccent,%
+ uni017C,Zcaron,uni017D,zcaron,uni017E,h.superior,uni02B0,%
+ hhook.superior,uni02B1,j.superior,uni02B2,r.superior,uni02B3,%
+ rturned.superior,uni02B4,rhookturned.superior,uni02B5,%
+ Rsmallinverted.superior,uni02B6,w.superior,uni02B7,y.superior,%
+ uni02B8,uni02B9,uni02BA,uni02BB,afii57929,uni02BC,afii64937,%
+ uni02BD,uni02BE,uni02BF,uni02C0,uni02C1,uni02C2,uni02C3,uni02C4,%
+ uni02C5,circumflex,uni02C6,caron,uni02C7,uni02C8,uni02C9,uni02CA,%
+ uni02CB,uni02CC,uni02CD,uni02CE,uni02CF,uni02D0,uni02D1,uni02D2,%
+ uni02D3,uni02D4,uni02D5,uni02D6,uni02D7,breve,uni02D8,dotaccent,%
+ uni02D9,ring,uni02DA,ogonek,uni02DB,tilde,uni02DC,hungarumlaut,%
+ uni02DD,uni02DE,uni02DF,gammalatin.superior,uni02E0,l.superior,%
+ uni02E1,s.superior,uni02E2,x.superior,uni02E3,%
+ glottalstopreversed.superior,uni02E4,uni02EC,uni02ED,uni02EE,%
+ gravecomb,uni0300,acutecomb,uni0301,uni0302,tildecomb,uni0303,%
+ uni0304,uni0305,uni0306,uni0307,uni0308,hookabovecomb,uni0309,%
+ uni030A,uni030B,uni030C,uni030D,uni030E,uni030F,uni0310,uni0311,%
+ uni0312,uni0313,uni0314,uni0315,uni0316,uni0317,uni0318,uni0319,%
+ uni031A,uni031B,uni031C,uni031D,uni031E,uni031F,uni0320,uni0321,%
+ uni0322,dotbelowcomb,uni0323,uni0324,uni0325,uni0326,uni0327,%
+ uni0328,uni0329,uni032A,uni032B,uni032C,uni032D,uni032E,uni032F,%
+ uni0330,uni0331,uni0338,uni0342,uni0343,uni0351,uni0357,uni0358,%
+ uni0359,uni035A,uni035B,uni035C,uni035D,uni035E,uni035F,uni0360,%
+ uni0361,uni0362,uni0363,uni0374,uni0375,afii57799,uni05B0,%
+ afii57801,uni05B1,afii57800,uni05B2,afii57802,uni05B3,afii57793,%
+ uni05B4,afii57794,uni05B5,afii57795,uni05B6,afii57798,uni05B7,%
+ afii57797,uni05B8,afii57806,uni05B9,uni05BA,afii57796,uni05BB,%
+ afii57807,uni05BC,afii57839,uni05BD,afii57645,uni05BE,afii57841,%
+ uni05BF,afii57842,uni05C0,afii57804,uni05C1,afii57803,uni05C2,%
+ afii57658,uni05C3,uni05C6,afii57664,uni05D0,afii57665,uni05D1,%
+ afii57666,uni05D2,afii57667,uni05D3,afii57668,uni05D4,afii57669,%
+ uni05D5,afii57670,uni05D6,afii57671,uni05D7,afii57672,uni05D8,%
+ afii57673,uni05D9,afii57674,uni05DA,afii57675,uni05DB,afii57676,%
+ uni05DC,afii57677,uni05DD,afii57678,uni05DE,afii57679,uni05DF,%
+ afii57680,uni05E0,afii57681,uni05E1,afii57682,uni05E2,afii57683,%
+ uni05E3,afii57684,uni05E4,afii57685,uni05E5,afii57686,uni05E6,%
+ afii57687,uni05E7,afii57688,uni05E8,afii57689,uni05E9,afii57690,%
+ uni05EA,afii57716,uni05F0,afii57717,uni05F1,afii57718,uni05F2,%
+ arrowleft,uni2190,arrowup,uni2191,arrowright,uni2192,arrowdown,%
+ uni2193,arrowboth,uni2194,arrowupdn,uni2195,uni2196,uni2197,%
+ uni2198,uni2199,uni219A,uni219B,uni21A5,uni21A7,uni21BC,uni21BD,%
+ uni21C0,uni21C1,arrowdblleft,uni21D0,arrowdblup,uni21D1,%
+ arrowdblright,uni21D2,arrowdbldown,uni21D3,arrowdblboth,uni21D4,%
+ uni21D5,Nwarrow,uni21D6,Nearrow,uni21D7,Searrow,uni21D8,Swarrow,%
+ uni21D9,uni2318,uni2325,uni2326,uni2327,uni232B,uni237D,uni2380,%
+ uni2423,filledbox,uni25A0,H22073,uni25A1,triagup,uni25B2,uni25B3,%
+ uni25B6,uni25B7,triagdn,uni25BC,uni25BD,uni25C0,uni25C1,uni25C6,%
+ uni25C7,uni25C9,lozenge,uni25CA,circle,uni25CB,uni25CE,H18533,%
+ uni25CF,uni25D0,uni25D1,uni25D2,uni25D3,uni25D4,uni25D5,uni25D6,%
+ uni25D7,openbullet,uni25E6,uni2605,uni2619,uni261B,uni261E,%
+ uni2627,uni262F,uni2639,uni263A,uni263B,uni263C,uni263D,uni263E,%
+ uni263F,female,uni2640,uni2641,male,uni2642,uni2643,uni2644,%
+ uni2645,uni2646,uni2647,uni2648,uni2649,uni264A,uni264B,uni264C,%
+ uni264D,uni264E,uni264F,uni2650,uni2651,uni2652,uni2653,uni2660,%
+ uni2663,uni2665,uni2666,uni2669,musicalnote,uni266A,%
+ musicalnotedbl,uni266B,uni266C,uni2695,uni2698,uni26A2,uni26A3,%
+ uni26A4,uni26A5,uni26AD,uni2767,uni2776,uni2777,uni2778,uni2779,%
+ uni277A,uni277B,uni277C,uni277D,uni277E,uni277F,T_u_x,uniE000,%
+ uniE104,uniE128,uniE129,uniE12A,uniE130,uniE131,uniE132,uniE133,%
+ uniE134,uniE135,uniE138,uniE139,uniE13A,uniE13C,uniE13D,uniE168,%
+ B_a_c_k,uniE16E,S_t_r_g,uniE170,A_l_t,uniE171,A_l_t_G_r,uniE172,%
+ C_t_r_l,uniE173,S_h_i_f_t,uniE174,T_a_b,uniE175,E_n_t_e_r,%
+ uniE176,C_a_p_s_l_o_c_k,uniE177,F_1,uniE178,F_2,uniE179,F_3,%
+ uniE17A,F_4,uniE17B,F_5,uniE17C,F_6,uniE17D,F_7,uniE17E,F_8,%
+ uniE17F,F_9,uniE180,F_1_0,uniE181,F_1_1,uniE182,F_1_2,uniE183,%
+ F_1_3,uniE184,F_1_4,uniE185,F_1_5,uniE186,F_1_6,uniE187,uniE188,%
+ H_o_m_e,uniE189,D_e_l,uniE18A,I_n_s,uniE18B,uniE18C,E_n_d,%
+ uniE18E,G_N_U,uniE190,P_o_s_1,uniE191,E_n_t_f,uniE192,E_i_n_f,%
+ uniE193,L_e_e_r,uniE194,E_s_c,uniE195,E_n_d_e,uniE196,uniE198,%
+ uniE199,uniE19A,uniE19B,uniE1A0,uniE1A1,uniE1A2,uniE1A3,uniE1A4,%
+ uniE1A5,uniE1A6,uniE1A7,uniE1A8,uniE1A9,uniE1AA,uniE1AB,uniE1AC,%
+ uniE1AD,uniE1AE,uniE1B0,uniE1B1,grave.cap,uniE358,acute.cap,%
+ uniE359,circumflex.cap,uniE35A,caron.cap,uniE35B,breve.cap,%
+ uniE35C,hungarumlaut.cap,uniE35D,space_uni030F.cap,uniE35E,%
+ breveinvertedcmb.cap,uniE35F,breve.cyrcap,uniE360,breve.cyr,%
+ uniE361,dieresis.cap,uniE362,hookabovecomb.cap,uniE363,uniFFFD,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ biolinum },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[biblatex]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ cite,Cite,parencite,Parencite,footcite,footcitetext,smartcite,%
+ Smartcite,textcite,Textcite,supercite,cites,Cites,parencites,%
+ Parencites,footcitesfootcitetexts,textcites,Textcites,supercites,%
+ autocite,Autocite,autocite*,Autocite*,autocites,Autocites,%
+ citeauthor,Citeauthor,citetitle,citetitle*,citeyear,citeurl,%
+ parentext,brackettext,nocite,fullcite,footfullcite,volcite,%
+ Volcite,pvolcite,Pvolcite,fvolcite,ftvolcite,tvolcite,Tvolcite,%
+ avolcite,Avolcite,notecite,Notecite,pnotecite,Pnotecite,fnotecite,%
+ citename,citelist,citefield,printbibliography,bibliography,%
+ citedate,ExecuteBibliographyOptions,defbibnote,psq,psqq,%
+ addbibresource,AtNextCite,DeclareNameAlias,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ abstract,addendum,afterword,annotation,annotator,author,%
+ authortype,bookauthor,bookpagination,booksubtitle,booktitle,%
+ booktitleaddon,chapter,commentator,date,doi,edition,editor,%
+ editora,editorb,editorc,editortype,editoratype,editorbtype,%
+ editorctype,eid,eprint,eprintclass,eprinttype,eventdate,%
+ eventtitle,file,foreword,holder,howpublished,indextitle,%
+ institution,introduction,isan,isbn,ismn,isrn,issn,issue,%
+ issuesubtitle,issuetitle,iswc,journalsubtitle,journaltitle,label,%
+ language,library,location,mainsubtitle,maintitle,maintitleaddon,%
+ month,nameaddon,note,number,organization,origdate,origlanguage,%
+ origlocation,origpublisher,origtitle,pages,pagetotal,pagination,%
+ part,publisher,pubstate,reprinttitle,series,shortauthor,%
+ shorteditor,shorthand,shorthandintro,shortjournal,shortseries,%
+ shorttitle,subtitle,title,titleaddon,translator,type,url,urldate,%
+ venue,version,volume,volumes,year,crossref,entryset,entrysubtype,%
+ execute,gender,hyphenation,indexsorttitle,keywords,options,%
+ presort,sortkey,sortname,sorttitle,sortyear,xref,annote,%
+ archiveprefix,journal,key,pdf,primaryclass,school,address,%
+ datamodel,%
+ %
+ backend,style,citestyle,bibstyle,sorting,maxnames,minnames,%
+ maxitems,minitems,backref,abbreviate,firstinits,prenote,postnote,%
+ useprefix,autopunct,giveninits,labelname,given-family,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ submitted,inpress,danish dutch,american,USenglish,english,british,%
+ UKenglish,canadian,australian,newzealand,finnish,french,francais,%
+ canadien,german,ngerman,austrian,naustrian,greek,italian,norsk,%
+ nynorsk,brazil,portuges,spanish,swedish,%
+ %
+ biber,numeric,numeric-comp,numeric-verb,alphabetic,alphabetic-verb,%
+ authoryear,authoryear-comp,authoryear-ibid,authoryear-icomp,%
+ authortitle,authortitle-comp,authortitle-ibid,authortitle-icomp,%
+ authortitle-terse,authortitle-tcomp,authortitle-ticomp,verbose,%
+ verbose-ibid,verbose-note,verbose-inote,verbose-trad1,verbose-trad2,%
+ verbose-trad3,reading,draft,debug,and,inline,footnote,%
+ superscript,plain,nyt,ynt,none,false,true,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ biblatex },%
+ % directives
+ directives={%
+ article,book,inbook,bookinbook,suppbook,booklet,collection,%
+ conference,incollection,suppcollection,manual,misc,online,patent,%
+ periodical,suppperiodical,proceedings,inproceedings,reference,%
+ inreference,report,thesis,unpublished,masterthesis,phdthesis,%
+ string,comment,%
+ },%
+ % otherkeywords={},%
+ alsoletter={-},%
+ % alsodigit={},%
+ delim=*[directive]@,sensitive=false,%
+ }[keywords,directives,tex,comments]%
+
+ \lst@definelanguage[lthooks]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ AddToHook,BeforeBeginEnvironment,AtBeginEnvironment,AtEndEnvironment,%
+ AfterEndEnvironment,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ % begin,end,
+ before,after,begindocument,begindocument/before,%
+ begindocument/end,enddocument,enddocument/afterlastpage,%
+ enddocument/afteraux,enddocument/info,enddocument/end,env,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ lthooks },%
+ % otherkeywords={},%
+ alsoletter={/},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[l3keys2e]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ ProcessKeysOptions,ProcessKeysPackageOptions,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ l3keys2e },%
+ % otherkeywords={},%
+ alsoletter={23},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[varioref]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ vref,vpageref,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ varioref },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[hologo]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ hologo },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=va ,lue)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ hologo%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[acro]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ Ac,Aca,Acap,Acf,Acfp,Acl,Aclp,Acp,AcroAcronymsMap,AcroAddRow,%
+ AcroMapBreak,AcroNeedPackage,AcroPropertiesMap,AcroPropertiesSet,%
+ AcroRerun,AcroStyle,AcroTemplateName,AcroTemplateType,AcronymID,%
+ AcronymTable,Acs,Acsp,BeginAccSupp,Dacs,DeclareAcroArticle,%
+ DeclareAcroEnding,DeclareAcroPreset,DeclareAcroProperty,%
+ DeclareAcroPropertyAlias,DeclareAcroTranslation,DeclareAcronym,Iac,%
+ Iaca,Iacf,Iacl,Iacs,MakeAcroPropertyAlias,NewAcroCommand,%
+ NewAcroPreset,NewAcroTemplate,RenewAcroCommand,RenewAcroPreset,%
+ RenewAcroTemplate,SetupAcroTemplate,SetupNextAcroTemplate,%
+ UseAcroTemplate,abbrdot,ac,aca,acap,acbarrier,acdot,acf,acfg,%
+ acflike,acfootnote,acfp,acg,aciftrailing,acl,aclg,aclp,acp,%
+ acreset,acresetall,acrocite,acrodefinite,acrodonotuse,acrodotfill,%
+ acroendfootnote,acroformat,acrofull,acrogroupcite,acroheading,%
+ acroifT,acroifTF,acroifallTF,acroifanyT,acroifanyTF,%
+ acroifbooleanTF,acroifchapterF add,acroifchapterTF,acroiffirstT,%
+ acroiffirstTF addchap,acroifpagesTF,acroifsingleTF,acroifstarredTF,%
+ acroiftagTF,acroifusedTF,acroindefinite,acrolistname,acroneedpages,%
+ acronopagerange,acronymsmap,acronymsmapF,acronymsmapTF,acropagefill,%
+ acropages,acroplural,acropossessive,acropreamble,acroshow,%
+ acrotranslate,acroupper,acrowrite,acs,acsetup,acsp,acspace,%
+ acswitchoff,acswitchon,acuse,dacs,declareAcronym,iac,iaca,iacf,%
+ iacl,iacs,iacsg,printacronyms,%
+ %
+ acro_locale,acro_if_foreign,acro_if_locale,__acro_foreign_language,%
+ acro_property_get,acro_property_if_set,acro_property_get,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ activate,addsec,addsec*,all,alt,alt,alt-acc,alt-format,%
+ alt-indefinite,alt-plural,alt-plural-form,barriers,before-citation,%
+ caption,%
+ case-insensitive,%case-sensitive,%chapter,chapter*,cite,clear,cmd,%
+ deactivate,define,description,disable,display,exclude,extra,%
+ extra-acc,extra-foreign,extra-format,extra-long,fill,first,%
+ first-long,first-long-format,first-style,first-style ,floats,%
+ footnote,foreign,foreign,foreign-acc,foreign-babel,foreign-format ,%
+ foreign-locale,foreign-plural,foreign-plural-form,format,format,%
+ group,heading,id,include,index,index,index-cmd,index-sort,%
+ language,link-only-first,list,list,list-acc,list-format,%
+ list/display,lists,load-style,local,locale,lof,long,long,%
+ long-acc,long-format,long-indefinite,long-plural,long-plural-ending,%
+ long-plural-form,long-post,long-short,longtable,longtabu,lppl,%
+ ltxtable,make-links,maketitle,method,name,no-index,none,options,%
+ pages,pdf,pdf,pdfcomment,pdfcomment/cmd,pdfcomment/use,pdfstring,%
+ post,pre,preamble,preset,replace,reset,section,section*,short,%
+ short,short,short-acc,short-format,short-indefinite,short-long,%
+ short-plural,short-plural-ending,short-plural-form ,show,single,%
+ single,single,single-acc threshold,single-format
+ title,single-style,%
+ single-style,sort,sort,subsequent-style,subsequent-style,%
+ supertabular,tabular,tabularx,tag,upgrade,use,use-id-as-short,%
+ uselist,version,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ acro%
+ },%
+ % otherkeywords={},%
+ alsoletter={-_},%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ \lst@definelanguage[csquotes]{TeX}{%
+ % Control sequences names
+ moretexcs={%
+ enquote,%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ displayquote,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ csquotes%
+ },%
+ % otherkeywords={},
+ % alsoletter={},
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % tcolorbox
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[tcolorbox]{TeX}%
+ {%
+ % Control sequences names
+ moretexcs={%
+ tcbuselibrary,newtcbtheorem,tcbset%
+ },%
+ % Keywords of class 1 : keywords that contain other characters (since
+ % of the same class as the ones specified as 'otherkeywords')
+ morekeywords={%
+ %
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ absquote,boxarraystore,dispExample,dispExample*,dispListing,%
+ dispListing*,docCommand,docCommand*,docCommands,docEnvironment,%
+ docEnvironment*,docEnvironments,docKey,docKey*,docKeys,%
+ docPathOperation,docPathOperation*,docPathOperations,extcolorbox,%
+ extikzpicture,fooauxenv,foocolorbox,foocolorbox*,posterboxenv,%
+ tcbclipframe,tcbclipinterior,tcbcliptitle,tcbexternal,%
+ tcbinvclipframe,tcbitemize,tcblisting,tcboutputlisting,%
+ tcboxeditemize,tcboxedraster,tcbposter,tcbraster,tcbverbatimwrite,%
+ tcbwritetemp,tcolorbox,%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments) &
+ % optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ Crefname,IfBooleanF,IfBooleanT,IfBooleanTF,IfNoValueF,IfNoValueT,%
+ IfNoValueTF,IfValueF,IfValueT,IfValueTF,PassOptionsToClass,%
+ PassOptionsToPackage,above*,above,actual,adapt,add,adjust,%
+ adjusted,after,alert,alerted,algorithm,align*,align,all,ams,%
+ and,angular,annotate,app,arara,arc,array,as,at,attach,auto,%
+ autoparskip,balanced,base,basedim,baseline,beamer,bean,before,%
+ beforeafter,% begin,
+ below,between,biber,bibtex,bicolor,blank,%
+ blanker,blankest,blend,body,bold,bookmark*,bookmark,borderline,%
+ both,bottom*,bottom,bottomrule,bottomsep,bottomtitle,bounding,%
+ box,boxed,boxes,boxrule,boxsep,break*,break,breakable,broken,%
+ by,caption,capture,center,check,circular,clear,clip,code,%
+ colback,colbacklower,colbacktitle,colframe,collower,colon,color,%
+ colorize,colors,colspacing,coltext,coltitle,column*,column,%
+ columns,colupper,command,comment,compilable,compiler,compress,%
+ content,corner,corners,counter*,counter,counters,coverage,%
+ crefname,current,curved,dash,default,definition,delimiters,%
+ description,detach,directory,do,doc,docexample,documentation,%
+ downwards,draft,draftmode,draw,drop,dvips,east,empty,% end,
+ %
+ enforce,engine,english,enhanced,enlarge,enlargement,enlargepage,%
+ entry,environment,environments,equal,equation*,equation,error,%
+ even,every,example!,example,extend,extension,external,%
+ externalize,extras,extrude,fade,fading,file,fill,filled,finally,%
+ finish,first,fit,fitting,fixed,flexible,flip,float*,float,%
+ floatplacement,flush,flushleft,flushright,font,fontlower,fontsize,%
+ fonttitle,fontupper,for,force,format,formatter,frame,freelance,%
+ freelancefirst,freelancelast,freelancemiddle,freestyle,freeze,from,%
+ full,fuzzy,gap,gather*,gather,geometry,german,goal,graphical,%
+ graphics,group,grow,halign,halo,hanging,hbox,head,height,%
+ hidden,hide,higher,highlight,hooks,horizontal,hyperlink,hyperref,%
+ hypertarget,hyperurl*,hyperurl,hyphenationfix,if,ignore,image,in,%
+ indent,index*,index,inherit,initially,input,inputencoding,inside,%
+ interior,into,invisible,inwards,is,jigsaw,jpg,key,keypath,keys,%
+ keywords,label,language,large,last,latex,layer,layers,left*,%
+ left,lefthand,leftlower,leftright,leftrule,lefttitle,leftupper,%
+ length,lengths,level,lifted,limit,line*,line,lines,list,%
+ listing!,listing,listings,listingsutf,lower*,lower,lowerbox,%
+ lowered,lualatex,m,macros,magazine,makeindex,many,marginnote,%
+ marker,math,maxfontdiff,maxfontdiffgap,maxstep,maxwidthdiff,%
+ maxwidthdiffgap,method,midday,middle,minimum,minipage,minted,%
+ most,move,multicolumn,multirow,n,name,nameref,natural,new,%
+ nirvana,no,nobeforeafter,nobreak,node,nodes,nodisplayskip,%
+ nofloat,none,noparskip,nophantom,north,northeast,northwest,not,%
+ notitle,number,octogon,odd,of,offset,on,oneside*,oneside,only,%
+ opacity,opacityback,opacitybacklower,opacitybacktitle,opacityfill,%
+ opacityframe,opacitylower,opacitytext,opacitytitle,opacityupper,%
+ option,options,or,orientation,out,outer,outside,outwards,over,%
+ overlay,overlays,oversize,overzoom,pad,page*,page,pages,%
+ pageshort,parameter,parbox,parenthesis,parfillskip,parskip,path,%
+ paths,pdf,pdflatex,percent,phantom,phantomlabel,placeholder,%
+ plain,plus,png,poster,pre,preamble,preclass,prefix,process,%
+ pspdf,quote,raise,raised,raster,ratio,record,recording,remake,%
+ remember,remove,reset,restore,right*,right,righthand,rightlower,%
+ rightrule,righttitle,rightupper,rotate,rounded,row,rows,%
+ rowspacing,rowspan,run,runner,runs,safety,savedelimiter,%
+ savelowerto,saveto,scale,scope,segmentation,semi,separated,%
+ separator,sequence,settings,shade,shading,shadow,sharp,sharpish,%
+ shield,show,showframe,shrink,side,sidebyside,sidewards,sign,%
+ size,skin,skins,skip,small,smart,sort,source,south,southeast,%
+ southwest,space,spacing,span,spartan,split,spread,square,%
+ squeezed,stack,standard,step,store,stretch,style,subskin,%
+ subtitle,supplement,switch,system,tabulars*,tabulars,tabularx*,%
+ tabularx,tcbimage,tcbox,preamble tcbset,tempfile,terminator,text,%
+ theorem,theorems,tight,tikz,tikznode,tile,title*,title,titlebox,%
+ titled,titlerule,to,toggle,top*,top,toprule,topsep,toptitle,%
+ type,unbreakable,unbroken,underlay,updated,upper*,upper,upperbox,%
+ upwards*,upwards,use,utf,valign,value,values,varwidth,verbatim,%
+ vertical,vfill,vignette,visible,void,warning,watermark,west,%
+ widget,width,with,within,xelatex,xmax,xmin,xparse,xshift,ymax,%
+ ymin,yshift*,yshift,yshifttext,zoom,%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ all,and,apart,areasize*,areasize,as-is,auto,base,baselineskip,%
+ beamer,beamerfirst,beamerlast,beamermiddle,bicolor,bicolorfirst,%
+ bicolorlast,bicolormiddle,both,bottom,break,broken,center,change,%
+ clipped,colon,copy,dash,direct,doc,downhill,draft,east,empty,%
+ emptyfirst,emptylast,emptymiddle,enhanced,enhancedfirst,%
+ enhancedlast,enhancedmiddle,evenpage,false,fbox,figures,final,%
+ first,fitbox,flush,fontsize*,fontsize,forced,freelance,%
+ freelancefirst,freelancelast,freelancemiddle,hang,hbox,hybrid*,%
+ hybrid,ignored,invisible,jigsaw,justify,landscape*,landscape,%
+ last,left,limited,listings,margin,maximum,middle,minimal,%
+ minimum,minipage,minted,none,normal,north,northeast,northwest,%
+ off,on,path,pathfirst,pathfirstjigsaw,pathjigsaw,pathlast,%
+ pathlastjigsaw,pathmiddle,pathmiddlejigsaw,pgf,pgfchapter,%
+ pgfsection,plain,portrait*,portrait,right,rows,scale*,scale,%
+ seam,small,south,southeast,southwest,spartan,squeeze,standard,%
+ tables,tight,tile,tilefirst,tilelast,tilemiddle,title,top,true,%
+ unbroken,unlimited,uphill,visible,west,widget,widgetfirst,%
+ widgetlast,widgetmiddle,red,black,white,none,%
+ },%
+ % Keywords of class 5 : arguments specifications (after ":" in expl3
+ % syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly derived
+ % packages)
+ morekeywords=[6]{%
+ tcolorbox%
+ },%
+ % otherkeywords={},%
+ alsoletter={ \ },%
+ % alsodigit={},%
+ % alsoother={},%
+ sensitive,%
+ }[keywords,tex,comments]%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ % Classes (La)TeX
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \lst@definelanguage[classes]{TeX}{%
+ % Control sequences
+ moretexcs={%
+ },%
+ % Keywords of class 1 : keywords that contain other characters
+ % (since of the same class as the ones specified as
+ % 'otherkeywords')
+ morekeywords={%
+ %
+ },%
+ % Keywords of class 2 : environments names
+ morekeywords=[2]{%
+ },%
+ % Keywords of class 3 : mandatory arguments (not environments)
+ % & optional arguments which are keys (in key=value)
+ morekeywords=[3]{%
+ },%
+ % Keywords of class 4 : values of keys (in key=value)
+ morekeywords=[4]{%
+ },%
+ % Keywords of class 5 : arguments specifications (after “:”
+ % in expl3 syntax)
+ morekeywords=[5]{%
+ },%
+ % Keywords of class 6 : current package name (and possibly
+ % derived packages)
+ morekeywords=[6]{%
+ a0poster,aalok,aastex631,abntex2,achemso,acmart,acmconf,
+ active-conf,adfathesis,afparticle,afthesis,aguplus,aiaa-tc,
+ akklecture,akkscript,akktecdoc,akletter,myletter,ametsoc,
+ amsart,amsbook,amsdtx,amsldoc,amsproc,aomart,apa,apa6,
+ apa6e,apa7,arabart,arabbook,arabrep,arabrep1,articleingud,
+ asaetr,ascelike,asmeconf,asmejour,assignment,aucklandthesis,
+ bangorcsthesis,bangorexam,barticle,bbook,bletter,
+ bankstatement,article,book,letter,ltnews,ltxdoc,ltxguide,
+ minimal,proc,report,slides,source2edoc,basque-book,beamer,
+ beamerswitch,beaulivre,beilstein,argetabelle,bewerbung,
+ bgteubner,BHCexam,bitart,bitbook,bjfuthesis,BMSTU-IU8,
+ bookcover,bookest,bookshelf,br-lex,brandeis-dissertation,
+ brandeis-problemset,brandeis-thesis,buctcover,buctthesis,
+ bxjsarticle,bxjsbook,bxjsreport,bxjsslide,cascadilla,cd,
+ cd-cover,articoletteracdp,letteracdp,cesenaexam,cheatsheet,
+ chemmacros-manual,chletter,cje,cnbwp,cnltx-doc,codedoc,
+ colorart,colorbook,combine,cc,ConcProg,confproc,contracard,
+ courseoutline,coursepaper,cquthesis,csbulletin,csbulobalka,
+ csbulv1,ctexart,ctexbeamer,ctexbook,ctexrep,ctxdoc,curve,
+ cv4tw,cweb,idcc,ijdc-v14,ijdc-v9,dinbrief,disser,gost732,
+ dithesis,droit-fr,dtk,dvdcoll,easybook,ebsthesis,agecon,
+ ajae,apecon,ecca,erae,itaxpf,jrurstud,njf,oegatb,pocoec,
+ regstud,worlddev,ecv,einfart,ejpecp,elbioimp,elegantbook,
+ elegantnote,elegantpaper,elpres,cas-dc,cas-sc,elsarticle,
+ elteikthesis,emisa,emulateapj,erdc,eskd,eskdgraph,eskdtab,
+ eskdtext,estcpmm,europasscv,europecv,exam,exam-n,examdesign,
+ exesheet,extarticle,extbook,extletter,extproc,extreport,
+ facsimile,factura,fancyhandout,fancyslides,fbithesis,fcavtex,
+ fdudoc,fduthesis-en,fduthesis,fei,ffslides,fithesis,
+ fithesis2,fithesis3,fithesis4,flacards,flashcards,frletter,
+ g-brief,g-brief2,gaceta,gammas,gatech-thesis,gmdocc,
+ gradstudentresume,grant-afosr,grant-aro,grant-darpa,grant-doe,
+ grant-nih,grant-nrl,grant-nsf,grant-onr,grant,graphpaper,
+ gridslides,gsemthesis,guitartabs,gzt,gztarticle,h2020proposal,
+ hgbarticle,hgbreport,hgbthesis,harnon-cv,hausarbeit-jura,
+ hcart,hcletter,hcreport,hcslides,hecthese,hepthesis,hitec,
+ hithesis,hitreport,hitszthesis,hletter,hpsdiss,fsbispit,
+ huawei,hustthesis,icsv,IEEEconf,IEEEtran,ijmart,ijsra,
+ image-gallery,IMTEKda,inkpaper,invoice-class,iodhbwm,iscram,
+ isov2,isodoc,iwhdp,jacow,jlreq,jmlr,jmlrbook,jnuexam,jpsj2,
+ jura,jurabook,juraovw,juraurtl,kdgcoursetext,kdgmasterthesis,
+ kdpcover,kerntest,kluwer,knittingpattern,scrartcl,scrarticle,
+ scrbook,scrdoc,scrletter,scrlttr2,scrreport,scrreprt,komacv,
+ oblivoir-utf,oblivoir-xl,oblivoir,xoblivoir,ksp-thesis,l3doc,
+ labbook,leadsheet,leaflet,lebhart,lectures,letgut,lettre,limap,
+ limecv,lion-msc,lni,lps,lt3graph-packagedoc,ltxdockit,
+ ltxguidex,abstbook,beletter,flashcard,iagproc,cours,fiche,
+ matapli,matc3mem,mcmthesis,ltxmdf,medstarbeamer,meetingmins,
+ memoir,mensa-tex,mentis,metanorma,milog,minimart,minimbook,
+ mla,mluexercise,mnras,moderncv,modernposter,msu-thesis,
+ mucproc,mugsthesis,muling,musuos,muthesis,third-rep,mwart,
+ mwbk,mwrep,mycv,nature,ncc,nccproc,sibjnm,nddiss2e,
+ ndsu-thesis,newlfm,nih,nihbiosketch,njurepo,nlctdoc,nostarch,
+ nrc1,nrc2,artikel1,artikel2,artikel3,boek,boek3,brief,
+ rapport1,rapport3,nwejm,nwejmart,octavo,onrannual,
+ oup-authoring-template,journal,paper,papertex,pbsheet,pecha,
+ petiteannonce,philosophersimprint,pittetd,pkuthss,plari,play,
+ postcards,powerdot,FUpowerdot,ppr-prv,pracjourn,pressrelease,
+ proposal,reporting,dfgproposal,dfgreporting,euproposal,
+ eureporting,prosper,protocol,prtec,upmgr,wkmgr,pst-doc,
+ ptptex,qcm,quantumarticle,qyxf-book,ReadableCV,recipe,
+ RecipeBook,recipecard,refart,refrep,resphilosophica,revtex4-2,
+ revtex4,revtex4-1,rtklage,ryersonSGSThesis,ryethesis,sageep,
+ sapthesis,schuleab,schulein,schuleit,schulekl,schuleub,
+ schuleue,schullsg,schullzk,schulma-ab,schulma-gutachten,
+ schulma-klausur,schulma-komp,schulma-mdlprf,schulma-praes,
+ schwalbe,sciposter,screenplay,scrjrnl,sdapsclassic,sduthesis,
+ seminar,semproc,sesamanuel,seuthesix,sffms,cassete,etiketka,
+ shtthesis,caesar_book,sides,simplecv,simplivre,skbarticle,
+ skbbeamer,skbbook,skblncsbeamer,skblncsppt,skbmoderncv,skdoc,
+ skeyval-testclass,skrapport,smfart,smfbook,SPhdThesis,spie,
+ sr-vorl,sslides,stage,standalone,usthesis,hwexam,mikoslides,
+ omdoc,smglom,subfiles,suftesi,sugconf,tabriz-thesis,talk,
+ tcldoc,tclldoc,powersem,thesis-ekf,thesis-gwu,thuthesis,
+ tikz-kalender,tikzposter,tlc-article,TOPletter,toptesi,
+ tudabeamer,tudaexercise,tudaleaflet,tudaletter,tudaposter,
+ tudapub,tudasciposter,tudscrartcl,tudscrbook,tudscrdoc,
+ tudscrmanual,tudscrposter,tudscrreprt,tufte-book,tufte-handout,
+ ltugboat,ltugproc,tui,turabian,turabian-researchpaper,
+ turabian-thesis,my-thesis,ua-thesis,uafthesis,
+ uantwerpenbamathesis,uantwerpencoursetext,uantwerpenexam,
+ uantwerpenletter,uantwerpenphdthesis,uantwerpenreport,
+ ucalgmthesis,ucbthesis,ucdavisthesis,ucsmonograph,ucthesis,
+ udesoftec,uebungsblatt,uestcthesis,uhhassignment,uiucredborder,
+ uiucthesis,ulthese,legislation,umich-thesis,umthesis,
+ unam-thesis,unifith,unitn-bimrep,univie-ling-expose,
+ univie-ling-paper,univie-ling-thesis,univie-ling-wlg,
+ unizgklasa,uothesis,UoWthesis,upmethodology-document,URbeamer,
+ URletter,uspatent,ut-thesis,utexasthesis,uwmslide,uwthesis,
+ verifica,webquiz,willowtreebook,withargs-packagedoc,
+ wsemclassic,xduthesis,xebaposter,xmuthesis,xsim-manual,
+ yaletter,yathesis,ycbook,ydoc,york-thesis,
+ },%
+ % otherkeywords={},%
+ alsoletter={0123456789-},%
+ % alsodigit={},%
+ sensitive%
+ }[keywords,tex,comments]%
+ #+end_src
diff --git a/macros/luatex/latex/letgut/tex/informations-gut.tex b/macros/luatex/latex/letgut/tex/informations-gut.tex
deleted file mode 100644
index def4a25fce..0000000000
--- a/macros/luatex/latex/letgut/tex/informations-gut.tex
+++ /dev/null
@@ -1,155 +0,0 @@
-\enlargethispage{1.5cm}
-\small
-\vspace*{-1cm}
-\hspace*{-1.5cm}%
-\raisebox{-\height+0.7\baselineskip}{%
- \begin{minipage}[t]{.6\textwidth}%\vspace{0pt}%
- \includegraphics[width=\linewidth]{logo-gut.pdf}
- \end{minipage}%
-}%
-\hfill%
-\begin{minipage}[t]{.4\textwidth}%\vspace{0pt}%
- \footnotesize\raggedleft%
- Association \gut{}\\
- 15 rue des Halles -- \textsc{bp} 74\\
- 75001 Paris\\
- France\\
- \nolinkurl{secretariat@gutenberg.eu.org}
-\end{minipage}%
-
-\begin{description}
-\item[Site internet :] \url{https://www.gutenberg.eu.org/}
-\item[\Cahiers{} :] \url{http://cahiers.gutenberg.eu.org/}
-\item[Problèmes techniques :]
- \leavevmode
- \begin{description}
- \item[la liste \texttt{gut} :]
- \url{https://www.gutenberg.eu.org/-Listes-de-diffusion-}
- \item[le site \TeX nique de questions et réponses :]
- \url{https://texnique.fr/}
- \item[la foire aux questions :]
- \url{https://faq.gutenberg.eu.org}
- \end{description}
-\end{description}
-%
-\alertbox{%
- Cette association est la vôtre: faites-nous part de
- vos idées, de vos envies, de vos préoccupations
- à l'adresse \nolinkurl{secretariat@gutenberg.eu.org}.%
-}
-
-% \section[Association GUTenberg (tout sur l')]
-% {Adhésion à l'association}
-\title{Adhésion à l'association}
-\label{letgut_label_adhesions}
-
-\begin{itemize}
-\item % Adhésions et abonnements
- Les adhésions sont à renouveler en début d'année
- pour l'année civile.
- % \item Il n'y a pas de lettre de rappel, chaque membre
- % doit faire son renouvellement annuel; %\hspace*{1em}
- % merci de renvoyer spontanément le bulletin ci-dessous
- % en début d'année.
-\item Les administrations peuvent joindre un bon de commande
- revêtu de la signature de la personne responsable ;
- les étudiants doivent joindre un justificatif.
- % \item Si vous souhaitez que vos coordonnées restent
- % confidentielles, merci de le signaler.
-\end{itemize}
-
-\section{Tarifs \the\year}
-
-Les membres de \gut\ peuvent adhérer à l'association
-internationale, le \acf{tug}, et recevoir son bulletin
-\emph{\acs{tug}boat} à un tarif préférentiel :
-\begin{description}
-\item[tarif normal :] \EUR{65} (au lieu de 85~\$)
-\item[tarif étudiant :] \EUR{40} (au lieu de 55~\$)
-\end{description}
-% (\EUR{49,50}, étudiants et demandeurs d'emploi :
-% \EUR{29}, au lieu de 85\$ et % 65\$). Voir
-% \url{%
-% https://www.gutenberg.eu.org/?Adherer-a-l-association%
-% }.
-
-\footnotesize
-\begin{center}
- \begin{tabular}{lr}
- \toprule
- \textbf{Type d'adhésion} & \textbf{Prix} \\
- \midrule
- Membre individuel & \EUR{30} \\
- Membre individuel + adhésion \acs{tug} & \EUR{95} \\
- Membre individuel étudiant/demandeur d'emploi & \EUR{15} \\
- Membre individuel étudiant + adhésion \acs{tug} & \EUR{55} \\
- Association d'étudiants & \EUR{65} \\
- Organisme à but non lucratif & \EUR{130} \\
- Organisme à but lucratif & \EUR{229} \\
- \bottomrule
- \end{tabular}
-\end{center}
-
-\section{Règlements}
-
-Les règlements peuvent s'effectuer par :
-\begin{itemize}
-\item \textbf{virement bancaire}%
- \footnote{Nous vous remercions de \textbf{privilégier}
- le \textbf{virement bancaire}.\label{fn:1}} (IBAN :
- FR76 1870 7000 3003 0191 3568 475)%
- \leavevmode
-
- \alertbox{%
- Veillez à bien \emph{indiquer vos nom et prénom}
- dans les références du virement !%
- }
-\item Paypal\footnotemark[\value{footnote}] :
- \url{https://www.gutenberg.eu.org/?Adherer-en-ligne}
-\item bulletin et chèque\footnotemark[\value{footnote}] :
- \url{https://www.gutenberg.eu.org/?Adherer-a-l-association}
-\end{itemize}
-
-\vfill
-
-\begin{center}
- \begin{tblr}{
- width=.75\linewidth,
- colspec={
- % < (Just not to disturb the parentheses
- % balancing detection of my editor.)
- >{\bfseries}r@{ }X
- },
- vline{1,3}={solid},
- hline{1,7}={solid},
- rowsep=0mm,
- row{1} = {abovesep+=.25cm},
- row{2} = {belowsep+=.125cm},
- row{6} = {belowsep+=.25cm},
- % colsep=2.5mm,
- }
- \SetCell[c=2]{c} \emph{La \lettregut}\\
- \SetCell[c=2]{c} \mdseries Bulletin irrégulomestriel
- de l'association \gut\\
- Directeur de la publication :
- & \person{Bideault, Patrick} \\
- Comité de rédaction :
- & {Patrick \bsc{Bideault}, Denis \bsc{Bitouzé}, \\
- Céline \bsc{Chevalier} \& Maxime \bsc{Chupin}} \\
- Adresse de la rédaction : &
- {
- Association \gut\\
- 15 rue des Halles -- \textsc{bp} 74\\
- 75001 Paris
- }
- \\
- \acs{issn} : & 2742-6149 (version numérique)
- \end{tblr}
-\end{center}
-\vfill
-\mbox{}
-\clearpage
-
-%%% Local Variables:
-%%% mode: latex
-%%% End:
diff --git a/macros/luatex/latex/letgut/tex/letgut-acronyms.tex b/macros/luatex/latex/letgut/tex/letgut-acronyms.tex
deleted file mode 100644
index eb9026f8bf..0000000000
--- a/macros/luatex/latex/letgut/tex/letgut-acronyms.tex
+++ /dev/null
@@ -1,198 +0,0 @@
-%%%%%%%%%%%%%%%%%%%%%
-% Acronymes anglais %
-%%%%%%%%%%%%%%%%%%%%%
-\letgutacro
-{CTAN}
-{\href{https://www.ctan.org/}{Comprehensive \TeX{} Archive Network}}
-[réseau complet d'archives \TeX{}]
-
-\letgutacro
-{PDF}
-{Portable Document Format}
-[format de document portable]
-
-\letgutacro
-{URL}
-{Uniform Resource Locator}
-[localisateur uniforme de ressource]
-
-\letgutacro
-{ORCID}
-{Open Researcher and Contributor \textsc{id}}
-[identifiant ouvert pour chercheur et contributeur]
-
-\letgutacro[extra-foreign=souvent librement traduit en \enquote{foire aux questions}]
-{FAQ}
-{Frequently Asked Questions}
-[questions fréquemment posées]
-
-\letgutacro
-{SVG}
-{Scalable Vector Graphics}
-[graphiques vectoriels extensibles]
-
-\letgutacro
-{DNS}
-{Domain Name System}
-[système de noms de domaine]
-
-\letgutacro
-{VPS}
-{Virtual Private Server}
-[serveur dédié virtuel]
-
-\letgutacro
-{LDAP}
-{Lightweight Directory Access Protocol}
-[protocole d'accès à répertoire léger, sytème garantissant l'authentification
-d'utilisateurs de plusieurs services dispersés]
-
-\letgutacro
-{OTF}
-{Open Type Format}
-[]
-
-\letgutacro
-{DOI}
-{Digital Object Identifier}
-[identifiant numérique d'objet]
-
-\letgutacro
-{ISSN}
-{International Standard Serial Number}
-[numéro international normalisé des publications en série]
-
-\letgutacro
-{TUG}
-{\TeX{} User Group}
-[groupe (international) d'utilisateurs de \TeX{}]
-
-\letgutacro
-{TL}
-{\TeX{}~Live}
-[]
-
-\letgutacro
-{WCAG}
-{Web Content Accessibility Guidelines}
-[directives sur l'accessibilité du contenu Web]
-
-\letgutacro
-{HTML}
-{HyperText Markup Language}
-[langage de balises pour l'hypertexte]
-
-\letgutacro
-{CSS}
-{Cascading Style Sheets}
-[feuilles de style en cascade]
-
-\letgutacro
-{UTF}
-{Universal (Character Set) Transformation Format}
-[format de transformation (du jeu) universel (de caractères codés)]
-
-\letgutacro[short=\emph{Ti\emph{k}Z},short-format=\em,foreign-babel=german,foreign-locale=allemand]
-{TIKZ}
-{Ti\emph{k}Z ist \emph{kein} Zeichenprogramm}
-[Ti\emph{k}Z \emph{n'}est \emph{pas} un programme de dessin]
-
-\letgutacro
-{PGF}
-{Portable Graphics Format}
-[format de graphiques portables]
-
-\letgutacro
-{GPL}
-{\textsc{gnu} General Public License}
-[licence publique générale \textsc{gnu}]
-
-\letgutacro
-{OFL}
-{SIL Open Font License}
-[]
-
-\letgutacro
-{DVI}
-{DeVice-Independent}
-[indépendant du type de périphérique]
-
-\letgutacro
-{PS}
-{PostScript}
-[]
-
-\letgutacro
-{DVIPS}
-{\acs{dvi}-to-\acs{ps} (translator)}
-[(convertisseur) \acs{dvi} vers \acs{ps}]
-
-\letgutacro
-{IPA}
-{International Phonetic Alphabet}
-[alphabet phonétique international]
-
-\letgutacro
-{TIPA}
-{\TeX{} \acs{ipa} or Tokyo \acs{ipa}}
-[alphabet phonétique international]
-
-%%%%%%%%%%%%%%%%%%%%%%
-% Acronymes français %
-%%%%%%%%%%%%%%%%%%%%%%
-
-\letgutacro
-{SMAI}
-{\href{http://smai.emath.fr/}{Société de Mathématiques Appliquées et Industrielles}}
-
-\letgutacro
-{AG}
-{Assemblée Générale}
-
-\letgutacro
-{CA}
-{Conseil d'Administration}
-
-\letgutacro
-{SHS}
-{Sciences Humaines et Sociales}
-
-\letgutacro
-{IREM}
-{\href{https://www.univ-irem.fr/}{Instituts de Recherche sur l'Enseignement des Mathématiques}}
-
-\letgutacro
-{MEEF}
-{Métiers de l'Enseignement, de l'Éducation et de la Formation}
-
-\letgutacro
-{ECM}
-{\href{https://texnique.fr/osqa/faq/\#custom-id-ecm}{Exemple Complet Minimal}}
-
-\letgutacro
-{INSPÉ}
-{Instituts Nationaux Supérieurs du Professorat et de l'Éducation}
-
-\letgutacro[short=\textsc{gra}pp\textsc{a},short-format=\upshape]
-{GRAppA}
-{Groupe de recherche en Apprentissage Automatique}
-
-\letgutacro
-{BBB}
-{BigBlueButton}
-
-\letgutacro
-{CV}
-{Curriculum Vitæ}
-
-\letgutacro
-{RGPD}
-{Règlement Général sur la Protection des Données}
-
-\letgutacro
-{NDLR}
-{Notre de la Rédaction}
-
-%%% Local Variables:
-%%% mode: latex
-%%% End:
diff --git a/macros/luatex/latex/letgut/tex/letgut-francophony-icon.pdf b/macros/luatex/latex/letgut/tex/letgut-francophony-icon.pdf
deleted file mode 100644
index f57796b134..0000000000
--- a/macros/luatex/latex/letgut/tex/letgut-francophony-icon.pdf
+++ /dev/null
Binary files differ
diff --git a/macros/luatex/latex/letgut/tex/letgut.cbx b/macros/luatex/latex/letgut/tex/letgut.cbx
deleted file mode 100644
index 4d1a824a02..0000000000
--- a/macros/luatex/latex/letgut/tex/letgut.cbx
+++ /dev/null
@@ -1,16 +0,0 @@
-\ProvidesFile{letgut.cbx}[2022-03-22 v0.9.1 letgut base citation style]
-\RequireCitationStyle{numeric}
-\DeclareFieldFormat[bookreview]{title}{\textbf{\emph{#1}}}
-\renewbibmacro*{title}{%
- \ifboolexpr{
- test {\iffieldundef{title}}
- and
- test {\iffieldundef{subtitle}}
- }
- {}
- {\printtext[title]{%
- \printfield[titlecase]{title}%
- \setunit{\subtitlepunct}}%
- \printfield[emph]{subtitle}%
- \newunit}%
- \printfield{titleaddon}}
diff --git a/macros/luatex/latex/letgut/tex/letgut.dbx b/macros/luatex/latex/letgut/tex/letgut.dbx
deleted file mode 100644
index fbd6a99f85..0000000000
--- a/macros/luatex/latex/letgut/tex/letgut.dbx
+++ /dev/null
@@ -1,50 +0,0 @@
-\ProvidesFile{letgut.dbx}[2022-03-22 v0.9.1 letgut data model macros]
-\DeclareBibliographyDriver{bookreview}{%
- \usebibmacro{bibindex}%
- \usebibmacro{begentry}%
- \usebibmacro{author/editor+others/translator+others}%
- \setunit{\printdelim{nametitledelim}}
- \newblock
- \usebibmacro{maintitle+title}%
- \newunit
- \printlist{language}%
- \newunit\newblock
- \usebibmacro{byauthor}%
- \newunit\newblock
- \usebibmacro{byeditor+others}%
- \newunit\newblock
- \printfield{edition}%
- \newunit
- \iffieldundef{maintitle}
- {\printfield{volume}%
- \printfield{part}}
- {}%
- \newunit
- \printfield{volumes}%
- \newunit\newblock
- \usebibmacro{series+number}%
- \newunit\newblock
- \printfield{note}%
- \newunit\newblock
- \usebibmacro{publisher+location+date}%
- \newunit\newblock
- \usebibmacro{chapter+pages}%
- \newunit
- \printfield{pagetotal}%
- \newunit\newblock
- \iftoggle{bbx:isbn}
- {\printfield{isbn}}
- {}%
- \newunit\newblock
- \usebibmacro{doi+eprint+url}%
- \newunit\newblock
- \usebibmacro{addendum+pubstate}%
- \setunit{\bibpagerefpunct}\newblock
- \usebibmacro{pageref}%
- \newunit\newblock
- \iftoggle{bbx:related}
- {\usebibmacro{related:init}%
- \usebibmacro{related}}
- {}%
- \finentrypunct
- \usebibmacro{finentry}}
diff --git a/macros/luatex/latex/letgut/tex/letgut.lbx b/macros/luatex/latex/letgut/tex/letgut.lbx
deleted file mode 100644
index 48df7b7c94..0000000000
--- a/macros/luatex/latex/letgut/tex/letgut.lbx
+++ /dev/null
@@ -1,8 +0,0 @@
-\ProvidesFile{letgut.lbx}[2022-03-22 v0.9.1 letgut localization]
-\InheritBibliographyExtras{french}
-\DeclareBibliographyStrings{
- inherit = {french},
- number = {{\no}{\no}},
- volume = {{volume}{vol\adddot}},
- volumes = {{volumes}{vol\adddot}},
-}
diff --git a/macros/luatex/latex/letgut/tex/logo-gut.pdf b/macros/luatex/latex/letgut/tex/logo-gut.pdf
deleted file mode 100644
index 8483c6a56f..0000000000
--- a/macros/luatex/latex/letgut/tex/logo-gut.pdf
+++ /dev/null
Binary files differ