Q&A 마당은 텍 관련 질문/답변을 위해 만들었습니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- 질문 전에 아래를 읽어 보세요. 좋은 질문이 좋은 답을 받을 수 있는 좋은 방법입니다.
- 질문에 맞는 제목을 붙이세요. 질문의 내용과 관련없는 "고수님", "긴급질문", "도와주세요"와 같은 제목은 답이 잘 올라오지 않습니다. 이 게시판에 올라오는 모든 글은 질문입니다. 굳이 [질문], [Q]를 적으실 필요도 없습니다.
- 내용을 충실히 적어 주시고, 같은 상황을 재현할 수 있는 최소한의 예제가 같이 있어야 합니다.
- 최소 예제는 "Minimal working example"을 읽어 보세요.
- 파일을 첨부하실 때에는 가능한 압축하여 파일 크기를 줄여서 올려주시길 바랍니다.
- 개인적으로 사용하신 글꼴이 들어 있는 경우, preparefont.sty에 관한 답변을 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 사용하는 편집기는 CKeditor입니다.
- 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한 줄을 비웁니다.
- 글줄만 바꾸려면 [shift-enter]를 누르면 <BR> 태그가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
- 수식를 문서내에 삽입하시려면 에디터를 툴바에서 [소스]를 눌러 HTML로 입력할 수 있게 바꾸신 후 <pre> </pre> tag를 사용하셔서 <pre> 여러 줄의 수식 </pre>처럼 입력하시면 좋습니다.
memoir에서 subsection의 afterskip 문제
2014.01.10 21:03
이해를 돕기 위해서 예제 파일을 만들어 보았습니다.
subsection과 subsubsection 모두 afterskip을 -0em (줄바꿈도 없고 제목과 본문 사이 공백도 없는) 을 주었습니다.
컴파일을 해 보면 subsubsection은 제대로 되는데 subsection은 여전히 제목과 본문 사이에 공백이 생깁니다.
그 결과 1.2를 보면 본문 시작이 푹 들어가버리는 보기 싫은 결과가 나옵니다.
뭔가 subsection에 관련된 다른 길이 변수를 더 조절해야 하는 것 같은데, 어떻게 해결할 수 있을까요?
(실제 문서 작업에서는 제목이 있으면 무조건 행을 바꿀 것이므로 1.1.1에서 제목과 본문이 붙는 것은 문제가 되지 않습니다)
댓글 3
-
prajna
2014.01.11 17:41
-
nanim
2014.01.12 12:58
섹셔닝 커맨드를 해킹하는 것이 꼭 바람직해 보이지는 않습니다.
차라리 새로운 명령을 하나 정의하는 것은 어떤가요?
\usepackage{etextools}
\newcounter{mycmd}
\counterwithin{mycmd}{section}
\newcommand\mycmd[1]{%
\xifblank{#1}{\mycmdwithoutarg{#1}}{\mycmdwitharg{#1}}
}
\long\def\mycmdwitharg#1{%
\refstepcounter{mycmd}%
\par
\vskip3.5ex\par
\noindent{\bfseries\large\themycmd\quad #1}\par
\vskip1ex\par
\noindent\ignorespaces
}
\long\def\mycmdwithoutarg#1{%
\refstepcounter{mycmd}%
\par
\vskip3.5ex\par
\noindent{\bfseries\large\themycmd}\hskip1em\ignorespaces
}\mycmd{높이}
%%% \mycmd는 빈 줄이 오면 안 됨.
3.7.4 조항에 정의된 평탄한 표면의 가장 낮은 지점으로부터 차량 가장 높은 지점까지 측정된 높이는 공기역학 구성요소를 이루지 않는 전복 구조물을 제외하고는 (16.4.3 조항에서 허용된 페어링은 예외에서 제외) 1030mm를 넘을 수 없다.
\mycmd{}
원래의 점화 시스템(배터리/코일 또는 마그네토)이 유지되어야 한다. 플러그의 제작과 방식, 회전수 제한 장치와 고전압 케이블은 자유다. 엔진의 전자 제어 장치는 자유다.======
만약 \subsection을 쓰지 않으면 안 되는 중대한 문제가 있다면 어쩔 수 없이 section 관련 명령을 해킹하는 수밖에 없는 것 같네요.
\let\ORIGsubsection=\subsection
\makeatletter
\def\M@sect#1#2#3#4#5#6[#7][#8]#9{%
\ifheadnameref\M@gettitle{#8}\else\M@gettitle{#7}\fi
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\memsecinfo{#1}{}{#7}{#8}{#9}%
\else
\refstepcounter{#1}%
\protected@edef\@svsec{\@seccntformat{#1}\relax}%
\memsecinfo{#1}{\@nameuse{the#1}}{#7}{#8}{#9}%
\fi
\@tempskipa #5\relax
\ifdim \@tempskipa>\z@
\begingroup
#6
{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M #9\@@par}%
\endgroup
\csname #1mark\endcsname{#8}%
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}%
\else
\def\@svsechd{\bfseries\large\thesubsection\space}%
\fi
\@xsect{#5}}
\renewcommand*\subsection[2][\empty]{%
\def\SubsectionTitleStr{#2}
\xifblank{\SubsectionTitleStr}{\setsubsechook{\def\@afterheading{}\renewcommand\aftersubsecskip{-0.1em plus 1em minus .5em}}}
{\setsubsechook{\renewcommand\aftersubsecskip{.5em plus 1ex minus 1ex}}}
\ifx\empty#1\ORIGsubsection{#2}\else\ORIGsubsection[#1]{#2}\fi
}
\makeatother
\setsubsecindent{0pt}무슨 부작용이 있을지를 예측할 수 없습니다.
-
Dennis
2014.01.12 16:24
도움 감사드립니다. 결국은 굉장히 거지같은(?) 편법으로 문제를 해결했습니다. 쩝.
\usepackage{ifthen}
\usepackage{titlesec}
% \subsection이 제목 유무에 따라서 줄바꿈을 결정하도록 재정의
\newlength{\afterregsubsecskip}
\let\ORIGsubsection=\subsection
\renewcommand*\subsection[2][\empty]{%
\def\SubsectionTitleStr{#2}
\ifthenelse{\equal{\SubsectionTitleStr}{\empty}}%
{\setlength{\afterregsubsecskip}{-\baselineskip}}
{\setlength{\afterregsubsecskip}{\aftersubsecskip}}
\titlespacing{\subsection}{0pt}{3.25ex plus 1ex minus .2ex}{\afterregsubsecskip}
\ORIGsubsection{#2}
}
% \subsubsection이 제목 유무에 따라서 줄바꿈을 결정하도록 재정의
\newlength{\afterregsubsubsecskip}
\let\ORIGsubsubsection=\subsubsection
\renewcommand*\subsubsection[2][\empty]{%
\def\SubsubsectionTitleStr{#2}
\ifthenelse{\equal{\SubsubsectionTitleStr}{\empty}}%
{\setlength{\afterregsubsubsecskip}{-\baselineskip}}
{\setlength{\afterregsubsubsecskip}{\aftersubsecskip}}
\titlespacing{\subsubsection}{0pt}{3.25ex plus 1ex minus .2ex}{\afterregsubsubsecskip}
\ORIGsubsubsection{#2}
}
제가 LaTeX은 잘 몰라서 ConTeXt로 간단히 만들어 보았습니다. 혹시 필요하시면 참고하시기 바랍니다.
\usemodule[simplefonts]
\setcjkmainfont[nanummyeongjo]
\setscript[hangul]
\setuphead
[section]
[style=\bold, command=\MyHead]
\setuphead [subsection]
[alternative=text,distance=0pt,style=\bold, command=\MyHead]
\define[2]\MyHead%
{\inmargin{#1}%
\setbox0=\hbox{#2\unskip}\ifdim\wd0=0pt
% 타이틀이 없으면 그냥..
\else
#2\\% 타이틀이 있으면 줄바꿈.
\fi
}
\starttext
\showframe
\section{테스트 섹션} 테스트입니다.
\subsection{높이}
3.7.4 조항에 정의된 평탄한 표면의 가장 낮은 지점으로부터 차량 가장 높은 지점까지 측정된 높이는 공기역학 구성요소를 이루지 않는 전복 구조물을 제외하고는 (16.4.3 조항에서 허용된 페어링은 예외에서 제외) 1030mm를 넘을 수 없다.
\subsubsection{폐쇄형 차량}
문은 열렸을 때 좌석으로 자유롭게 드나들 수 있는 여유가 있어야 한다. 어떤 기계 구성요소도 좌석에 드나드는 것을 방해해서는 안 된다. 폐쇄형 차량의 바깥쪽 문 핸들은 명확하게 표시되어야 한다.
\subsection{}
원래의 점화 시스템(배터리/코일 또는 마그네토)이 유지되어야 한다. 플러그의 제작과 방식, 회전수 제한 장치와 고전압 케이블은 자유다. 엔진의 전자 제어 장치는 자유다.
\subsubsection{} 차체(플랫 보텀 포함)를 만들기 위하여 탄소 섬유 그리고/또는 케블라를 쓰는 것은 금지된다. 하지만, 날개를 포함한 뒤쪽 공기역학 장치(따라서 차체와 이 장치 사이에 공기의 흐름이 있을 때에만)는 그 지지물을 포함하여, 복합 소재로 만든 것일 수 있다.
\stoptext