siunitx 테이블, \directlua{} 출력 형식 지정

siunitx 테이블, \directlua{} 출력 형식 지정

으로 계산된 값이 포함된 테이블이 있습니다 \directlua{}. 열로 형식이 지정됩니다 siunitx.

일부 값을 굵게 표시하거나 색상을 변경하고 싶습니다.

매크로 출력의 \directlua{}형식은 열의 형식이 아닌 원시 텍스트 형식인 것으로 보입니다 siunitx S.

MWE:

% Latex program : luaLatex
\documentclass{article}

% *** Fonts ***
\usepackage{fontspec}
\setmainfont{Tex Gyre Schola}[Numbers={Proportional,OldStyle}]
% *** Tabular figures ***
\newfontfamily\TLFfont{Tex Gyre Schola}[Numbers={Monospaced,Lining}]

% *** siunitx ***
\usepackage{siunitx}
% french typesetting, 3-figures blocks
   \sisetup{locale=FR,group-minimum-digits=4}
% font detection
   \sisetup{detect-all}

% *** Lua percent sign ***
% https://tex.stackexchange.com/questions/436979/problem-with-string-format-directlua-and-tex-sprint
\makeatletter
   \let\luaPercent\@percentchar
\makeatother
% *** Rounding value ***
\newcommand*{\roundingValue}{2}
% ***

\usepackage{xcolor}

% *** Tabular bold / siunitx ***
% https://tex.stackexchange.com/questions/66253/siunitx-bold-single-numeric-cells
\usepackage{etoolbox}
\robustify\bfseries


\begin{document}

\sisetup{mode=text,text-rm=\TLFfont,unit-mode=text}
\begin{tabular}{lSSr}
      &   {raw text value} &   {directlua value} &    \\
   basic text &   1231.45 &   \directlua{n=1231.45 tex.print(string.format("\luaPercent.\roundingValue f",n))} &   right \\
   itshape &   \itshape 1231.45 &   \itshape \directlua{n=1231.45 tex.print(string.format("\luaPercent.\roundingValue f",n))} &   wrong \\
   bfseries &   \bfseries 1231.45 &   \bfseries \directlua{n=1231.45 tex.print(string.format("\luaPercent.\roundingValue f",n))} &   wrong \\
   color &   \color{red}1231.45 &   \color{red}\directlua{n=1231.45 tex.print(string.format("\luaPercent.\roundingValue f",n))} &   wrong \\
   tex.sprint &   &   \color{red}\directlua{n=1231.45 tex.sprint(string.format("\luaPercent.\roundingValue f",n))} &   wrong \\
   tex.cprint 11 &   &   \color{red}\directlua{n=1231.45 tex.cprint(11, string.format("\luaPercent.\roundingValue f",n))} &   wrong \\
\end{tabular}

\end{document}

차이점을 강화하기 위해 의도적으로 이전 스타일의 숫자 글꼴을 사용합니다.

영상
(원천:toile-libre.org)

올바른 형식의 텍스트는 수정자가 적용되지 않은 경우뿐입니다.

내가 여기서 무엇을 놓치고 있는 걸까요?

답변1

문제는 와 직접적인 관련이 없습니다 . 숫자로 확장되는 매크로로 \directlua교체하면 동일한 문제가 발생합니다 . \directlua{...}두 경우 모두 siunitx는 TeX에 의해 실제 숫자로 확장된 후 값을 확인해야 하지만 siunitx의 확장 코드는 확장할 수 없는 명령 등에 의해 중단 \color됩니다 \itshape. \expandafters 또는) \expandedsiunitx가 확장할 수 없는 명령을 보기 전에 값이 완전히 확장되었는지 확인하려면 다음을 수행합니다.

% Latex program : luaLatex
\documentclass{article}

% *** Fonts ***
\usepackage{fontspec}
\setmainfont{Tex Gyre Schola}[Numbers={Proportional,OldStyle}]
% *** Tabular figures ***
\newfontfamily\TLFfont{Tex Gyre Schola}[Numbers={Monospaced,Lining}]

% *** siunitx ***
\usepackage{siunitx}
% french typesetting, 3-figures blocks
   \sisetup{locale=FR,group-minimum-digits=4}
% font detection
   \sisetup{detect-all}

% *** Lua percent sign ***
% https://tex.stackexchange.com/questions/436979/problem-with-string-format-directlua-and-tex-sprint
\makeatletter
   \let\luaPercent\@percentchar
\makeatother
% *** Rounding value ***
\newcommand*{\roundingValue}{2}
% ***

\usepackage{xcolor}

% *** Tabular bold / siunitx ***
% https://tex.stackexchange.com/questions/66253/siunitx-bold-single-numeric-cells
\usepackage{etoolbox}
\robustify\bfseries


\begin{document}

\sisetup{mode=text,text-rm=\TLFfont,unit-mode=text}
\begin{tabular}{lSSr}
      &   {raw text value} &   {directlua value} &    \\
   basic text &   1231.45 &   \directlua{n=1231.45 tex.print(string.format("\luaPercent.\roundingValue f",n))} &   right \\
   itshape &   \itshape 1231.45 &   \expanded{\noexpand\itshape \directlua{n=1231.45 tex.print(string.format("\luaPercent.\roundingValue f",n))}} &   right \\
   bfseries &   \bfseries 1231.45 &   \expanded{\noexpand\bfseries \directlua{n=1231.45 tex.print(string.format("\luaPercent.\roundingValue f",n))}} &   right \\
   color &   \color{red}1231.45 &   \expanded{\noexpand\color{red}\directlua{n=1231.45 tex.print(string.format("\luaPercent.\roundingValue f",n))}} &   right \\
   tex.sprint &   &   \expanded{\noexpand\color{red}\directlua{n=1231.45 tex.sprint(string.format("\luaPercent.\roundingValue f",n))}} &   right \\
   tex.cprint 11 &   &   \expanded{\noexpand\color{red}\directlua{n=1231.45 tex.cprint(11, string.format("\luaPercent.\roundingValue f",n))}} &   wrong \\
   tex.cprint 12 &   &   \expanded{\noexpand\color{red}\directlua{n=1231.45 tex.cprint(12, string.format("\luaPercent.\roundingValue f",n))}} &   right \\
\end{tabular}

\end{document}

(또는 별도로 실행하는 대신 통화 중에 인쇄 \color또는 글꼴 명령을 통해 문제를 해결할 수도 있습니다 .)tex.print\directlua여기에 이미지 설명을 입력하세요

관련 정보