모든 숫자가 점 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