随机字体,呈现手写效果

随机字体,呈现手写效果

我创建了一个带有随机化器的 Metafont 字体,这样每次编译字体时,它看起来都会不一样。使用这些字体,我喜欢在文档中创建手写部分。我想使用 10 到 20 个不同版本的字体,每个字母都会随机选择一种字体。如果没有随机字体,例如,所有的 e 看起来都会一样。

我想到三种可能的方法:

  1. 为文档中的每个新字母随机选择一种字体。
  2. 创建百种字体,每种字体都只有一个字母,并有多种变体。对于文档中的每个字母,从相应的字体中随机选择一个字母。
  3. 依次加载字体,第一个字符,第一个字体,第二个字符,第二个字体......然后从头开始第 21 个字符。

我尝试使用上述选项,但我没有足够的能力获得结果。我在 Overleaf 上使用 pdfLaTex,但如果它只适用于 LuaLaTeX 或 XeLaTex,那就太好了。

我是德国人,所以字母 ä、ö、ü、ß、Ä、Ö、Ü(作为直接输入)和 €(作为 \euro)也应该可以使用。

编辑:

我使用评论中提供的链接编写了一个程序。它们可以很好地处理普通字母,但变音符似乎不起作用。下面是一个最小的工作示例:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{datatool}
\usepackage{pgffor}
\usepackage{pgfmath}
\usepackage{pgffor}
\usepackage{pgfmath}

\def\klein{% random non capital letter
  \pgfmathrandominteger{\mytemp}{1}{26}%
  \foreach\x[count=\xi] in{a,...,z}{\ifnum\xi=\mytemp\x\breakforeach\fi}%
}

\def\gross{% random capital letter
  \pgfmathrandominteger{\mytemp}{1}{26}%
  \foreach\x[count=\xi] in{A,...,Z}{\ifnum\xi=\mytemp\x\breakforeach\fi}%
}

\newfont{\fontA}{A}     % includes A a
\newfont{\fontB}{B}     % includes B b
\newfont{\fontAE}{AE}   % includes Ä ä
\newfont{\fontOE}{OE}   % includes Ö ö
\newfont{\fontUE}{UE}   % includes Ü ü
\newfont{\fontSS}{SS}   % includes ß


\makeatletter
\newcommand{\Buchstabe}[2]{\csdef{BT#1}{{#2}}}
\newcommand{\Bs}[1]{\ifcsdef{BT\expandafter#1}{\csuse{BT#1}}{#1}}
\def\Handschrift#1{%
    \@Handschrift#1 \@empty
}
\def\@Handschrift#1 #2{%
   \zz{#1}\space  
   \ifx #2\@empty\else
    \expandafter\@Handschrift
   \fi
   #2%
}
\def\zz#1{\def\zzsep{}\zzz#1\relax}
\def\zzz#1{\ifx\relax#1\else\Bs{#1}\expandafter\zzz\fi}
\makeatother

\Buchstabe{A}{\fontA \gross}
\Buchstabe{B}{\fontB \gross}
\Buchstabe{Ä}{\fontAE \gross}
\Buchstabe{Ö}{\fontOE \gross}
\Buchstabe{Ü}{\fontUE \gross}

\Buchstabe{a}{\fontA \klein}
\Buchstabe{b}{\fontB \klein}
\Buchstabe{ä}{\fontAE \klein}
\Buchstabe{ö}{\fontOE \klein}
\Buchstabe{ü}{\fontUE \klein}
\Buchstabe{ß}{\fontSS \klein}

\begin{document}
\Handschrift{AB ab} % works fine

\Handschrift{äöüß ÄÖÜ} % Does not work

\end{document}

我也尝试在 \Handschrift{} 和 \Buchstabe{} 中使用“a”和“\”a,但出现了错误消息。

答案1

这将从已加载字体及其简称的列表中为每个字母随机选择一种字体,摘自 Overleaf。您需要用自己的列表替换此列表。

解析方法是 David Carlisle 的关于使censor包处理德语字符的这个答案(因此对 的依赖censor,我应该能够将其减少为对 的依赖ifnextok,但我目前没有时间

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{lmodern}    
\usepackage{tgtermes}   
\usepackage{tgpagella}  
\usepackage{tgbonum}    
\usepackage{tgschola}   
\usepackage{mathptmx}   
\usepackage{utopia}     
\usepackage{palatino}
\usepackage{bookman}
\usepackage{charter}
\usepackage{tgadventor}
\usepackage{tgheros}
\usepackage{helvet}
\usepackage{tgcursor}
\usepackage{courier}
\usepackage{censor}


\makeatletter


\DeclareTextFontCommand{\textrndfont}{\rndfont}
\newcommand*{\rndfont}{\pgfmathrandomitem\z{fontlist}\fontfamily{\z}\selectfont}
\pgfmathdeclarerandomlist{fontlist}{{lmr}{lmdh}{qtm}{qpl}{qbk}{qcs}{ptm}{put}{ppl}{pbk}{bch}{cmss}{lmss}{qag}{qhv}{phv}{cmtt}{lmtt}{qcr}{pcr}}

\def\stringend{$}
\def\stringend{$} %repeated to avoid confusing my editor's syntax highlighting


\long\def\randomfont#1{%
\protected@edef\tmp{#1}%
\def~{-}\expandafter\random@Block\tmp\stringend\let~\sv@tilde}
\long\def\random@Block{\IfNextToken\stringend{\@gobble}%
  {\IfNextToken\@sptoken{ \bl@t{\random@Block}}%
  {\bl@t{\random@Block}}}}

\long\def\bl@t#1#2{%
\ifx\bpar#2\let\next\par\else\def\next{\textrndfont{#2}}\fi
  \next#1}

\makeatother

\begin{document}

\randomfont{This text should be in random fonts äöüß.  It's quite long and should line wrap.  I wonder what happens if it has a double blank line in it.


Let's find out whether it starts a new paragraph at the beginning of this sentence. Yes}

\randomfont{This text should be in random fonts äöüß}\par


\end{document}

输出如下: 上述 LaTeX 代码的输出,每个字符采用不同的字体

答案2

由于你使用 MF 来生成字体,因此你可以使用 TeX 的原生连字/字符替换功能,根据上下文使用字母的替代版本,例如不同的可能会被使用,无论是否遵循或者H。它不会给你完全的随机性,因为每个实例,例如,看起来一样。

相关内容