如何在表格上书写?

如何在表格上书写?

我想做一个汉字网格练习汉字,例如这个:http://www.hanzigrids.com/version/1328584298/example-pdfs/hanzigrids-yingbikaishu.pdf

我能够用芳基化物包,像这样:

\begin{tabular}{|c:c|c:c|c:c|c:c|}
  \hline
  & & & & & & & \\
  \hdashline
  & & & & & & & \\
  \hline
  & & & & & & & \\
  \hdashline
  & & & & & & & \\
  \hline
\end{tabular}

但是我怎样才能把这些字符写在桌子上呢?

答案1

这个答案的灵感来自于[电子邮件保护]

当我昨天看到你的问题时,我想到三种可能的解决方案。它们是:

  • 选择字符具有米字格(米字格)的字体。
  • 使用LaTeX表格绘制这些网格,然后在其中填充中文字符。
  • 获取每个汉字的位置和大小,然后使用 Ti 绘制网格Z。

第一种可能的解决方案很直接,但缺乏可移植性,而第二种如果想自动换行(也包括分页)则不是一个好的选择。因此,最后一个似乎是唯一的选择。

包装soul说明书中所有可能的连字符后面的内容(见这里),可以帮助我们找到换行点。但是,这个包soul有时很脆弱,因为它无法与xeCJK重要的中文支持包很好地兼容。

[电子邮件保护]帮助我补充已经偏离的轨迹。

测试.tex源文件中的每个字符,xeCJK可以确定特定字符是否是 CJK(中文、日文和韩文)字符。因此,我们现在能够获得每个中文字符的位置。

输出

我们先看一下输出。

在此处输入图片描述

要求

  • 编码:UTF-8
  • 引擎:XeTeX(使用 启动命令行xelatex
  • 软件包:xeCJK(高于 v3.2.8,2013/12/05),ctex
  • 字体:Adobe Chinese-simp字体(点击这里开始自动下载,这四种字体都是免费的,不用担心版权问题)

代码

%!TEX program = xelatex
\documentclass[UTF8, adobefonts]{ctexart}

\usepackage{tikz}
\usepackage{xcolor}
\usepackage{geometry}
\geometry{margin = 2.1cm, papersize = {16cm, 13cm}}
\pagestyle{empty}
\linespread{0.833333}

\makeatletter
\ExplSyntaxOn
\box_new:N \l_@@_grid_box % l means local
\coffin_new:N \l_@@_grid_coffin
\coffin_new:N \l_@@_charater_coffin
\int_const:Nn \c_@@_test_char { "4E00 }
\cs_new_protected_nopar:Npn \@@_update_grid_box:
  {
    \hbox_set:Nn \l_@@_grid_box
      { \XeTeXuseglyphmetrics = \c_zero \c_@@_test_char }
    \use:x
      {
        \@@_update_grid_box:nnn
          { \dim_use:N \box_wd:N \l_@@_grid_box } % width
          { \dim_use:N \box_ht:N \l_@@_grid_box } % height
          { \dim_use:N \box_dp:N \l_@@_grid_box } % depth
      }
    \coffin_attach:NnnNnnnn
      \l_@@_charater_coffin { hc } { vc }
      \l_@@_grid_coffin     { hc } { vc }
      { \c_zero_dim } { \c_zero_dim }
    \hbox_set:Nn \l_@@_grid_box
      {
        \coffin_typeset:Nnnnn \l_@@_charater_coffin
          { H } { l } { \c_zero_dim } { \c_zero_dim }
      }
    \box_set_wd:Nn \l_@@_grid_box { \c_zero_dim }
    \box_set_ht:Nn \l_@@_grid_box { \c_zero_dim }
    \box_set_dp:Nn \l_@@_grid_box { \c_zero_dim }
  }
\cs_new_protected_nopar:Npn \@@_update_grid_box:nnn #1#2#3
  {
    \hbox_set:Nn \l_@@_grid_box { }
    \box_set_wd:Nn \l_@@_grid_box {#1}
    \box_set_ht:Nn \l_@@_grid_box {#2}
    \box_set_dp:Nn \l_@@_grid_box {#3}
    \hcoffin_set:Nn \l_@@_charater_coffin { \box_use:N \l_@@_grid_box }
    \@@_draw_grid:nn {#1} { (#2) + (#3) }
  }
\cs_new_protected_nopar:Npn \@@_draw_grid:nn #1#2
  {
    \use:x
      {
        \@@_draw_grid:nnnn { \dim_eval:n {#1} } { \dim_eval:n {#2} }
          { \dim_eval:n { (#1) / 2 } } { \dim_eval:n { (#2) / 2 } }
      }
  }
\cs_new_protected_nopar:Npn \@@_draw_grid:nnnn #1#2#3#4
  {
    \hcoffin_set:Nn \l_@@_grid_coffin
      {
        \begin{tikzpicture}
          \draw[help~lines] (0,#4) -- (#1,#4) (#3,0) -- (#3,#2);
          \draw[help~lines,dashed] (0,0) -- (#1,#2) (0,#2) -- (#1,0);
          \draw[help~lines, red, thick] (0,0) rectangle (#1,#2);
        \end{tikzpicture}
      }
  }
\cs_new_protected_nopar:Npn \@@_grid_CJKsymbol:n
  { \box_use:N \l_@@_grid_box \@@_grid_CJKsymbol:n }
\cs_new_protected_nopar:Npn \@@_grid_CJKpunctsymbol:n
  { \box_use:N \l_@@_grid_box \@@_grid_CJKpunctsymbol:n }
\keys_define:nn { @@ }
  {
    format .tl_set:N  = \l_@@_formal_tl ,
    format .initial:n = { \normalfont }
  }
\cs_new_protected:Npn \@@_active_grid:n #1
  {
    \xeCJKsetup{PunctStyle=plain,CJKglue=\allowbreak,AllowBreakBetweenPuncts}
    \keys_set:nn { @@ } {#1}
    \tl_use:N \l_@@_formal_tl
    \@@_update_grid_box:
    \xeCJK_swap_cs:NN \CJKsymbol \@@_grid_CJKsymbol:n
    \xeCJK_swap_cs:NN \CJKpunctsymbol \@@_grid_CJKpunctsymbol:n
    \__xeCJK_add_to_shipout:n
      {
        \xeCJK_swap_cs:NN \CJKsymbol \@@_grid_CJKsymbol:n
        \xeCJK_swap_cs:NN \CJKpunctsymbol \@@_grid_CJKpunctsymbol:n
      }
  }
\NewDocumentCommand \CJKgrid { +O { } +m }
  { \group_begin: \@@_active_grid:n {#1} #2 \relax \group_end: }
\NewDocumentEnvironment { CJKGrid } { +O { } }
  { \@@_active_grid:n {#1} } { \par }
\ExplSyntaxOff

\begin{document}
\setlength{\parindent}{0pt}


\zihao{0}
\CJKgrid{\kaishu 我\color{gray!20}我我我我我我\color{white}我}

\CJKgrid{\kaishu 喜\color{gray!20}喜喜喜喜喜喜\color{white}喜}

\CJKgrid{\kaishu 歡\color{gray!20}歡歡歡歡歡歡\color{white}歡}

\CJKgrid{\kaishu 寫\color{gray!20}寫寫寫寫寫寫\color{white}寫}

\CJKgrid{\kaishu 漢\color{gray!20}漢漢漢漢漢漢\color{white}漢}

\CJKgrid{\kaishu 字\color{gray!20}字字字字字字\color{white}字}


\end{document}

编辑

Adobe 字体其实不是必需的,因为这里用它们来显示。可以用 替换选项adobefontsnofonts然后通过 提供的控制序列重置字体xeCJK(有关详细信息,请参阅其文档)。

相关内容