句子图解

句子图解

我想做一些关于句子图解的讲义。对于那些在学校不需要图解句子的人来说,我讲的是

在此处输入图片描述

它基本上是句子的分解视图,各个部分都相互关联。我会发布一些示例代码供人们评论,但我甚至不知道从哪里开始。我在tikz问题上贴了标签,但我甚至不知道这是否tikz是适合这项工作的工具。我应该从哪里开始解决这个问题?

(我确实发现这篇早期文章,但它并没有真正涉及到上面链接中的分支等。)

答案1

完全修改的答案:

可供使用的宏:

\startline[indent]绘制顶部起始线,可选缩进。

\xdiv与起跑线相交的垂直线,如 MWE 中的“puzzles”和“are”之间。

\vdiv不与下划线相交的垂直线,如 MWE 中的“锻炼”和“思想”之间。

\ddiv不与起跑线相交的对角线,如 MWE 中的“are”和“games”之间。

\diag[mode]{diag-dimen}{diagtext}{horiz-dimen}{horiz-text}放下一条垂直向下延伸的对角线diagdimen\baselineskip,将对角线文本放在其上方,然后绘制一条长度的线horiz-dimen\baselineskip并将水平文本设置在它上面(默认情况下)。如果模式设置为[d],则水平线为虚线,水平文本为下划线,就像 MWE 中的单词“yet”一样。如果模式为[b],则对角线被空白,就像 MWE 中的单词“exercising”一样。

\dropleg[mode]{dimen}{left-aligned underset} 放下高度为 的垂直支柱dimen\baselineskip,然后将最后一个参数设置到其右侧。如果mode[d],则支柱为虚线,如 MWE 中的“are”所示。

\entry{dimen}{text}{aftercode}一个自包含的下划线条目,例如 MWE 中的“and”。文本居中并带有长度为 的下划线dimen\baselineskip,后置代码在下划线的右端执行。

\tstrut{dimen}三角形形状上方有垂直支柱,如下图 MWE 中的“锻炼”所示。\tstrut物体的高度由数字 确定dimen,它是 的倍数,应该是两个相邻s\baselineskip的深度之差。\diag

\leftstep左侧搭接的阶梯状物体。


参数:

\rlwd规则宽度;(.5pt)默认。

\tlength步高和三角腿长,均低于 MWE 中的“锻炼”值;默认值为 1.7ex。


在 MWE 中,您会注意到必须在条目之间手动添加水平空间。此外,为了创建第二行,我将\dropleg下面的“and”悬空,并用于\vspace移至较低位置。\vspace( 16\baselineskip) 的参数很容易确定,因为\droplegs“and”前后的维度均为 8。\tstrut维度为 2 也很容易确定,因为“for”的维度\diag为 6,而“exercising”的维度\diag为 4,差值为 2。

\diag要在单词中间删除 a ,您有两个选择(均显示在 MWE 中):

1)在对角线周围拆分单词,例如newspa\diag{2}{in}{5}{America}pers, 或

2)将单词放置在比其实际宽度更小的框中,例如\makebox[3ex]{\textcolor{blue}{puzzles}}\diag{4.5}{crossword}{}{}

无论哪种情况,你通常都会在单词后面加上一些\hspace

由于我无法创建弯曲的弧线,因此“出现”的腿是用作为底集代码的\dropleg来完成的。\diag

\documentclass{article}
\usepackage[usestackEOL]{stackengine}
\usepackage{graphicx,xcolor}
% DASHED LINE OF SPECIFIED LENGTH
% Based on morsburg at http://tex.stackexchange.com/questions/12537/
% how-can-i-make-a-horizontal-dashed-line/12553#12553
\def\dashfill{\cleaders\hbox to .6em{\rule{1ex}{\rlwd}}\hfill}
\newcommand\dashline[1]{\hbox to #1{\dashfill\hfil}}
%%%%%
\def\rlwd{.5pt}
\def\xdiv{\smash{\rule[-.7071\baselineskip]{\rlwd}{1.5\baselineskip}}}
\def\vdiv{\smash{\rule[-.37\baselineskip]{\rlwd}{1.5\baselineskip}}}
\def\ddiv{\smash{\rotatebox{45}{%
  \rule[-.55\baselineskip]{\rlwd}{1.74\baselineskip}}}}
\newlength\tmplen
\newlength\tlength
\tlength=1.7ex\relax
\newcommand\tstrut[1]{\smash{\raisebox{-.35\baselineskip}{%
  \def\stackalignment{c}\stackon[0pt]{%
  \rotatebox{45}{\rule{\tlength}{\rlwd}}\kern-.2ex%
  \raisebox{.7071\tlength}{\rotatebox{-45}{\rule{\tlength}{\rlwd}}}%
  }{\rule{\rlwd}{\dimexpr #1\baselineskip-.7071\tlength}}}}%
}
\def\leftstep{\smash{\raisebox{\dimexpr-.3\baselineskip-\rlwd}{%
  \llap{\rule[\tlength]{\tlength}{\rlwd}\rule{\rlwd}{\tlength}%
  \rule{\tlength}{\rlwd}~~}}}%
}
\newcommand\dropleg[3][s]{\unskip\smash{%
  \stackunder[\dimexpr-\dp\strutbox-.7071pt]{%
    \if d#1%
      \raisebox{-\dp\strutbox}{\rotatebox{-90}{\dashline{#2\baselineskip}}}%
    \else%
      \rule[\dimexpr-\dp\strutbox-.7071pt-#2\baselineskip]{\rlwd}%
      {#2\baselineskip}%
    \fi}{#3}}\ignorespaces%
}
\newcommand\entry[3]{\smash{\makebox[0pt][l]{\def\stackalignment{c}%
  \stackunder[0pt]{\strut#2}{\rule{0#1\baselineskip}{\rlwd}}#3}}%
}
\newcommand\diag[5][s]{\unskip%
  \if b#1\def\dcolor{white}\else\def\dcolor{black}\fi%
  \tmplen=#2\baselineskip%
  \def\stackalignment{l}\def\useanchorwidth{F}%
  \smash{\makebox[0pt][l]{%
  \raisebox{\dimexpr-\dp\strutbox-.7071pt}{\rotatebox{-45}{%
    \stackon[0pt]{\textcolor{\dcolor}{\rule{1.414\tmplen}{\rlwd}}}{%
    \makebox[0pt][l]{\makebox[1.414\tmplen][l]{~~~~\strut#3}%
      \if d#1%
        \rotatebox{45}{%
          \smash{%
          \kern-.22\baselineskip\raisebox{-.3\baselineskip}{%
            \stackunder[0pt]{\dashline{0#4\baselineskip}}{~~\strut#5}}}%
          }%
      \else%
        \rotatebox{45}{%
          \kern-1.02\baselineskip\raisebox{.52\baselineskip}{%
          \stackon[0pt]{\rule{0#4\baselineskip}{\rlwd}}{~~\strut#5}}}%
      \fi%
    }}%
  }}}}\ignorespaces%
}
\newcommand\startline[1][0in]{\noindent\hspace{#1}%
  \rule{\dimexpr\textwidth-#1}{\rlwd}\par%
  \vspace{\dimexpr-\baselineskip-\parskip-\dp\strutbox-.7071pt}\par%
  \noindent\hspace{#1}%
}
\begin{document}
\scriptsize\startline
~
\dropleg{2}{%
\diag{5}{Appearing}{3}{
  \diag{2}{in}{6}{
    \diag{3}{most}{}{}
    newspa\diag{2}{in}{5}{America}pers
  }
}}
\hspace{1cm}
\makebox[3ex]{\textcolor{blue}{puzzles}}
\diag{4.5}{crossword}{}{}
\hspace{1.5cm}\xdiv\hspace{2cm}
\makebox[1ex]{\textcolor{red}{are}}
\dropleg[d]{8}{\entry{4}{and}{\dropleg[d]{8}{}}}
\hspace{.8cm}\ddiv\hspace{0.4cm}
\diag[d]{5}{challenging}{2.8}{yet}
\textcolor{black!50!green}{games}
\diag{5}{exciting}{}{}
\hspace{1cm}
\diag{6}{for}{7}{\tstrut{2}}
\hspace{1cm}
\diag[b]{4}{exercising}{5}{\leftstep\vdiv~mi\diag{1.5}{the}{}{}nd}

\vspace{16\baselineskip}
\startline[1in]
~\textcolor{blue}{they}
\hspace{1cm}\xdiv\hspace{1cm}
\diag{2}{}{8}{\diag{3}{literate}{}{}people\diag{3}{with}{5}{patience}}
\hspace{.6cm}
\textcolor{red}{give}
\hspace{.6cm}
\vdiv
\hspace{.6cm}
\textcolor{black!50!green}{joy}
\hspace{.6cm}
\ddiv
\hspace{.6cm}
exquisite
\end{document}

在此处输入图片描述

相关内容