Ctags: TeX: [ํ–ฅ์ƒ] ๋น„๋จธ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์šฉ LaTeX์šฉ ํŒจ์น˜

์— ๋งŒ๋“  2020๋…„ 02์›” 12์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: universal-ctags/ctags

์ด ๊ฒŒ์‹œ๋ฌผ https://sourceforge.net/p/ctags/patches/76/ ์™€ ๊ฐ™์€ ์œ ์‚ฌํ•œ ํŒจ์น˜๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ LaTeX ๋น„๋จธ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์ด ์„น์…˜ ๋Œ€์‹  ์Šฌ๋ผ์ด๋“œ๋ณ„๋กœ ์ •๋ ฌ๋˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

Parser buenhancement

๋ชจ๋“  9 ๋Œ“๊ธ€

์ด ๋ฌธ์ œ๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ์ž…๋ ฅ์ด ์žˆ์Šต๋‹ˆ๊นŒ?
์šฐ๋ฆฌ ์ €์žฅ์†Œ์— ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋กœ ํฌํ•จ์‹œํ‚ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

https://github.com/strace/strace-talks/blob/master/2019-ossdevconf-kaluga-linux_design_flaw_story/ossdevconf_2019-slides-linux_design_flaw_story.tex

์ข‹์€ ์˜ˆ์ด์ง€๋งŒ \frametitle ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
\begin{frame}{AN ITEM WE WOULD LIKE TO TAG} ํ•ฉ๋‹ˆ๋‹ค.

\frametitle ์บก์ฒ˜ ๊ธฐ๋Šฅ์„ ์ด๋ฏธ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ \begin{frame}{...} ๋Š” ์•„์ง ์—†์Šต๋‹ˆ๋‹ค.

์ด๊ฑฐ ์จ๋„ ๋  ๊ฒƒ ๊ฐ™์€๋ฐ ์ œ๋ชฉ์„ \frametitle ํ‚ค์›Œ๋“œ๋กœ ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค
https://github.com/jagjordi/IL2239-presentation

์—ฌ์ „ํžˆ ๊ณ ๊ตฐ๋ถ„ํˆฌ ์ค‘์ž…๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ๋„์šธ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

#2424๋ฅผ ์‹œ๋„ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š” @masatake
๋น„๋จธ ํ”„๋ ˆ์  ํ…Œ์ด์…˜์—์„œ ํŒŒ์„œ์˜ ๋™์ž‘์„ ์ˆ˜์ •ํ•˜๋ผ๋Š” ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ์Šฌ๋ผ์ด๋“œ๋ฅผ ๋ฐฐ์—ดํ•˜๋ฉด

Frame 1
|-- Subframe 1.1
|-- Subframe 1.2
|-- Subframe 1.3

Frame 2
|-- Subframe 2.1
|-- Subframe 2.2

์ผ๋ฐ˜์ ์œผ๋กœ "ํ•˜์œ„ ์Šฌ๋ผ์ด๋“œ"๊ฐ€ ์žˆ๋Š” ๋งŒํผ ๋™์ผํ•œ ์ œ๋ชฉ์ด ๋ฐ˜๋ณต๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด

\frametitle{Frame1}
\framesubtitle{Subframe1.1}

\frametitle{Frame1}
\framesubtitle{Subframe1.2}

\frametitle{Frame1}
\framesubtitle{Subframe1.3}

\frametitle{Frame2}
\framesubtitle{Subframe2.1}

\frametitle{Frame2}
\framesubtitle{Subframe2.2}

ํŒŒ์„œ์˜ ํ˜„์žฌ ๋™์ž‘์œผ๋กœ frametitle ๋ช…๋ น์ด ์‚ฌ์šฉ๋  ๋•Œ๋งˆ๋‹ค ํƒœ๊ทธ ํ•ญ๋ชฉ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ช…๋ น์ด ์‚ฌ์šฉ๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ๊ธธ๋“ค์ธ ํƒœ๊ทธ ํ•ญ๋ชฉ๋งŒ ์ƒ์„ฑํ•˜๊ณ  ๋ช…๋ น์˜ ํ›„์† ์‚ฌ์šฉ(๋™์ผํ•œ ์ œ๋ชฉ ์ด๋ฆ„์œผ๋กœ)์ด ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์„ "๊ฐ€๋ฆฌํ‚ค๋Š”" ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹น์‹ ์ด ๋ฌด์Šจ ์ƒ๊ฐ์„ํ•˜๋Š”์ง€ ์ œ๊ฒŒ ์•Œ๋ ค์ฃผ์„ธ์š”?

๋ฌธ์•ˆ ์ธ์‚ฌ,

https://github.com/universal-ctags/ctags/pull/2450 ์„ ๋ณ‘ํ•ฉํ•œ ํ›„ ์ด ํ•ญ๋ชฉ์„ ์ž‘์—…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค
์ƒ๊ฐ๋ณด๋‹ค ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

#2450์—์„œ๋Š” ์‹ฌ๋ณผ ํ…Œ์ด๋ธ”์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

tagEntryInfo *tag = lookupTag ("Frame1");
if (! (tag && kinfOf(tag) == "frametitle"))
   skip();
else /* a frame title we have never seen. */
   makeTag ();

์ž˜ ๋“ค๋ฆฐ๋‹ค. ํ…Œ์ŠคํŠธํ•ด์•ผ ํ•  ๊ฒƒ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค ๐Ÿ‘

๋ถ€๋ถ„์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
์กฐ๊ธˆ ๋” ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

[yamato@slave]~/var/ctags-github% cat /tmp/input.tex 
cat /tmp/input.tex 
\frametitle{Frame1}
\framesubtitle{Subframe1.1}

\frametitle{Frame1}
\framesubtitle{Subframe1.2}

\frametitle{Frame1}
\framesubtitle{Subframe1.3}

\frametitle{Frame2}
\framesubtitle{Subframe2.1}

\frametitle{Frame2}
\framesubtitle{Subframe2.2}
[yamato@slave]~/var/ctags-github% ./ctags --sort=no -o - /tmp/input.tex 
./ctags --sort=no -o - /tmp/input.tex 
Frame1  /tmp/input.tex  /^\\frametitle{Frame1}$/;"  f   language:TeXBeamer
Subframe1.1 /tmp/input.tex  /^\\framesubtitle{Subframe1.1}$/;"  g   language:TeXBeamer  frametitle:Frame1
Subframe1.2 /tmp/input.tex  /^\\framesubtitle{Subframe1.2}$/;"  g   language:TeXBeamer  frametitle:Frame1
Subframe1.3 /tmp/input.tex  /^\\framesubtitle{Subframe1.3}$/;"  g   language:TeXBeamer  frametitle:Frame1
Frame2  /tmp/input.tex  /^\\frametitle{Frame2}$/;"  f   language:TeXBeamer
Subframe2.1 /tmp/input.tex  /^\\framesubtitle{Subframe2.1}$/;"  g   language:TeXBeamer  frametitle:Frame2
Subframe2.2 /tmp/input.tex  /^\\framesubtitle{Subframe2.2}$/;"  g   language:TeXBeamer  frametitle:Frame2
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰