Re: babel でラテン語の韻律記号が正しく扱われない。

名前: ZR
日時: 2007-03-05 22:48:26
IPアドレス: 59.140.98.*

>>47303 harada 様、栗山様 またまたまた蛇足です。 latin.ldf (v2.0g) について、(気づいている)問題店を全て修正した ものを載せておきます。 # 大幅に書き換えているので将来への対応が大変ですが…。 # 無理やり追加設定の形(.cfg)にするという手もある? この修正版では shortcut 文字の動作は通常の(他の言語設定での)もの と同様になります。すなわち、= でいうと - =a のような登録済のものはその定義に従う - それ以外(=b, ={} 等)は本来の意味('=' 自身)になる - ただし = の直後の空白は無視されるので注意 - 数式中では常に本来の意味になる # \initiate@active@char の引数に渡す文字は本来の catcode のもので # ないといけないようです。元の版では active な状態の文字が渡されて # いたので、\initiate@active@char の場所により異なる予想外の動作を # していました。(例えば、>>47272 を用いて \ProsodicMarksOn の状態 # で =b と書くと何故か無限ループに入ります。) サンプルの文書です。 esperanto は ^ を使う他の言語の例です。 <sample.tex> \documentclass{article} \usepackage[esperanto,latin]{babel} %\usepackage[T1]{fontenc} \usepackage[latin]{babel} \languageattribute{latin}{medieval} \languageattribute{latin}{withprosodicmarks} \errorcontextlines=5 \begin{document} Latin: 8 ={} oct=o; 16 ={} s=edecim; $y=ax^e$; \MakeUppercase{Heluetia C{\ae}sar} \selectlanguage{esperanto} Esperanto: 9 = ne^u; $y=ax^u$ \end{document} <EOF> ------------------- 修正版 latin.ldf (\LdfInit の行から \ldf@finish の行まで) <BEGIN> \LdfInit{latin}{captionslatin} \ifx\l@latin\@undefined \@nopatterns{Latin} \adddialect\l@latin0\fi \bbl@declare@ttribute{latin}{medieval}{% \addto\captionslatin{\def\prefacename{Pr{\ae}fatio}}% \def\november{Nouembris}% \expandafter\addto\expandafter\extraslatin \expandafter{\extrasmedievallatin}% } \bbl@declare@ttribute{latin}{withprosodicmarks}{% \expandafter\addto\expandafter\extraslatin \expandafter{\extraswithprosodicmarks}% \ProsodicMarks } \@namedef{captionslatin}{% \def\prefacename{Praefatio}% \def\refname{Conspectus librorum}% \def\abstractname{Summarium}% \def\bibname{Conspectus librorum}% \def\chaptername{Caput}% \def\appendixname{Additamentum}% \def\contentsname{Index}% \def\listfigurename{Conspectus descriptionum}% \def\listtablename{Conspectus tabularum}% \def\indexname{Index rerum notabilium}% \def\figurename{Descriptio}% \def\tablename{Tabula}% \def\partname{Pars}% \def\enclname{Adduntur}% Or " Additur" ? Or simply Add.? \def\ccname{Exemplar}% Use the recipient's dative \def\headtoname{\ignorespaces}% Use the recipient's dative \def\pagename{Charta}% \def\seename{cfr.}% \def\alsoname{cfr.}% R.Tabacco never saw "cfr. atque" or similar forms \def\proofname{Demonstratio}% \def\glossaryname{Glossarium}% } \def\november{Novembris}% \def\datelatin{% \def\today{% {\check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont \uppercase\expandafter{\romannumeral\day}}\nobreakspace \ifcase\month\or Ianuarii\or Februarii\or Martii\or Aprilis\or Maii\or Iunii\or Iulii\or Augusti\or Septembris\or Octobris\or \november\or Decembris\fi \space{\uppercase\expandafter{\romannumeral\year}}}} \providehyphenmins{\CurrentOption}{\tw@\tw@} \addto\extraslatin{% \babel@savevariable\clubpenalty \babel@savevariable\widowpenalty \clubpenalty3000\widowpenalty3000} \addto\extraslatin{% \babel@savevariable\finalhyphendemerits \finalhyphendemerits50000000} \addto\extrasmedievallatin{% \babel@savevariable{\lccode`\V}% \babel@savevariable{\uccode`\u}% \lccode`\V=`\u \uccode`\u=`\V} \addto\extrasmedievallatin{% % \babel@savevariable{\lccode`\^^e6}% T1 \ae % \babel@savevariable{\uccode`\^^e6}% T1 \ae % \babel@savevariable{\lccode`\^^c6}% T1 \AE % \babel@savevariable{\lccode`\^^f7}% T1 \oe % \babel@savevariable{\uccode`\^^f7}% T1 \OE % \babel@savevariable{\lccode`\^^d7}% T1 \OE % \babel@savevariable{\lccode`\^^1a}% OT1 \ae % \babel@savevariable{\uccode`\^^1a}% OT1 \ae % \babel@savevariable{\lccode`\^^1d}% OT1 \AE % \babel@savevariable{\lccode`\^^1b}% OT1 \oe % \babel@savevariable{\uccode`\^^1b}% OT1 \OE % \babel@savevariable{\lccode`\^^1e}% OT1 \OE \SetLatinLigatures} \providecommand\SetLatinLigatures{% % \def\@tempA{T1}\ifx\@tempA\f@encoding % \catcode`\^^e6=11 \lccode`\^^e6=`\^^e6 \uccode`\^^e6=`\^^c6 % \ae % \catcode`\^^c6=11 \lccode`\^^c6=`\^^e6 % \AE % \catcode`\^^f7=11 \lccode`\^^f7=`\^^f7 \uccode`\^^f7=`\^^d7 % \oe % \catcode`\^^d7=11 \lccode`\^^d7=`\^^f7 % \OE % \else % \catcode`\^^1a=11 \lccode`\^^1a=`\^^1a \uccode`\^^1a=`\^^1d % \ae % \catcode`\^^1d=11 \lccode`\^^1d=`\^^1a % \AE (^^]) % \catcode`\^^1b=11 \lccode`\^^1b=`\^^1b \uccode`\^^1b=`\^^1e % \oe % \catcode`\^^1e=11 \lccode`\^^1e=`\^^1b % \OE (^^^) % \fi \def\@tempA{OT1}\ifx\@tempA\f@encoding \babel@savevariable{\lccode26}\lccode26=26 %\ae \babel@savevariable{\lccode29}\lccode29=26 %\AE \babel@savevariable{\lccode27}\lccode27=27 %\oe \babel@savevariable{\lccode30}\lccode30=27 %\OE \fi \let\@tempA\@undefined } \addto\lt@noprosodicmarks{\def\ProsodicMarksOn{% \GenericError{(latin)\@spaces\@spaces\@spaces\@spaces}% {Latin language error: \string\ProsodicMarksOn\space is defined by setting the\MessageBreak language attribute to `withprosodicmarks'\MessageBreak If you continue you are likely to encounter\MessageBreak fatal errors that I can't recover}% {See the Latin language description in the babel documentation for explanation}{\@ehd}}} \addto\lt@noprosodicmarks{\let\ProsodicMarksOff\relax} \lt@noprosodicmarks \catcode`\= \active \catcode`\^ \active \addto\extraslatin{\languageshorthands{latin}}% \addto\extraswithprosodicmarks{\bbl@activate{^}}% \addto\extraswithprosodicmarks{\bbl@activate{=}}% \addto\noextraswithprosodicmarks{\bbl@deactivate{^}}% \addto\noextraswithprosodicmarks{\bbl@deactivate{=}}% %\addto\extraswithprosodicmarks{\ProsodicMarks} \catcode`\^ 7\catcode`\= 12\relax \def\ProsodicMarks{% \def\ProsodicMarksOn{\catcode`\^ 13\catcode`\= 13\relax}% \def\ProsodicMarksOff{\catcode`\^ 7\catcode`\= 12\relax}% } \addto\ProsodicMarks{% \initiate@active@char{^}% \initiate@active@char{=}% \declare@shorthand{latin}{^a}{\u{a}\bbl@allowhyphens}% \declare@shorthand{latin}{^e}{\u{e}\bbl@allowhyphens}% \declare@shorthand{latin}{^i}{\u{\i}\bbl@allowhyphens}% \declare@shorthand{latin}{^o}{\u{o}\bbl@allowhyphens}% \declare@shorthand{latin}{^u}{\u{u}\bbl@allowhyphens}% \declare@shorthand{latin}{=a}{% \textormath{\={a}\bbl@allowhyphens}{\string=a}}% \declare@shorthand{latin}{=e}{% \textormath{\={e}\bbl@allowhyphens}{\string=e}}% \declare@shorthand{latin}{=i}{% \textormath{\={\i}\bbl@allowhyphens}{\string=i}}% \declare@shorthand{latin}{=o}{% \textormath{\={o}\bbl@allowhyphens}{\string=o}}% \declare@shorthand{latin}{=u}{% \textormath{\={u}\bbl@allowhyphens}{\string=u}}% \AtBeginDocument{\ProsodicMarksOn}% } %\addto\extraslatin{\def\LatinMarksOn{\shorthandon{^}\shorthandon{=}}} %\addto\extraslatin{\def\LatinMarksOff{\shorthandoff{^}\shorthandoff{=}}} %\addtoextraslatin{\LatinMarksOff} \def\LatinMarksOn{\ProsodicMarksOn} \def\LatinMarksOff{\ProsodicMarksOff} \initiate@active@char{"}% \addto\extraslatin{\bbl@activate{"}% } \declare@shorthand{latin}{"}{% \ifmmode \def\lt@@next{''}% \else \def\lt@@next{\futurelet\lt@temp\lt@cwm}% \fi \lt@@next }% \def\lt@allowhyphens{\nobreak\discretionary{-}{}{}\nobreak\hskip\z@skip} \newcommand*{\lt@cwm}{\let\lt@n@xt\relax \ifcat\noexpand\lt@temp a% \let\lt@n@xt\lt@allowhyphens \else \if\noexpand\lt@temp\string|% \def\lt@n@xt{\lt@allowhyphens\@gobble}% \fi \fi \lt@n@xt}% \ldf@finish{latin} <END>

この書き込みへの返事:

お名前
題名 
メッセージ(タグは <a href="...">...</a> だけ使えます。適宜改行を入れてください)