한 언어를 다른 언어로 다이어그램 번역하는 데 도움이 되는 LaTeX 패키지

한 언어를 다른 언어로 다이어그램 번역하는 데 도움이 되는 LaTeX 패키지

저는 터키어를 배우고 있는데 TeX의 도움으로 일부 터키어 텍스트를 영어로 번역하는 작업을 하고 싶었습니다. 직업에 더 적합할 것 같아요. 내가 원하는 것을 도와주는 패키지가 있는지 또는 비슷한 것이 있는지 궁금합니다.

이상적으로는 다음을 최종 결과로 렌더링할 수 있는 패키지를 원합니다.

  home     to go 
  Eve    gidiyorum 
    -      -`----' 
    |      |  | 
    |      |  `- present progressive tense (first person - singular) 
    |      `- git->gid (t->d) sound change ending 
    `- dative case ending for gitmek 

  I want to go home 

두 번째 예:

   home     to go 
  Eveniz  gidiyoruz 
    -`-'    -`----' 
    | |     |  | 
    | |     |  `- present progressive tense (first person - plural) 
    | |     `- git->gid (t->d) sound change ending 
    | `- possessive suffix (second person - plural) 
    `- dative case ending for gitmek 

We are going to your home 

세 번째 예:

German  class  to buy; to get;    to continue 
               to take, receive 
Almanca dersi       almaya       devam ediyorum 
            -         `--'              -`----' 
            |          |                |  | 
            |          |                |  `- present progressive 
            |          |                |     tense (first person - 
            |          |                |     singular) 
            |          |                `- devam et->devam ed (t->d) 
            |          |                   sound change ending 
            |          `- verbal noun -mA, dative for devam etmek 
            `- accusative case ending for almak 

   I want to continue taking German class

"-"와 "`--'"는 수평 중괄호입니다.

답변1

이 답변은 중첩 스택을 사용하여 결과를 얻습니다. 최상위 단어 스택을 설정하는데 사용하는 패키지 \Longstack의 매크로 외에 매크로 하나를 추가로 소개합니다.stackengine

그 매크로는 \notate{embraced letters}{lines to drop}{notation}. 이 구문에서 "표기법"은 한 줄이지만 \parbox[t]이를 극복할 수 있습니다. 모든 표기법이 적합하도록 "삭제할 줄"은 사용자가 계산/계산해야 합니다. 나는 현재 표시 가 있는 모든 줄의 뒤를 기억하지 않기 위해 선행 \unskip및 후행을 사용 하지만 나중에 문제가 있는 것으로 판명되면 매크로 정의에서 제거할 수 있습니다.\ignorespaces%

해결이 필요한 흥미로운 문제. \upbracefill단일 문자보다 큰 최소 너비가 있고 OP에는 단일 문자에 언더 브레이스가 필요한 경우가 분명히 있었기 때문에 언더 브레이싱에 사용할 수 없었습니다 . 그래서 패키지를 사용하여 scalerela를 적절한 높이로 늘리고 \{옆으로 회전시켜 해당 높이를 너비로 변환했습니다.

tikz또한 표기법 화살표에서 팔꿈치를 돌리는 데 필요한 트릭이 없으므로 \hookrightarrow시각적으로 효과가 있는 것을 얻기 위해 커닝을 사용했습니다(희망합니다).

편집하다. 표기법을 더 작은 크기로 설정하면 가독성이 향상될 수 있습니다. 예를 들어 여기에서는 \footnotesize.

\documentclass{article}
\usepackage[usestackEOL]{stackengine}
\usepackage{scalerel}
\usepackage{graphicx}
\parskip \baselineskip
\def\myupbracefill#1{\rotatebox{90}{\stretchto{\{}{#1}}}
\def\rlwd{.5pt}
\newcommand\notate[3]{%
  \unskip\def\useanchorwidth{T}%
  \setbox0=\hbox{#1}%
  \def\stackalignment{c}\stackunder[-6pt]{%
    \def\stackalignment{c}\stackunder[-1.5pt]{%
      \stackunder[-2pt]{\strut #1}{\myupbracefill{\wd0}}}{%
    \rule{\rlwd}{#2\baselineskip}}}{%
  \strut\kern7pt$\hookrightarrow$\rlap{ \footnotesize#3}}\ignorespaces%
}
\begin{document}
\hrulefill

  \Longstack{home\\Ev
   \notate{e}{4}{dative case ending for gitmek}
  }
~~\Longstack{to go\\gi
   \notate{d}{3}{git$\rightarrow$gid (t$\rightarrow$d) sound change ending}
   \notate{iyorum}{2}{present progressive tense (first person - singular)}
  }

I want to go home \par\hrulefill

  \Longstack{German\\ \\Almanca}
~~\Longstack{class\\ \\ders
   \notate{i}{8}{accusative case ending for almak}}
~~\Longstack{to buy; to get;\\to take; receive\\al
   \notate{maya}{7}{verbal noun -mA, dative for devam etmek}}
~~\Longstack{to continue\\ \\devam e
   \notate{d}{5}{%
     \parbox[t]{2in}{devam et$\rightarrow$devam ed (t$\rightarrow$d)\\
                     sound change ending}
   }
   \notate{iyorum}{2}{%
     \parbox[t]{2in}{present progressive\\
                     tense (first person -\\
                     singular)}
   }
  }

I want to continue taking German class \par\hrulefill
\end{document}

여기에 이미지 설명을 입력하세요

관련 정보