Latex3: "νŒ¨ν‚€μ§€" λ©”μ‹œμ§€λΌκ³  μ£Όμž₯λ˜λŠ” 클래슀 λ©”μ‹œμ§€

에 λ§Œλ“  2021λ…„ 04μ›” 26일  Β·  14μ½”λ©˜νŠΈ  Β·  좜처: latex3/latex3

λ‹€μŒ MCEμ—μ„œ λ³Ό 수 μžˆλ“―μ΄ 클래슀 λ©”μ‹œμ§€λŠ” "νŒ¨ν‚€μ§€" λ©”μ‹œμ§€λΌκ³  μ£Όμž₯λ©λ‹ˆλ‹€.

\begin{filecontents*}[overwrite]{myclass.cls}
\ProvidesExplClass
  {myclass}
  {2021/04/26}
  {0.1}
  {
    My Nice Class
  }
\NeedsTeXFormat{LaTeX2e}
\LoadClass { article }
%
\msg_new:nnn {myclass} {Foo} {Bar}
\msg_warning:nn {myclass} {Foo}
\end{filecontents*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{myclass}
\begin{document}
\end{document}

μ”λ‹ˆλ‹€:

νŒ¨ν‚€μ§€ myclass κ²½κ³ : λ°”

l3msg λͺ¨λ“ˆμ€ \ProvidesExplClass 와 \ProvidesExplPackage λ₯Ό ꡬ별할 수 μžˆμ–΄μ•Ό ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?

documentation feature-request

λͺ¨λ“  14 λŒ“κΈ€

ν•˜μ§€λ§Œ \g_msg_module_type_prop 파일 μœ ν˜•μ„ μΆ”κ°€ν•˜μ—¬ λͺ…μ‹œμ μœΌλ‘œ μ•Œλ €μ•Ό ν•©λ‹ˆλ‹€.

\prop_gput:Nnn \g_msg_module_type_prop { myclass } { Class }

μ„ νƒμ μœΌλ‘œ 이름을 \g_msg_module_name_prop .

\prop_gput:Nnn \g_msg_module_name_prop { myclass } { My~Nice~Class }

그러면 λ‹€μŒκ³Ό 같은 κ²½κ³ κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

Class My Nice Class Warning: Bar

μ–΄μ©Œλ©΄ l3msg 수 μžλ™ μ±„μš°κΈ° 경우 μœ ν˜•μ„ \ProvidesExpl<Thing> μ‚¬μš©λ˜μ—ˆλ‹€ ...


MWE:

\begin{filecontents*}[overwrite]{myclass.cls}
\ProvidesExplClass
  {myclass}
  {2021/04/26}
  {0.1}
  {
    My Nice Class
  }
\NeedsTeXFormat{LaTeX2e}
\LoadClass { article }
%
\prop_gput:Nnn \g_msg_module_type_prop { myclass } { Class }
\prop_gput:Nnn \g_msg_module_name_prop { myclass } { My~Nice~Class }
\msg_new:nnn {myclass} {Foo} {Bar}
\msg_warning:nn {myclass} {Foo}
\end{filecontents*}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{myclass}
\begin{document}
\end{document}

\ProvidesExpl<Thing> κ°€ μ‚¬μš©λœ 경우 l3msg 이 μœ ν˜•μ„ μžλ™μœΌλ‘œ μ±„μšΈ 수 μžˆμŠ΅λ‹ˆλ‹€...

쒋은 것! :웃닀:

\ProvidesExpl... 와 μ½”λ“œμ— μ‚¬μš©λ˜λŠ” λͺ¨λ“ˆ 접두사 μ‚¬μ΄μ—λŠ” νŠΉλ³„ν•œ 관계가 μ—†μŠ΅λ‹ˆλ‹€. μˆ˜λ™μœΌλ‘œ ν•΄μ•Ό ν•˜λŠ” 일이라고 μƒκ°ν•©λ‹ˆλ‹€.

그것은 전체 'μ‹€μ œλ‘œ ν΄λž˜μŠ€λŠ” expl3 ꡬ문을 μ‚¬μš©ν•΄μ„œλŠ” μ•ˆ λœλ‹€'λΌλŠ” λ¬Έμ œκ°€ 있기 μ „μž…λ‹ˆλ‹€. 그것은 μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” μ•„μ΄λ””μ–΄μ˜€μŠ΅λ‹ˆλ‹€. (ν΄λž˜μŠ€λŠ” μ—¬μ „νžˆ 더 λ§Žμ€ μž‘μ—…μ΄ ν•„μš”ν•˜μ§€λ§Œ νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°μ„ ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.)

\ProvidesExpl... 와 μ½”λ“œμ— μ‚¬μš©λ˜λŠ” λͺ¨λ“ˆ 접두사 μ‚¬μ΄μ—λŠ” νŠΉλ³„ν•œ 관계가 μ—†μŠ΅λ‹ˆλ‹€. μˆ˜λ™μœΌλ‘œ ν•΄μ•Ό ν•˜λŠ” 일이라고 μƒκ°ν•©λ‹ˆλ‹€.

μ™œ κ·ΈλŸ°μ§€ λͺ¨λ₯΄κ² λ‹€.

그것은 전체 'μ‹€μ œλ‘œ ν΄λž˜μŠ€λŠ” expl3 ꡬ문을 μ‚¬μš©ν•΄μ„œλŠ” μ•ˆ λœλ‹€'λΌλŠ” λ¬Έμ œκ°€ 있기 μ „μž…λ‹ˆλ‹€. 그것은 μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” μ•„μ΄λ””μ–΄μ˜€μŠ΅λ‹ˆλ‹€. (ν΄λž˜μŠ€λŠ” μ—¬μ „νžˆ 더 λ§Žμ€ μž‘μ—…μ΄ ν•„μš”ν•˜μ§€λ§Œ νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°μ„ ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.)

λ‚˜λŠ” 잘 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 아이디어가 무엇인지 μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

\ProvidesExpl... 와 μ½”λ“œμ— μ‚¬μš©λ˜λŠ” λͺ¨λ“ˆ 접두사 μ‚¬μ΄μ—λŠ” νŠΉλ³„ν•œ 관계가 μ—†μŠ΅λ‹ˆλ‹€. μˆ˜λ™μœΌλ‘œ ν•΄μ•Ό ν•˜λŠ” 일이라고 μƒκ°ν•©λ‹ˆλ‹€.

μ™œ κ·ΈλŸ°μ§€ λͺ¨λ₯΄κ² λ‹€.

\ProvidesExplClass μ—μ„œ 클래슀 이름은 μ½”λ“œμ—μ„œ μ‚¬μš©ν•˜λŠ” 접두사와 μΌμΉ˜ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. λ˜λŠ” μ½”λ“œλŠ” νŒ¨ν‚€μ§€μ™€ 클래슀 λͺ¨λ‘μ—μ„œ μ‚¬μš©ν•  수 μžˆμœΌλ―€λ‘œ( achemso LaTeX2e μš©μ–΄λ‘œ μ‚¬μš©) 링크가 λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

그것은 전체 'μ‹€μ œλ‘œ ν΄λž˜μŠ€λŠ” expl3 ꡬ문을 μ‚¬μš©ν•΄μ„œλŠ” μ•ˆ λœλ‹€'λΌλŠ” λ¬Έμ œκ°€ 있기 μ „μž…λ‹ˆλ‹€. 그것은 μ œλŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” μ•„μ΄λ””μ–΄μ˜€μŠ΅λ‹ˆλ‹€. (ν΄λž˜μŠ€λŠ” μ—¬μ „νžˆ 더 λ§Žμ€ μž‘μ—…μ΄ ν•„μš”ν•˜μ§€λ§Œ νŒ¨ν‚€μ§€μ— μ†ν•˜λŠ” ν”„λ‘œκ·Έλž˜λ°μ„ ν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€.)

λ‚˜λŠ” 잘 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 아이디어가 무엇인지 μ΄ν•΄ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

ν΄λž˜μŠ€λŠ” κΈ°λŠ₯이 μ•„λ‹ˆλΌ ν˜•μ‹ν™”/μŠ€νƒ€μΌ/등에 κ΄€ν•œ 것이어야 ν•©λ‹ˆλ‹€. ν›„μžλŠ” νŒ¨ν‚€μ§€μ— μ˜ν•΄ μΆ”κ°€λ˜μ–΄μ•Ό ν•˜λ©° μ΄μƒμ μœΌλ‘œλŠ” νŒ¨ν‚€μ§€μ™€ ν•¨κ»˜ μ‚¬μš©λ˜λŠ” ν΄λž˜μŠ€μ™€ λ…λ¦½μ μž…λ‹ˆλ‹€. ν˜„μž¬ 상황은 이상적이지 μ•ŠμœΌλ©° μ΄ˆκΈ°μ— \ProvidesExpl... μ„ΈνŠΈκ°€ LaTeX2e μ»€λ„μ—μ„œ \Provides... λ₯Ό λ‹¨μˆœνžˆ λ―ΈλŸ¬λ§ν•˜κΈ° μœ„ν•΄ μ œκ³΅λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 돌이켜 보면 잘λͺ»λœ μ ‘κ·Ό λ°©μ‹μž…λ‹ˆλ‹€. _packages_λŠ” expl3 μ½”λ“œλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•˜κ³  _classes_λŠ” expl3 μ—μ„œ κ΅¬ν˜„λ  _μˆ˜λ„ μžˆλŠ” λ¬Έμ„œ μˆ˜μ€€ λ˜λŠ” λ””μžμΈ μˆ˜μ€€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€.

ν΄λž˜μŠ€λŠ” κΈ°λŠ₯이 μ•„λ‹ˆλΌ ν˜•μ‹ν™”/μŠ€νƒ€μΌ/등에 κ΄€ν•œ 것이어야 ν•©λ‹ˆλ‹€.

λ‚΄κ°€ ν˜„μž¬ μž‘μ—…ν•˜κ³  μžˆλŠ” ν΄λž˜μŠ€λŠ” λ¬Έμ„œμ˜ 첫 번째 νŽ˜μ΄μ§€μ— κ·Έλž˜ν”½μ„ μ‚½μž…ν•΄μ•Ό ν•©λ‹ˆλ‹€... 이 κ·Έλž˜ν”½μ΄ 발견되고 그렇지 μ•ŠμœΌλ©΄ κ²½κ³ (둜그 파일의 경고와 ν•¨κ»˜)λ₯Ό ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. λ””μžμΈμΈκ°€ κΈ°λŠ₯인가?

l3msg λ¬Έμ„œμ˜ μ•žλΆ€λΆ„μ—μ„œ \g_msg_module_name_prop 및 \g_msg_module_type_prop λ¬Έμ„œλ₯Ό μ΄λ™ν•˜μ—¬ λ‹Ήλ©΄ν•œ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

@dbitouze λ””μžμΈ λŒ€ μ½”λ“œμ— λŒ€ν•΄ 쒋은 μ§ˆλ¬Έμ„ ν•˜κ³ 

l3msg λ¬Έμ„œμ˜ μ•žλΆ€λΆ„μ—μ„œ \g_msg_module_name_prop 및 \g_msg_module_type_prop λ¬Έμ„œλ₯Ό μ΄λ™ν•˜μ—¬ λ‹Ήλ©΄ν•œ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

AFAICS, OP의 MCEλŠ” μ—¬μ „νžˆ λ‹€μŒκ³Ό 같이 μ”λ‹ˆλ‹€.

νŒ¨ν‚€μ§€ myclass κ²½κ³ : λ°”

심지어 pdflatex-dev . λ‹€μŒμ€ ν„°λ―Έλ„μ˜ 좜λ ₯(파일 λͺ©λ‘ 포함)μž…λ‹ˆλ‹€.

This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2021) (preloaded format=pdflatex-dev)
 restricted \write18 enabled.
entering extended mode
(./test.tex
LaTeX2e <2021-12-01> pre-release-0 (develop 2021-6-6 branch)
L3 programming layer <2021-06-01>

LaTeX Warning: Writing or overwriting file `./myclass.cls'.


(./myclass.cls
Document Class: myclass 2021/04/26 v0.1  My Nice Class 
(/usr/local/texlive/2021/texmf-dist/tex/latex-dev/base/article.cls
Document Class: article 2021/02/12 v1.4n Standard LaTeX document class
(/usr/local/texlive/2021/texmf-dist/tex/latex-dev/base/size10.clo))

Package myclass Warning: Bar

) (/usr/local/texlive/2021/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def)
 (./test.aux) (./test.aux)

 *File List*
 myclass.cls    2021/04/26 v0.1  My Nice Class 
 article.cls    2021/02/12 v1.4n Standard LaTeX document class
  size10.clo    2021/02/12 v1.4n Standard LaTeX file (size option)
l3backend-pdftex.def    2021-05-07 L3 backend support: PDF output (pdfTeX)
 ***********

 )
No pages of output.
Transcript written on test.log.

@dbitouze μ‹ μ²­

\prop_gput:Nnn \g_msg_module_type_prop { myclass } { Class }

Bruno의 λ©”μ‹œμ§€μ—μ„œ "μˆ˜μ •λ¨"은 λ¬Έμ„œλ₯Ό 더 일찍 μ΄λ™ν•˜μ—¬ ν•΄λ‹Ή 라인이 더 이상 ν•„μš”ν•˜μ§€ μ•Šλ‹€λŠ” 것이 μ•„λ‹ˆλΌ μΆ”κ°€ν•΄μ•Ό ν•œλ‹€λŠ” 것을 λΆ„λͺ…νžˆ ν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

@dbitouze μ‹ μ²­

\prop_gput:Nnn \g_msg_module_type_prop { myclass } { Class }

흠, μ•„λ‹ˆ, μ˜€ν•΄ν•΄μ„œ μ£„μ†‘ν•©λ‹ˆλ‹€.

Bruno의 λ©”μ‹œμ§€μ—μ„œ "μˆ˜μ •λ¨"은 λ¬Έμ„œλ₯Ό 더 일찍 μ΄λ™ν•˜μ—¬ ν•΄λ‹Ή 라인이 더 이상 ν•„μš”ν•˜μ§€ μ•Šλ‹€λŠ” 것이 μ•„λ‹ˆλΌ μΆ”κ°€ν•΄μ•Ό ν•œλ‹€λŠ” 것을 λΆ„λͺ…νžˆ ν•˜λŠ” κ²ƒμ΄μ—ˆμŠ΅λ‹ˆλ‹€.

λ„ˆλ¬΄ λ‚˜μ¨: μˆ˜μ •μ΄ 더 이상 μˆ˜μ—… μž‘μ„±μžμ˜ μ‘°μΉ˜κ°€ ν•„μš”ν•˜μ§€ μ•Šλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€(그리고 ν¬λ§ν–ˆμŠ΅λ‹ˆλ‹€).

@josephwrightκ°€ μ„€λͺ…ν–ˆλ“―이 μ‚¬μš©λœ 접두사와 클래슀 λ˜λŠ” νŒ¨ν‚€μ§€ 이름 μ‚¬μ΄μ—λŠ” μžλ™μœΌλ‘œ 감지 κ°€λŠ₯ν•œ 연결이 μ—†μŠ΅λ‹ˆλ‹€. 이것은 \ClassWarning λ₯Ό λͺ…μ‹œμ μœΌλ‘œ λ§ν•œ λ‹€μŒ 이름을 μ§€μ •ν•˜λŠ” μ΄μ „μ˜ 2 방법과 μ‹€μ œλ‘œ λ‹€λ₯΄μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이제 연결을 ν•œ 번만 μ •μ˜ν•˜λ©΄ λ©λ‹ˆλ‹€. \Class... λͺ…령을 μ‹€ν–‰ ν•˜κ³  클래슀 이름을 μ§€μ •ν•©λ‹ˆλ‹€.

λ”°λΌμ„œ "myclass"λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 msg μ‹œμŠ€ν…œμ— μ „λ‹¬λœ λ¬Έμžμ—΄μΌ 뿐이고 우리 인간은 μ΄λ¦„μ—μ„œ "class"λ₯Ό λ³΄λŠ” 것이 msg μ‹œμŠ€ν…œμ΄ ν•΄λ‹Ή 좔둠을 ν•  수 μ—†λŠ” ν΄λž˜μŠ€λΌλŠ” 것을 μ˜λ―Έν•œλ‹€κ³  생각할 수 μžˆμ§€λ§Œ(μ–΄μ¨Œλ“  틀릴 수 있음). 이것이 클래슀 μž‘μ„±μžμ˜ μ‘°μΉ˜κ°€ ν•„μš”ν•œ 이유이며 과거에 \ClassWarning{<classname>} λ₯Ό μž‘μ„±ν•œ κ³³μ—μ„œ ν•„μš”ν–ˆμŠ΅λ‹ˆλ‹€. 클래슀 이름이 \ProvidesExplClass 둜 μ•Œλ €μ Έ μžˆλ‹€κ³  ν•΄μ„œ msg에 μ‚¬μš©λœ λ¬Έμžμ—΄μ΄ ν•΄λ‹Ή 이름을 μ‚¬μš©ν•œλ‹€λŠ” μ˜λ―ΈλŠ” μ•„λ‹™λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ λŒ€λΆ€λΆ„μ˜ νŒ¨ν‚€μ§€ 이름은 κΈΈμ§€λ§Œ λ‚΄κ°€ μ‚¬μš©ν•˜λŠ” μ ‘λ‘μ‚¬λŠ” μƒλ‹Ήνžˆ μ§§μŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ νŠΉμ • λ¬Έμžμ—΄μ΄ ν΄λž˜μŠ€μž„μ„ msg μ‹œμŠ€ν…œμ— μ•Œλ €μ•Ό ν•©λ‹ˆλ‹€.

\ProvidesExplClassκ°€ 호좜되고
\g_msg_module_type_prop이 μ‹œμž‘κ³Ό 끝 사이에 μˆ˜μ •λ˜μ§€ μ•Šμ•˜μŠ΅λ‹ˆλ‹€.
파일(\msg_new:nnnn이 호좜된 κ²½μš°μ—λ§Œ κ²½κ³ ).

λ„ˆλ¬΄ μΆ”ν•˜κ²Œ 듀리지 μ•ŠμœΌλ©° 이 μ‰¬μš΄ μ‹€μˆ˜λ₯Ό ν”Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μš°λ¦¬λŠ” ν•  수 μžˆμ§€λ§Œ 였λ₯˜λŠ” 잘λͺ»λœ(κ·ΈλŸ¬λ‚˜ λ¬΄ν•΄ν•œ) 좜λ ₯으둜 λ‚˜νƒ€λ‚˜λ©° ν•œ λ²ˆμ— μ‰½κ²Œ μˆ˜μ •λ˜λŠ” 클래슀 였λ₯˜μΈ λ™μ•ˆ λͺ¨λ“  λ¬Έμ„œμ— λŒ€ν•œ λŸ°νƒ€μž„ λΉ„μš©μž…λ‹ˆλ‹€. λ”°λΌμ„œ μ €λŠ” λŸ°νƒ€μž„ κ²€μ‚¬λ‘œ 처리 속도λ₯Ό λŠ¦μΆ”λŠ” 것을 μ„ ν˜Έν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λͺ¨λ“  경우 확인 μ˜΅μ…˜μœΌλ‘œ 이동해야 ν•©λ‹ˆλ‹€. λ‚˜λŠ” 이 λŸ°νƒ€μž„ λΉ„μš©μ΄ κ·Έ μžμ²΄λ‘œλŠ” λͺ¨λ‘ μž‘μ§€λ§Œ μ „μ²΄μ μœΌλ‘œ ν•©μ‚°λœλ‹€λŠ” 것을 μ•Œκ³  μžˆμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰