看看问题的答案这里, 这是非常接近我想要的。我想要的是创建字体表,其中包含字体文件的示例,这些字体文件不是系统安装或泰克思树,而是驻留在路径或 CD 上的字体文件(没有子文件夹,只需当前文件夹即可)。
我仍在学习,感谢您的帮助!
使用 MiKTeX 2.9 和 Windows 7,以及 LuaLaTeX。
编辑:
受到Taco
回答的启发,我得出了以下内容(修改自利奥的守则):
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Latin Modern Mono Light}
\usepackage{luacode}
\usepackage[margin=18mm]{geometry}
\parindent=0pt
\usepackage{longtable,makecell}
\renewcommand\arraystretch{2}
\begin{document}
\begin{luacode}
teststring = "0123456789 ABCDEFabcdef"
tex.print(-2, os.getenv('FONTSPEC'))
tex.print('\\\\')
tex.print("\\begin{longtable}{ll}\\hline")
for i,v in ipairs(dir.glob(os.getenv('FONTSPEC'))) do
-- get rid of './' in front of filenames, fontspec don't like that
local f = string.gsub(v, "^./", "")
-- font name
local info = fontloader.info(v)
tex.print('\\makecell[l]{\\bfseries')
tex.print(-2, info.fontname) -- font name here
tex.print('\\\\[-1ex] \\scriptsize')
tex.print(-2, f) -- filename
tex.print('} & \\large\\fontspec{')
tex.print(-2, f)
tex.print('}')
tex.print(teststring)
tex.print('\\\\ \\hline')
end
tex.print("\\end{longtable}")
\end{luacode}
\end{document}
它利用环境变量FONTSPEC
来指定字体文件搜索模式,例如*.ttf
当前目录中的 TrueType 文件。请注意特克斯文件需要与字体文件和 glob 模式位于同一目录中区分大小写!
示例运行:
set FONTSPEC=*.ttf
lualatex fontsampler.ltx
结果:
答案1
我是一名上下文用户,如果我足够努力,我确信我可以在一小时内想出一个基于宏的上下文 hack 来完成你想要做的事情。正因为如此,我相信知识渊博的 lualatex 用户也可以完成类似的 hack 操作,但是...如果一个简单的脚本/批处理文件只需使用调整后的 TEXMF 或 OSFONTDIR 环境变量运行 luatex 就可以完成相同的操作,那么为什么要花时间创建复杂的 hack 操作呢?
事实上,你甚至可以在文档中动态地更改 OSFONTDIR,方法是输入类似
\directlua { os.setenv('OSFONTDIR', '<foldernamehere>') }
在文档序言中(未经测试,目前不在电脑后面)
编辑:它甚至比这更简单(至少在 ConTeXt 中)。我只是尝试了一些简单的事情,绝对路径名在 ConTeXt 中的字体规范中有效,所以这对我来说运行正常:
\starttext
\startluacode
context.starttabulate{"|p|"}
for i,v in ipairs(dir.glob('/home/taco/tmp/itc/*.otf')) do
local info = fontloader.info(v);
context.NC()
context(string.format('\\mono{%s}\\crlf %s\\crlf\\definedfont[%s]',v,info.fontname,v))
context("Sphinx of black quartz, judge my vow.")
context.NC()
context.NR()
end
context.stoptabulate()
\stopluacode
\stoptext
答案2
虽然有点晚了,但无论如何。一个简单的 LuaTeX 解决方案:
lua文件fontsampler.lua
:
function dirtree(dir)
assert(dir and dir ~= "", "directory parameter is missing or empty")
if string.sub(dir, -1) == "/" then
dir=string.sub(dir, 1, -2)
end
local function yieldtree(dir)
for entry in lfs.dir(dir) do
if not entry:match("^%.") then
entry=dir.."/"..entry
if not lfs.isdir(entry) then
coroutine.yield(entry,lfs.attributes(entry))
end
if lfs.isdir(entry) then
yieldtree(entry)
end
end
end
end
return coroutine.wrap(function() yieldtree(dir) end)
end
function fontsampler( dir )
for entry in dirtree(dir) do
if entry:match(".otf","-4") then
tex.tprint({[[\mono ]]},{-2,entry},{[[ (]]},{-2,fontloader.info(entry).fontname},{[[)\par\font\sample={file:]]},{-2,entry},{[[}\sample Sphinx of black quartz, judge my vow.\par]]})
end
end
end
以及小型驱动程序文件fontsampler.tex
:
\input luaotfload.sty
\font\mono = {file:lmmono8-regular.otf}
\parindent 0pt
\directlua{
dofile("fontsampler.lua")
fontsampler(arg[2])
}
\bye
并调用
luatex fontsampler.tex "/my/path/"
这将创建一个 PDF 文件,其中包含给定目录及下面的字体示例。