덧셈

덧셈

여기에 이미지 설명을 입력하세요여기에 이미지 설명을 입력하세요모든 숫자가 점 1개로 둘러싸여 있는 오래된 책을 조판하려고 합니다(단, 줄의 첫 번째인 경우에는 줄 앞이나 마지막에 점이 없고 뒤에 점이 없는 경우는 제외). ). 만약 점이 존재한다면, 그 점은 일반적인 단어 간 공간 안에 있습니다(마치 그 자체로는 공간을 차지하지 않는 것처럼).

어쨌든 (lua)TEX(저는 컨텍스트를 사용합니다)에서 그런 방식으로 숫자를 조판할 수 있나요?

아주 순진한 방법을 시도했지만 줄의 시작이나 끝 부분에 있는 점을 버리지 않고 접착제가 너무 많이 줄어들면 문제가 있는 것 같습니다.

\starttext

\dorecurse{100}{
Le \llap{.}1\rlap{.} element. }

\stoptext

시도했지만 cleaders(폐기 가능) 점이 중앙에 있고(숫자에 가깝지 않음) 예상한 대로 늘어나지 않는 것 같습니다.

설명을 위해 그림을 추가했습니다. 이는 줄 끝에서 점이 삭제되지만 여전히 숫자 주위에 너무 많은 간격이 있음을 보여줍니다.

오래된 타이포그래피의 예(Olivetan 프랑스어 성경, pdf는 다음에서 이용 가능)http://www.e-rara.ch/gep_g/content/titleinfo/1751440고딕 타이포그래피를 좋아한다면. 책에서 간격의 양이 무엇인지는 쉽지 않습니다.

답변1

\leaders두 건너뛰기(하나 와 하나가 아닌 것 ) 를 결합하는 순서는 \leaders중요하지 않습니다. 두 건너뛰기는 항상 하나의 단위로 사라집니다.

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

\makeatletter

\newsavebox\@NWD@dot@box
\newlength\@NWD@space@skip
\newcommand*\numberwithdots[1]{%
    \unskip
    \setbox\@NWD@dot@box \hbox{.}% use current font
    \@NWD@space@skip
        \fontdimen\tw@ \font
        \@plus \fontdimen\thr@@ \font
        \@minus \fontdimen 4 \font
    \hskip \glueexpr \@NWD@space@skip-\wd\@NWD@dot@box
    \cleaders \copy\@NWD@dot@box \hskip \wd\@NWD@dot@box
    #1%
    \cleaders \copy\@NWD@dot@box \hskip \wd\@NWD@dot@box
    \hskip \glueexpr \@NWD@space@skip-\wd\@NWD@dot@box
    \ignorespaces
}

\makeatother



\begin{document}

\numberwithdots{1} note that the indent does \emph{not} count as a ``begin of
line'': not sure if this is what is wanted.  Some text \numberwithdots{2} that
includes \numberwithdots{3} some numbers: I~hope that \numberwithdots{4} some
\numberwithdots{5} of them will fall \numberwithdots{6} on a line boundary,
although \numberwithdots{7} it is \numberwithdots{8} always possible
\numberwithdots{9} to arrange things in order \numberwithdots{10} to make
\numberwithdots{11} this happen.  And it \numberwithdots{12} is also
possible\linebreak[4] \numberwithdots{13} to force \numberwithdots{14} a line
\numberwithdots{15} break\linebreak[4] at a specific \numberwithdots{16}
position.

Two numbers in a row, though, do not \numberwithdots{123} \numberwithdots{456} 
look well.

\end{document}

이것은 내가 얻는 결과입니다.

코드 출력

덧셈

아마도 숫자 주위에 점이 있는 더 넓은 공간을 사용하는 것이 더 나을 것입니다. 그리고 사용자가 이 측면을 사용자 정의할 수 있도록 하는 것이 더 좋습니다.

% My standard header for TeX.SX answers:
\documentclass[a4paper]{article} % To avoid confusion, let us explicitly 
                                 % declare the paper format.

\usepackage[T1]{fontenc}         % Not always necessary, but recommended.
% End of standard header.  What follows pertains to the problem at hand.

\makeatletter

\newsavebox\@NWD@dot@box
\newlength\@NWD@space@skip
\newcommand*\@NWD@factor{1.5} % redefine default as you please
\newcommand*\numberwithdots[1]{%
    \unskip
    \setbox\@NWD@dot@box \hbox{.}% use current font
    \@NWD@space@skip
        \@NWD@factor\fontdimen\tw@ \font
        \@plus \fontdimen\thr@@ \font
        \@minus \fontdimen 4 \font
    \hskip \glueexpr \@NWD@space@skip-\wd\@NWD@dot@box
    \cleaders \copy\@NWD@dot@box \hskip \wd\@NWD@dot@box
    #1%
    \cleaders \copy\@NWD@dot@box \hskip \wd\@NWD@dot@box
    \hskip \glueexpr \@NWD@space@skip-\wd\@NWD@dot@box
    \ignorespaces
}
\newcommand*\nwdsetdotspacing[1]{\def\@NWD@factor{#1}}
\newcommand*\nwdlinebreak{\unskip\unskip\linebreak}

\makeatother



\begin{document}

\numberwithdots{1} note that the indent does \emph{not} count as a ``begin of
line'': not sure if this is what is wanted.  Some text \numberwithdots{2} that
includes \numberwithdots{3} some numbers: I~hope that \numberwithdots{4} some
\numberwithdots{5} of them will fall \numberwithdots{6} on a line boundary,
although \numberwithdots{7} it is \numberwithdots{8} always possible
\numberwithdots{9} to arrange things in order \numberwithdots{10} to make
\numberwithdots{11} this happen.  And it \numberwithdots{12} is also
possible\nwdlinebreak[4] \numberwithdots{13} to force \numberwithdots{14} a line
break \numberwithdots{15}\nwdlinebreak[4] at a specific \numberwithdots{16}
position.

Two numbers in a row, though, do not \numberwithdots{123} \numberwithdots{456} 
look well.

\nwdsetdotspacing{} % empty argument amounts to 1

\numberwithdots{1} note that the indent does \emph{not} count as a ``begin of
line'': not sure if this is what is wanted.  Some text \numberwithdots{2} that
includes \numberwithdots{3} some numbers: I~hope that \numberwithdots{4} some
\numberwithdots{5} of them will fall \numberwithdots{6} on a line boundary,
although \numberwithdots{7} it is \numberwithdots{8} always possible
\numberwithdots{9} to arrange things in order \numberwithdots{10} to make
\numberwithdots{11} this happen.  And it \numberwithdots{12} is also
possible\nwdlinebreak[4] \numberwithdots{13} to force \numberwithdots{14} a line
break \numberwithdots{15}\nwdlinebreak[4] at a specific \numberwithdots{16}
position.

\nwdsetdotspacing{2}

\numberwithdots{1} note that the indent does \emph{not} count as a ``begin of
line'': not sure if this is what is wanted.  Some text \numberwithdots{2} that
includes \numberwithdots{3} some numbers: I~hope that \numberwithdots{4} some
\numberwithdots{5} of them will fall \numberwithdots{6} on a line boundary,
although \numberwithdots{7} it is \numberwithdots{8} always possible
\numberwithdots{9} to arrange things in order \numberwithdots{10} to make
\numberwithdots{11} this happen.  And it \numberwithdots{12} is also
possible\nwdlinebreak[4] \numberwithdots{13} to force \numberwithdots{14} a line
break \numberwithdots{15}\nwdlinebreak[4] at a specific \numberwithdots{16}
position.

\end{document}

불행하게도 기술적인 이유로 강제로 줄 바꿈을 하기 위해 명령 \linebreak\nwdlinebreak.

산출:

두 번째 코드 샘플의 출력

추가 자유도: 백스페이스 양에 대한 요소이기도 합니다. 이 외에도 다음 코드 발췌는 보다 강력한 대안 구현을 제시합니다.

\makeatletter

% Alternative approach that permits nesting: use temporaries, but with grouping:
\newcommand*\@NWD@dot@factor{}
\newcommand*\@NWD@spc@factor{1.5}
\newcommand*\numberwithdots[1]{%
    \unskip
    \setbox\z@ \hbox{.}% use current font
    \dimen@ \@NWD@dot@factor\wd\z@
    \skip@
        \@NWD@spc@factor\fontdimen\tw@ \font
        \@plus \fontdimen\thr@@ \font
        \@minus \fontdimen 4 \font
    % More elegant with subroutines (or perhaps not):
    \@NWD@nonleader@hskip \@NWD@leader@hskip
    {#1}%
    \@NWD@leader@hskip \@NWD@nonleader@hskip
    \ignorespaces
}
\newcommand*\@NWD@nonleader@hskip{%
    \hskip \glueexpr \skip@-\dimen@ \relax % for robustness
}
\newcommand*\@NWD@leader@hskip{%
    \cleaders \copy\z@ \hskip \wd\z@
}
\newcommand*\nwdsetdotspacing[2][]{%
    \def\@NWD@dot@factor{#1}%
    \def\@NWD@spc@factor{#2}%
}
\newcommand*\nwdlinebreak{\unskip\unskip\linebreak}

\makeatother

추가 자료

\leaders줄 바꿈이나 페이지 나누기에서 상자를 사라지게 하기 위해 접착제 덩어리에 상자를 포함시키는 방법은 잘 알려져 있습니다. 제가 알 수 있는 한, 이는 2007년 Marcin Woliński가 처음 제안한 것입니다.줄 바꿈 시 상자를 사라지게 하는 방법.

또한보십시오:

답변2

\input expl3-generic % just for not using ConTeXt

\ExplSyntaxOn
\cs_set_eq:NN \dorecurse \prg_replicate:nn
\ExplSyntaxOff

\def\num#1{\unskip\adddot#1\adddot\ignorespaces}
\def\adddot{%
  \cleaders\hbox to 1.5\dimexpr\fontdimen2\font-\fontdimen4\font\relax{\hss.\hss}%
  \hskip1.5\fontdimen2\font plus \fontdimen3\font minus \fontdimen4\font
}

\dorecurse{100}{The \num{2} element \num{2} xy. }

\bye

여기에 이미지 설명을 입력하세요

숫자에 마침표를 붙이면 더 간단합니다.

\input expl3-generic

\ExplSyntaxOn
\cs_set_eq:NN \dorecurse \prg_replicate:nn
\ExplSyntaxOff

\newbox\periodbox

\def\num#1{\leavevmode\addleftdot#1\addrightdot}
\def\addleftdot{%
  \setbox\periodbox=\hbox{.}%
  \cleaders\copy\periodbox\hskip\wd\periodbox\relax
}
\def\addrightdot{%
  \setbox\periodbox=\hbox{.}%
  \cleaders\copy\periodbox\hskip\wd\periodbox\relax
}

\dorecurse{100}{The \num{2} element \num{2} xy. }

\bye

여기에 이미지 설명을 입력하세요

관련 정보