이 저장소에는 과학 논문을 작성할 때 유용하고 중요하다고 판단한 도구, 모범 사례, 팁 및 기타 지침 목록이 포함되어 있습니다. 일부는 스타일의 문제이며(우리는 Chicago Manual of Style의 지침을 따르는 경향이 있습니다), 다른 사람들이 일을 다르게 하는 것을 선호한다는 것을 잘 알고 있지만 일관된 지침을 얻기 위해 어쨌든 목록을 나열합니다. 우리가 작성한 모든 것에 자유롭게 적응하고, 변경하고, 무시하거나 심지어 도전해 보세요!
조판은 문자와 기호 등의 유형을 배열하여 텍스트를 구성하는 것입니다. 대부분 미학적 문제이지만, 아름다운 타이포그래피는 문서를 더 쉽고 즐겁게 읽을 수 있게 하여 독자가 메시지를 이해하는 데 도움을 줍니다.
문서를 작성할 때 도움이 되는 몇 가지 조판 팁과 도구가 아래에 나열되어 있습니다. 일부 팁은 LaTeX에만 적용되지만 다른 팁은 사용 중인 제품에 관계없이 적용됩니다.
LaTeX 문서를 작성할 때 소스 파일에 한 줄에 한 문장씩 넣으십시오. 쓰다:
This is my first sentence.
This is the second one.
그리고 다음은 아니다:
This is my first sentence. This is the second one.
그 주된 이유는 소스 제어 및 협업입니다. 커밋의 변경 사항을 볼 때 각각 별도의 줄에 있으면 어떤 문장이 변경되었는지 식별하는 것이 훨씬 쉽습니다. 그러면 동료가 변경 사항을 더 쉽게 확인할 수 있습니다.
또 다른 이점은 LaTeX 컴파일러에서 줄 번호만 제공하면 오류를 더 잘 식별할 수 있다는 것입니다.
아래에서는 두 가지 유형의 대문자 사용을 참조하겠습니다.
모든 섹션, 하위 섹션 등의 제목에는 제목 형식을 사용하세요. 올바른 단어를 대문자로 표기하는 데 도움을 주기 위해 capitalizemytitle.com이라는 편리한 웹사이트가 있습니다.
때로는 개체의 이름(예: 그림, 표, 그래프 또는 알고리즘)과 해당 참조 번호가 두 줄로 분할됩니다. 예를 들어, 한 줄에는 개체 이름이 표시되고 다음 줄에는 참조 번호가 표시될 수 있습니다.
LaTeX가 객체의 이름과 참조를 같은 줄에 유지하도록 하려면 객체와 참조 사이에 ~
문자를 사용할 수 있습니다. 물결표 문자 ~
를 사용하면 어색한 줄 바꿈을 피하고 LaTeX 문서에서 개체 이름과 참조 번호에 대한 일관된 형식을 유지할 수 있습니다.
Figure~ ref { fig:example } displays that the project ...
물결표 문자를 사용하는 것을 잊지 않으려면 자동화를 위한 사용자 정의 명령을 만들어 프로세스를 단순화할 수 있습니다. 예는 다음과 같습니다.
newcommand { refalg }[1]{Algorithm~ ref {# 1 }}
newcommand { refapp }[1]{Appendix~ ref {# 1 }}
newcommand { refchap }[1]{Chapter~ ref {# 1 }}
newcommand { refeq }[1]{Equation~ ref {# 1 }}
newcommand { reffig }[1]{Figure~ ref {# 1 }}
newcommand { refsec }[1]{Section~ ref {# 1 }}
newcommand { reftab }[1]{Table~ ref {# 1 }}
이러한 명령이 정의되면 다음을 작성하는 대신 다음을 수행하십시오.
Figure~ ref { fig:example }
간단히 입력하세요:
reffig {fig:example}
(완전한 예)
북탭을 사용하면 깨끗하고 멋진 테이블을 만들 수 있습니다.
usepackage { booktabs }
% --
begin { table }
centering
begin { tabular }{lcc}
toprule
& multicolumn {2}{c}{Data} \ cmidrule (lr){2-3}
Name & Column 1 & Another column \
midrule
Some data & 10 & 95 \
Other data & 30 & 49 \
addlinespace
Different stuff & 99 & 12 \
bottomrule
end { tabular }
caption {My caption.}
label { tab-label }
end { table }
일반적으로 테이블에 수직선을 사용하지 마십시오. 대신, 열을 그룹화하려면 cmidrule
사용하여 헤더에서 수행하십시오. addlinespace
사용하여 수평선을 공백으로 바꿀 수도 있습니다.
열 머리글은 문장 형식의 대문자를 사용해야 합니다(http://www.chicagomanualofstyle.org/15/ch13/ch13_sec019.html 참조).
표 형식 지정에 대한 추가 조언은 http://www.inf.ethz.ch/personal/markusp/teaching/guides/guide-tables.pdf에서 확인할 수 있습니다. 다음은 이러한 규칙 중 일부를 보여주는 멋진 GIF입니다.
(완전한 예)
모든 숫자, 통화, 단위 등의 형식을 지정하려면 siunitx 패키지를 사용하세요.
usepackage { siunitx }
% ---
This thing costs SI {123456}{ $ }.
There are num {987654} people in this room, SI {38}{ percent } of which are male.
숫자를 반올림하는 데 사용할 수도 있습니다.
usepackage { siunitx }
% ---
sisetup {
round-mode = places,
round-precision = 3
} %
You can also round numbers, for example num {1.23456}.
마지막으로, 표의 숫자를 더 잘 정렬하는 데 도움이 될 수 있습니다.
usepackage { booktabs }
usepackage { siunitx }
% ---
begin { table }
centering
begin { tabular }{lS}
toprule
Name & {Value} \ % headers of S columns have to be in {}
midrule
Test & 2.3456 \
Blah & 34.2345 \
Foo & -6.7835 \
Bar & 5642.5 \
bottomrule
end { tabular }
caption {Numbers alignment with texttt { siunitx }.}
end { table }
(완전한 예)
방정식을 작성할 때 변수, 벡터, 행렬 등을 일관되고 일관된 방식으로 작성하는 것이 도움이 됩니다. 이는 독자가 말하는 내용을 식별하고 각 기호의 의미를 기억하는 데 도움이 됩니다.
우리는 수학 작성에 대해 다음과 같은 규칙을 제안합니다.
$x$
)$mathbold{x}$
)$mathbold{X}$
)$X$
) mathbold
명령은 fixmath
패키지에서 제공되며 boldmath
또는 bm
과 유사합니다. 단, 모든 기호는 이탤릭체로 표시됩니다. 심지어 그리스 문자도 마찬가지입니다(다른 패키지는 그리스 문자를 이탤릭체로 표시하지 않습니다).
변수에 지수나 지수를 추가할 때는 변수 스타일 외부에 추가해야 합니다. 즉, $mathbold{x}_i$
쓰고 $mathbold{x_i}$
쓰지 마세요.
변수를 자주 참조하므로 다음 두 명령을 정의하는 것이 좋습니다.
renewcommand { vec }[1]{ mathbold {#1}}
newcommand { mat }[1]{ mathbold {#1}}
그런 다음 문서에서 $vec{x}$
및 $mat{X}$
사용할 수 있습니다. 행렬의 형식을 지정하는 방식을 변경하기로 결정한 경우 mat
명령만 변경하면 전체 문서가 업데이트됩니다.
또한 가장 많이 사용하는 변수에 대한 명령을 정의하는 것이 좋습니다. 예를 들어, vec{x}
및 mat{X}
많이 사용하는 경우 다음 명령을 정의하는 것이 좋습니다.
newcommand { vx }{ vec {x}}
newcommand { vX }{ mat {X}}
그런 다음 $vx^T vy = vZ$
와 같이 보다 간결한 방정식을 작성할 수 있습니다.
항상 유형에 따라 변수 스타일을 지정해야 합니다. 예를 들어, 벡터 vx
의 $i$번째 요소는 x_i
이고 vx_i
아닙니다(숫자). 마찬가지로, 행렬 vX
있는 경우 i 번째 열 vx_i
(벡터이므로 굵게 표시됨)를 호출할 수 있고 요소 x_{ij}
이면 vX_i
및 vX_{ij}
가 아닌 열을 호출할 수 있습니다.
인라인 방정식을 작성하려면 (...)
사용하십시오. $...$
사용할 수도 있지만 이는 TeX 명령이며 더 모호한 오류 메시지를 제공합니다.
자신의 줄에 중심 방정식을 작성하려면 $$...$$
사용하지 마십시오(LaTeX 사용의 치명적인 죄 중 하나입니다). 작동하지만 간격이 잘못되었습니다. 대신 begin{equation*}
또는 begin{align*}
사용하세요.
(완전한 예)
석사 또는 박사 학위 논문과 같은 긴 문서의 경우 참고문헌에 역참조를 포함하여 참조가 인용된 위치를 표시하는 것이 유용할 수 있습니다. 이렇게 하려면 간단히 hyperref
패키지에 backref=page
옵션을 추가하면 됩니다.
usepackage [ backref=page ]{ hyperref }
다음 명령을 사용하여 역참조가 표시되는 방식을 사용자 정의할 수 있습니다.
renewcommand *{ backref }[1]{}
renewcommand *{ backrefalt }[4]{{ footnotesize [ %
ifcase #1 Not cited. %
or Cited on page~#2 %
else Cited on pages #2 %
fi %
]}}
그림은 결과를 독자에게 전달할 수 있으므로 모든 논문에서 중요한 구성 요소입니다. 각 그림의 정보가 독자에게 무엇을 말해주는지, 그리고 그 이상의 정보가 아니라 메시지를 뒷받침할 만큼 충분한 정보가 있는지 고려해야 합니다. 예를 들어 2차원 점에서 패턴을 표시하려는 경우(두 개의 클러스터가 잘 분리되어 있음) 축에 눈금과 값을 넣을 필요가 없습니다(크기는 실제로 중요하지 않습니다). 수치는 너무 복잡하면 안 됩니다. 하나의 크고 지저분한 그림을 갖는 것보다 하나 또는 두 개의 메시지를 전달하는 여러 그림을 갖는 것이 더 좋습니다(방법 A는 B보다 낫지만 수렴 속도가 느림).
일부 그림은 시스템을 설명하거나 전체적인 그림을 제공하기 위해 손으로 만든 반면, 다른 그림은 일부 데이터를 설명하는 등 데이터 기반입니다. 이러한 데이터 기반 수치는 가능한 한 많이 스크립팅되어야 합니다. 이상적으로는 데이터가 변경되면 다른 개입(뷰 설정, 확대/축소, 그림 저장/자르기) 없이 그림을 업데이트하기 위해 스크립트를 한 번만 실행하면 됩니다. , 등). 마찬가지로, 그림을 생성하는 데 필요한 데이터를 생성하는 데 몇 초 이상 걸리는 경우 데이터를 계산하고 저장하는 첫 번째 스크립트와 이를 플롯하는 두 번째 스크립트가 있어야 합니다. 이렇게 하면 플롯 작업 시 많은 시간을 절약할 수 있습니다. 그림에 작은 변화가 있을 때마다 효과를 확인하기 위해 기다릴 필요가 없습니다.
또한 그림을 생성하는 데 사용되는 명령을 LaTeX 파일에 저장하는 것이 좋습니다(예: 특히 스크립트에 인수가 필요한 경우 그림 위의 설명).
documentclass { article }
usepackage { graphicx }
begin { document }
% python figure_example.py --save ../../examples/figure/figure.eps
begin { figure }
centering
includegraphics {figure.eps}
caption {Example of a sigmoid function}
end { figure }
end { document }
가능하다면 모든 그림은 레이블, 축 등에 동일한 글꼴을 사용해야 합니다. 특히 하나의 그림에는 큰 레이블/체크 표시가 있고 다른 그림에는 작은 레이블/눈금이 있어서는 안 됩니다. 이를 달성하기 위한 한 가지 해결책은 그림을 생성하는 스크립트에서 그림의 크기를 정의하고 문서에서 크기를 조정하지 않는 것입니다(예: LaTeX 문서에서 그림의 너비를 textwidth
로 변경하지 마십시오).
일관된 수치를 얻으려면, plot_utils.py
와 유사한 도우미 스크립트를 사용하는 것이 좋습니다. 이 스크립트를 사용하면 모든 크기를 정의하기 위해 figure_setup()
함수를 호출한 다음 원하는 크기의 그림을 생성하고 저장하기만 하면 됩니다.
import argparse
import matplotlib . pyplot as plt
import numpy as np
import plot_utils as pu
def main ( args ):
x = np . linspace ( - 6 , 6 , 200 )
y = 1 / ( 1 + np . exp ( - x ))
pu . figure_setup ()
fig_size = pu . get_fig_size ( 10 , 5 )
fig = plt . figure ( figsize = fig_size )
ax = fig . add_subplot ( 111 )
ax . plot ( x , y , c = 'b' , lw = pu . plot_lw ())
ax . set_xlabel ( '$x$' )
ax . set_ylabel ( '$ \ sigma(x)$' )
ax . set_axisbelow ( True )
plt . grid ()
plt . tight_layout ()
if args . save :
pu . save_fig ( fig , args . save )
else :
plt . show ()
if __name__ == '__main__' :
parser = argparse . ArgumentParser ()
parser . add_argument ( '-s' , '--save' )
args = parser . parse_args ()
main ( args )
모든 수치를 EPS
형식으로 저장하는 것이 좋습니다. 이렇게 하면 latex
와 pdflatex
모두 사용하여 문서를 생성하고 아름다운 벡터 그래픽과 텍스트를 즐길 수 있습니다.
2015년 9월 현재 Mac OS X 및 최신 버전의 Python, Matplotlib 및 TeX Live에서는 Matplotlib에서 PDF
로 직접 저장된 그림을 인쇄할 때 품질이 저하됩니다. 실제 종이에 인쇄하면 선명해집니다. 직접 사용해 보세요. 이것이 Matplotlib에서 생성된 그림을 EPS
에 저장하는 것을 선호하는 또 다른 이유입니다. 그림의 PDF 버전만 유지하려면 epspdf
명령줄 도구를 사용하세요. 결과 PDF는 Matplotlib에서 직접 생성한 것보다 더 좋습니다.
완전성을 기하기 위해 약간 뛰어난 결과를 생성하는 또 다른 Matplotlib 백엔드인 PGF가 있다는 점에 유의하세요. 그러나 2015년 9월 현재 결과 PDF는 기본 백엔드 및 epspdf
사용하여 얻은 PDF보다 두 배 더 무겁습니다.
Matplotlib는 엄격한 레이아웃 기능을 사용하는 경우에도 때때로 여백에 너무 많은 공백을 추가합니다. PDF를 가장 좁은 경계 상자로 자르는 멋진 명령줄 도구 pdfcrop
.
플롯에 데이터 포인트가 많으면 결과 EPS 파일이 매우 커질 수 있습니다. 그림을 PNG 파일로 저장할 수 있지만 이렇게 하면 텍스트가 흐려질 수 있습니다. 해결책은 그림의 일부를 래스터화하는 것입니다. 즉, 데이터 포인트가 EPS 파일의 비트맵으로 렌더링되어야 하고 나머지는 벡터 형식임을 matplotlib
에 알리는 것입니다.
matplotlib
의 대부분의 플로팅 기능에 rasterized=True
키워드를 전달할 수 있습니다. zorder
사용하여 다른 레이어를 사용할 수도 있고 matplotlib
축의 set_rasterization_zorder()
메서드를 사용하여 지정된 zorder
아래의 모든 레이어를 래스터화하도록 지시할 수도 있습니다. 래스터화의 예는 Figure_rasterized_example.py 및 http://matplotlib.org/examples/misc/rasterization_demo.html을 참조하세요.