跳转到内容

模块:图书排版

勤求古训,博采众方
WikiBot​(留言 | 贡献)2026年9月19日 (六) 15:02的版本 (以 heti 官方规则为底补齐版式类,并把版式改为模板参数开关({{图书排版|行间注}} 等))
--[[
Module:图书排版 —— 解析 {{图书排版}} 的位置参数,拼出版式容器。

设计见 content/tushu/DESIGN.md。要点:

  1) 收集全部位置参数,因此支持叠加:{{图书排版|古籍|楷体}}
     → <div class="tushu-body heti--ancient heti--kai">。
  2) 容器类一律沿用 heti 官方类名(.heti--*),不另造前缀。
  3) **总是输出基础容器 tushu-body**(即使一个参数都没传)。原因:153 个页面已于
     2026-09 加上 {{图书排版/尾}},若模板不输出容器,那些 </div> 会变成孤立的
     闭合标签而破坏页面结构。容器本身不带任何样式——限宽已于 2026-09 改回
     由 |限宽 参数触发(见样式表里的 .heti--line-length)。
  4) 竖排(|竖排 / .heti--vertical)及其锚点、横直排切换条已于 2026-09 移除。
     样式表内的 .heti--vertical 官方类仍保留,页面手写 <div class="heti--vertical">
     仍可用,只是不再有模板参数入口。
]]

local p = {}

-- 参数 → 容器类(中文为主,英文为别名)
local CLASS = {
	['行间注'] = 'heti--annotation', ['annotation'] = 'heti--annotation',
	['古籍'] = 'heti--ancient', ['ancient'] = 'heti--ancient',
	['诗词'] = 'heti--poetry', ['poetry'] = 'heti--poetry',
	['楷体'] = 'heti--kai', ['kai'] = 'heti--kai',
	['限宽'] = 'heti--line-length', ['line-length'] = 'heti--line-length',
	['双栏'] = 'heti--columns-2', ['columns-2'] = 'heti--columns-2',
	['三栏'] = 'heti--columns-3', ['columns-3'] = 'heti--columns-3',
	['四栏'] = 'heti--columns-4', ['columns-4'] = 'heti--columns-4',
}

function p.main(frame)
	local args = frame:getParent().args
	local classes = {}

	for _, v in ipairs(args) do
		local key = mw.text.trim(v)
		if key ~= '' and CLASS[key] then
			classes[#classes + 1] = CLASS[key]
		end
	end

	local cls = { 'tushu-body' }
	for _, c in ipairs(classes) do
		cls[#cls + 1] = c
	end

	return string.format('<div class="%s">', table.concat(cls, ' '))
end

return p