简短问题:
我怎样才能实现以下两件事:
1)获取系统上当前安装的、LaTeX 可以使用的所有字体的列表?
2)对于每种字体,渲染字母 az、AZ、0-9。
较长的问题:
基本上,我想渲染当前系统可以渲染的所有字形。因此我想:
1) 获取 LaTeX 可以使用的所有字体的列表;2) 渲染每种字体中的所有字形
我怎样才能在 LaTeX 中做到这一点?
谢谢!
编辑
我的问题第一部分的答案似乎是
updmap-sys --listmaps | wc -l
那么对于第 2 部分,我如何使用所有这些字体?
编辑3
事实证明我的问题是重复的:
答案1
创建新目录和文件:
#!/bin/bash
find `kpsewhich -expand-var='$TEXMFMAIN'`/fonts/tfm -name '*.tfm' -print | \
sed 's@.*/@@; s@\.tfm$@@' | \
xargs sh -c 'for i in "$@"; do (echo $i; echo \\\sample\\\bye) | \
pdftex testfont; mv testfont.pdf $i.pdf; echo $i.pdf; done' sh
使其可执行并运行它。它会为每种字体和形状创建大量 pdf 文件。另一个可能的解决方案是首先创建所有可用字体的列表:
find `kpsewhich -expand-var='$TEXMFMAIN'`/fonts/tfm -name '*.tfm' -print | sed 's@.*/@@; s@\.tfm$@@' > available_fonts.lst
然后运行这个 Perl 脚本,它会创建 latex 测试文件。它可以扩展为创建一个真的大文件:
#!/usr/bin/perl -w
use strict;
my $i = 0;
my $lst = {};
my $couter_fonts = 0;
my $couter_files = 0;
open(F, "available_fonts.lst");
while(<F>){
chomp;
$lst->{enc($i++)} = $_;
}
close F;
open (F, "+>lst_".$couter_files.".tex\n");
print F qq(\\documentclass{article}\n);
print F qq(\n\\begin{document}\n);
foreach(sort keys %{$lst}){
if (!(++$couter_fonts % 100)){
$couter_files ++;
$couter_fonts = 0;
print F "\\end{document}\n";
close F;
open (F, "+>lst_".$couter_files.".tex\n");
print F qq(\\documentclass{article}\n);
print F qq(\n\\begin{document}\n);
}
print F "\\newfont{\\myFont$_}{ $lst->{$_} }\n";
print F "\\myFont$_ $lst->{$_} : Sample Text \\\\ \n";
}
print F qq(\\end{document}\n);
close F;
sub enc{
my $out = "";
foreach(split //, shift){
$out .= chr($_+65);
}
return $out;
}