
검은색 직사각형으로 선을 채우는 명령을 만들었습니다. 이라고 하며 \fullrule
아래 코드에서 찾을 수 있습니다.
이 MWE와 관련하여 몇 가지 질문이 있습니다.
\documentclass[10pt]{article}
\usepackage[a4paper]{geometry}
\newlength{\mylift}
\setlength{\mylift}{-10pt} % MARK2
\addtolength{\mylift}{-1ex}
\addtolength{\mylift}{\baselineskip}
\newcommand{\fullrule}{%
{\hspace*{0pt}\leaders\hbox{\rule[\mylift]{1pt}{10pt}}\hfill}% % MARK 1
\hspace*{0pt}}
\begin{document}
aaa
\fullrule
aaa\fullrule{}\\
\fullrule{}\\
\fullrule{}
\fullrule
aaa\fullrule{}aaa
\fullrule{}\\
\fullrule{}aaa\\
\fullrule
\end{document}
이것이 생산되는 것입니다:
- 내 문서의 첫 번째 줄이 들여쓰기된 이유는 무엇입니까? (그렇습니다. 이것이 가장 작은 문제입니다.)
- 앞에 선행 문자가 없는 줄에서 작동하도록 하려면 "전체 부분"
\hspace*{0pt}
바로 앞 과 뒤에 추가해야 했습니다 . 왜? (시도를 통해 알아내는 데 오랜 시간이 걸렸기 때문에 이해하고 싶습니다.)\leaders
\leaders
\fullrule
\fullrule
10pt 대신 실제 글꼴 크기(% MARK 1
위 코드 참조)를 사용하고 실제 글꼴 크기(% MARK 2
위 코드 참조) 를 사용하여 규칙의 증가를 계산하도록 명령을 다시 작성할 수 있는 방법이 있습니까 ?
감사해요!
답변1
\newcommand{\fullrule}{%
\noindent\null\leaders\hrule height \dimexpr\ht\strutbox-\fboxrule\relax
depth \dimexpr\dp\strutbox-\fboxrule\relax\hfill
\null}
lockstep 설명에 따르면 \fullrule
단락을 시작하므로 들여쓰기가 됩니다.
새로운 정의가 무엇을 하는지 살펴보겠습니다:
\noindent
들여쓰기 없이 단락을 시작합니다. 이미 단락 안에 있으면 아무 일도 하지 않습니다.\null
\fullrule
줄의 시작 부분에서 삼키지 않게 하는 보이지 않는 상자를 놓습니다 .상자를 반복하는 대신
\leaders\hrule
TeX의 기능을 사용합니다. 끝에 지정된 공간을 규칙으로 채웁니다(이 경우\hfill
).\null
단락 끝에서 리더가 무시되는 것을 방지합니다(TeX는\unskip
단락 끝을 스캔할 때 항상 그렇습니다).
포인트 2와 4의 경우 공백 대신 무언가로 공간을 채우는 것 외에 리더가 접착제와 동일하게 취급된다는 점을 아는 것이 중요합니다.
사양 \hrule
에서는 규칙이 스트럿만큼 높고 깊어야 한다고 TeX에 알려줍니다(스스로 조정할 수 있는 작은 수정 사항 포함). 따라서 규칙의 높이와 깊이는 현재 기준선 건너뛰기에 따라 달라집니다.
답변2
\leaders
수직 모드에서는 수직 접착제가 필요합니다. 따라서 수직 모드에서는 \leaders
with를 \hfill
사용할 수 없습니다. 새 단락을 시작할 때 세로 모드가 됩니다. 따라서 먼저 수직 모드를 종료해야 합니다. 뿐만 아니라 \leavemode
또는 (LaTeX 커널에서 빈 수평 상자로 정의됨 ) \hspace*
과 같은 다른 보이지 않는 요소를 사용하여 이 작업을 수행할 수도 있습니다 .\null
\hbox{}
\hfill
TeX은 단락 끝의 마지막 수평 공백을 제거하기 때문에 줄 끝에서 아무것도 채우지 않습니다. 보이지 않는 자료를 다시 사용하거나 수평 공간을 하나 더 사용하거나( \hspace
별표가 없어도) 또는 \kern0pt
(비슷한 경우 LaTeX 커널에서 수행된 작업) 예를 들어 \dotfill
또는 을 사용하여 이를 피할 수 있습니다 \hrulefill
.
선의 높이와 깊이를 감지하려면 \ht\strutbox
및 를 사용할 수 있습니다 \dp\strutbox
.
다음은 LaTeX 커널의 수정된 버전에 대한 제안입니다 \hrulefill
(규칙의 높이와 깊이만 추가되었습니다).
\newcommand{\fullrule}{%
\leavevmode
\leaders\hrule height\ht\strutbox depth\dp\strutbox\hfill\kern0pt}%
이 버전은 단락 들여쓰기를 제거하지 않습니다. 단락 들여쓰기를 제거하려면 egreg의 솔루션을 사용하십시오.