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>처럼 입력하시면 좋습니다.
paracol 환경에서 각 단의 시작이 정렬되지 않는 문제
2020.02.14 18:40
다음과 같이 편집하던 중에
첫째 단의 줄간격과 둘째 단의 줄간격이 다를 때
각 단 시작 부분에서 정렬이 되지 않는 문제가 있습니다.
쪽의 처음에서 이 문제가 발생하지 않지만, 쪽의 중간에서 나타납니다.
어떻게 해야 해결할 수 있을까요?
TeXlive 2019, XeLaTex, windows10 x64 En를 사용합니다.
\\\\\\\\\\\\\\\\\\ MWE
%!TEX TS-program = xelatex
%!TEX encoding = utf-8 unicode
%!TEX spellcheck = en-US
\documentclass[letterpaper,12pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{paracol}
\usepackage{marginnote}
\usepackage{setspace}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont[Mapping=tex-text,Scale=1]{Libertinus Serif}
\usepackage{polyglossia}
\setmainlanguage{english}
\setdefaultlanguage[variant=us]{english}
\setotherlanguage[variant=ancient]{greek}
\newfontfamily\greekfont[Mapping=tex-text,Script=Greek,Scale=.9]{Palatino Linotype}
\newcommand{\charactername}[1]{{{\marginnote{\textgreek{\footnotesize\bfseries{#1}}}}}}
\newcommand{\bekkerStephanusNumbers}[1]{{\marginnote{\normalsize{{#1}}}}}
\newcommand{\paralleltext}[4]{
\columnratio{0.75}%
\begin{paracol}{2}%
\setlength{\parindent}{0pt}%
\rule{0pt}{0pt}%anchor
\charactername{#1}%
{\Large\setstretch{5}%
{\textgreek{#2}%
}\par}%
\switchcolumn\sloppy
\rule{0pt}{0pt}%anchor
\bekkerStephanusNumbers{#4}%
{#3}%
\switchcolumn*
\end{paracol}
}
%\renewcommand{\singlespacing}{%
% \setstretch {\setspace@singlespace}% normally 1
%}
\begin{document}
\paralleltext{Ἐχεκράτης}{τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; }{Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation?}{59d}
\paralleltext{Ἐχεκράτης}{τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; }{Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation?}{59d}
\end{document}
댓글 4
-
noname
2020.02.15 13:18
-
이기문
2020.02.15 15:09
답변 감사합니다.
우선 말씀하신 대로 해결해보겠습니다.
사실 질문을 올리기 전에 이미 말씀하신 부분 중에 여러가지를 했었습니다.
우선 말씀하신 대로 오른쪽 번역 부분을 marginal note로 봄이 마땅하고 그렇게 했었습니다만,
\marginnote 명령이 페이지가 바뀔때 내부 글이 나누어지지 않습니다.
(noname님께서 첫째 부분에서 말씀하신 것처럼 \marginnote가 내부적으로 box를 사용하는 듯 합니다.)
또한 네 단으로도 해보았고, 여백을 조정하면 얼마든지 가능한지도 확인했습니다만,
동일한 문제가 발생합니다.
현재 코드에서 \rule{0pt}{0pt}가 없으면 \marginnote와 각 단의 첫줄이 아예 정렬되지 않습니다.
\paracol을 한 번 부르고 그 안에서 본문을 처리하기도 했었는데,
질문할 당시 같은 문제가 발생해서 \paracol을 새롭게 시작하면 해결되지 않을까 하여 시도한 방법이었습니다.아무튼, 제가 이해되지 않는 부분은,
\paracol환경을 새로 열었는데도 그 \paracol 각 단의 첫 줄이 정렬되지 않는 문제입니다.
쪽의 처음에서 문제가 발생하지 않는데 중간에서만 문제가 생기는 부분입니다.
-
이기문
2020.02.15 18:29
제가 질문한 코드를 잘 못 올린듯 합니다.
질문한 코드를 정리해서 다시 올립니다.
%%%%%%%%%%%%%% MWE%!TEX TS-program = xelatex
%!TEX encoding = utf-8 unicode
%!TEX spellcheck = en-US\documentclass[letterpaper,12pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{paracol}
\usepackage{marginnote}
\usepackage{setspace}\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont[Mapping=tex-text,Scale=1]{Libertinus Serif}\usepackage{polyglossia}
\setmainlanguage{english}
\setdefaultlanguage[variant=us]{english}
\setotherlanguage[variant=ancient]{greek}
\newfontfamily\greekfont[Mapping=tex-text,Script=Greek,Scale=.9]{Palatino Linotype}
\newcommand{\charactername}[1]{%
\setstretch{1}%
{\footnotesize\bfseries{\textgreek{#1}}\par}\par}
\newcommand{\bekkerStephanusNumbers}[1]{%
\setstretch{1}%
{\normalsize\bfseries{\textenglish{#1}}\par}\par}
\newcommand{\maingreektext}[1]{%
\setstretch{5}%
{\Large{\textgreek{#1}}\par}\par}
\newcommand{\maintranslation}[1]{%
\setstretch{1}%
{\normalsize{\textenglish{#1}}\par}\par}
\newcommand{\paralleltext}[4]{%
\columnratio{0.75}%
\begin{paracol}{2}%
\setlength{\parindent}{0pt}%
\rule{0pt}{0pt}% anchor
\marginnote{\charactername{#1}}%
\maingreektext{#2}%
\switchcolumn\sloppy%
\rule{0pt}{0pt}% anchor
\marginnote{\bekkerStephanusNumbers{#4}}%
\maintranslation{#3}%
\switchcolumn*
\end{paracol}
}\begin{document}
\paralleltext{Ἐχεκράτης}{τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; }{Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation?}{59d}
\paralleltext{Ἐχεκράτης}{τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; }{Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation?}{59d}
\end{document}
-
이기문
2020.02.16 12:08
지금까지 파악한 원인들입니다.
제제 질문의 제목을 바꿔야 할 듯 합니다.
" \paracol 이나 \setstretch 명령이 적용된 첫 줄이, 쪽 처음에서와 쪽 중간에서 다르게 적용되는 문제."
1. 쪽의 중간에 \paracol 환경을 시작했을 때
각 컬럼의 첫줄의 폰트의 크기(높이)가 같지 않으면 첫줄이 정렬이 되지 않습니다.
그래서 각 컬럼의 첫줄에 크기(높이)가 같도록, 이를테면, fake 글자를 넣었습니다.
\rule{0pt}{17.28pt}
하지만 쪽의 처음에서 paracol 환경을 시작할 때 이 문제가 생기지 않습니다.
2. 쪽 중간에 \setstretch 명령을 주면 그 첫줄에 명령이 적용되어서
첫줄 앞에(위에) 빈 공간을 만듭니다.
그래서 빈 공간을 없애도록 강제로 끌어 올리는 명령을 주었습니다.
\vskip-5\baselineskip
하지만, 쪽의 처음에서 \setstretch 명령이 빈 공간을 만들지 않습니다.
그러니까 쪽의 첫줄에 뭔가 특별한 것이 있는가 봅니다.(당연히 그래야 하지만요.)
수정한 코드 입니다. 아래에 이 문제를 파악하기 위해 실험한 코드를 또한 첨부하였습니다.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!TEX TS-program = xelatex
%!TEX encoding = utf-8 unicode
%!TEX spellcheck = en-US\documentclass[letterpaper,12pt]{article}
\usepackage[margin=1in]{geometry}
\usepackage{paracol}
\usepackage{marginnote}
\usepackage{setspace}\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX}
\setmainfont[Mapping=tex-text,Scale=1]{Libertinus Serif}\usepackage{polyglossia}
\setmainlanguage{english}
\setdefaultlanguage[variant=us]{english}
\setotherlanguage[variant=ancient]{greek}
\newfontfamily\greekfont[Mapping=tex-text,Script=Greek,Scale=.9]%
{Palatino Linotype}
\def\factorofgreektextstretch{5}
\def\factoroftranslation{1}\newcommand{\greektextbaselinestretch}{\setstretch{\factorofgreektextstretch}}
\newcommand{\translationbaselinestretch}{\setstretch{\factoroftranslation}}\newcommand{\charactername}[1]{%
\footnotesize{\bfseries{\textgreek{#1}}}%
}%
\newcommand{\bekkerStephanusNumbers}[1]{%
\normalsize{\bfseries{\textenglish{#1}}}%
}%
\newcommand{\maingreektext}[1]{%
\Large{\textgreek{#1}}%
}%
\newcommand{\maintranslation}[1]{%
\normalsize{\textenglish{#1}}%
}%\newcommand{\firstlineheightanchor}{\rule{0pt}{17.28pt}}
\newcommand{\paralleltext}[4]{%
\columnratio{0.75}%
\begin{paracol}{2}%
\setlength{\parindent}{0pt}%
\firstlineheightanchor% 첫 줄의 높이를 통일함
\marginnote{\charactername{#1}}%
{\Large\vskip-\factorofgreektextstretch\baselineskip% 강제로 끌어올림
\greektextbaselinestretch%
\maingreektext{#2}\par}%
\switchcolumn\sloppy%
\firstlineheightanchor% 첫 줄의 높이를 통일함
\marginnote{\bekkerStephanusNumbers{#4}}%
\maintranslation{#3}
\end{paracol}%
}%
\begin{document}
\paralleltext{Ἐχεκράτης}{τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; }{Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation?}{59d}
%some text
\paralleltext{Ἐχεκράτης}{τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; τί οὖν δή; τίνες φῂς ἦσαν οἱ λόγοι; }{Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation? Well then, what was the conversation?}{59d}\end{document}
%%%%%%%%%%%%%%%%%%% 실험 코드
\documentclass[letterpaper,12pt]{article}
\usepackage{paracol}
\usepackage{setspace}
\usepackage{lipsum}
\usepackage{showframe}\begin{document}
\setstretch{1}
\lipsum[1]
\setstretch{2}
\lipsum[2]
\setstretch{3}
\lipsum[3]
\clearpage
\setstretch{2}
\lipsum[4]~\\~\\
\setstretch{1}
\begin{paracol}{2}
\small\lipsum[1]
\switchcolumn
\Large\lipsum[2]
\end{paracol}\clearpage
\begin{paracol}{2}
\small\lipsum[1]
\switchcolumn
\Large\lipsum[2]
\end{paracol}\end{document}
paracol이 두 번째 이후 문단을 조판하기 시작하는 위치에서 null 박스가 있는 것처럼 식자하기 때문에 baselinestretch를 바꾸면 그만큼 영향을 받을 것이 당연하다고 봅니다. 이 문제를 피해가려면 column에 단 하나의 박스만을 두고 행간격은 그 박스 내부에서 처리하도록 하는 방법이 있을 것도 같지만 그렇게 하면 박스가 페이지 나눔을 일으키기 곤란해서 의도하지 않은 결과가 나오겠지요.
그리고 \paralleltext 명령은 매번 불릴 때마다 paracol을 새로 시작하도록 하고 있는데 저라면 paracol 환경을 이 명령의 바깥에 두는 선택을 할 것 같습니다.
다른 관점에서, 예시 텍스트는 제가 보기에 왼쪽 컬럼의 \Large로 식자한 부분이 "본문"이고 오른쪽 것은 병행단(parallel column)이라기보다는 매달린 텍스트(marginal note)에 가까워보입니다. 따라서 과연 paracol로 식자할 만한 것인지를 확신하지 못하겠네요. 아무튼 만약 그렇다면 main text의 baseline을 5배로 키우고 오른쪽 매달린 텍스트를 식자할 때 박스 안에서 행간을 줄이는 것이 맞지 않았을까 싶습니다.
paracol로 한다 하더라도 왼쪽 오른쪽 끝에 marginnote로 처리한 것이 있는데, 차라리 4컬럼 paracol로 식자하는 게 낫지 않았을까요?
아무튼, 예시 코드를 최대한 존중하면서 원하는 결과를 얻도록 해보자면, 문단 첫 수직 위치를 조절하는 것은 결국 \vskip하는 수밖에 없지 않나 하는 생각이고요, (원래 소스에는 rule을 하나 두었는데 이게 꼭 있어야 할지는 알지 못하겠습니다. 어차피 null 박스 하나가 올텐데...) 다음에 보이는 코드는 한 가지 예시입니다. 여기서 끌어올림 간격 6.5\baselineskip의 경우는 문서의 진짜 baseline과 폰트 설정, 그리고 baselinestretch를 이용하면 정확한 값을 계산할 수 있겠지만 그냥 대충 눈에 보이는 대로 잡은 것입니다. 별로 우아하지 않지만.... 일단 원하시는 것과 비슷한 결과를 얻을 수 있을지 모르겠습니다.