으로 계산된 값이 포함된 테이블이 있습니다 \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
. \expandafter
s 또는) \expanded
siunitx가 확장할 수 없는 명령을 보기 전에 값이 완전히 확장되었는지 확인하려면 다음을 수행합니다.
% 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