프로그래머가 아닌 사람을위한 코드 타이핑 가이드


13

배경

나는 코드가 포함 된 과학 논문을 작성했고 최근에 증명, 즉 저널의 조판이 내 원고에서 만든 것 등을 받았습니다. 결과는 받아 들여지지 않았다 : 들여 쓰기가 일관성이 없다. 각 코드 블록의 끝에 완전히 정지합니다. 인용 부호 등이 제거되었습니다. 모든 오류는 내가 사용한 프로그래밍 언어에 국한되지 않습니다.

이제 프로그래밍 경험이없고 외부 리소스가없는 사람이 왜 그런 실수를하는지 알 수 있지만 인터넷 시대에는 아무도 외부 리소스가 없어서는 안됩니다. 그래서, 내가 좋아하는 검색 엔진과상의하여 제안하고 찾은 것을 찾기 위해 아무것도 찾지 못했습니다. LaTeX 또는 그와 유사한 코드를 아름답게 조판하는 방법에 대한 프로그래머를위한 많은 안내서가 있습니다. 이것은 모두 좋고 적절하지만 다른 사람의 코드를 조판 해야하는 조판자를 위해 만들어진 것은 아닙니다.

질문

다음과 같은 리소스를 찾고 있습니다.

  • 조판 코드의 기본 사항을 설명합니다.
  • 프로그래밍 경험이없는 조판자를 대상으로합니다.

이것의 어려움은 사용 된 언어와 관습에 의존한다는 것입니다. 따라서 답변이 단지 리소스를 연결한다고해도 질문은 꽤 광범위합니다.
Zach Saucier

2
@Scott 따옴표, 공백, 문자와 관련하여 실제로 일반화 할 수 있습니다. 보존해야합니다.
Mikhail V

1
@MikhailV 나는 단지 많은 코드 언어가 단순한 지침보다 외국어와 더 공통적이라고 생각합니다. 공간과 줄 바꿈을 배치 할 위치를 대략적으로 결정할 수는 있지만 정확하기 위해서는 교정하는 언어를 이해해야합니다. 그렇습니다. 편집자 / 교정 독자에게 "있는 그대로"남겨 두라고해서 궁극적으로 정확하다는 의미는 아닙니다.
Scott

1
@Wrzlprmft 재미있는 점은 Acrobat 또는 Acrobat Reader에서 선행 공백을 모두 잃지 않고 Python 양식 PDF를 붙여 넣을 수 없습니다. "지능적으로"제거합니다. 마찬가지로 단어 나 INdesign과 같은 많은 WYSIWYG 편집기에 코드를 붙여 넣으면 인용 부호를 타이포 그래프 따옴표로 바꿉니다 (이러한 기능을 비활성화하지 않는 한). 또한 idesign에서는 줄 바꿈에 다른 문자를 도입하지 않으면 실제로 코드를 올바르게 입력 할 수 없으므로 코드를 다시 복사하면 나쁜 일이 될 수 있습니다.
joojaa

1
@ usr2564301 : 우선,이 질문은 현재 일부 검색 엔진에서 발견되므로 내 것과 같은 문제가있는 조판자가 잠재적 인 답변을 찾을 수 있습니다 (그렇지 않으면 적절하게 잘리지 않을 수 있음) 그것에 대해). 둘째, 증명에 대한 응답에 링크를 포함시킵니다. 왜냐하면 그것이 두 번째 증명에서 아직 커밋되지 않은 오류를 방지 할 수 있기 때문입니다. 조판자가 완고한 경우에도 참조가 필요하지 않습니다. 마지막으로 이것은 코드를 다루는 일이 거의없는 저널 / 게시자이므로 사용자가 묘사 한 시나리오와 약간 다릅니다.
Wrzlprmft

답변:


7

아마도 요점은 사람들이 조판을 이해하는 방식으로 코드를 실제로 조판해서는 안된다는 것입니다. 따라서 코드를 문서에 넣을 때 모든 공백, 탭, 특수 문자 또는 특수 문자 및 줄 바꿈과 같이 그대로 배치해야합니다 .

  • 탭은 최대 4 ~ 8 개의 공백이어야합니다 (4 개가 가장 일반적 임).
  • 글꼴은 고정 너비 글꼴이어야합니다. 그리고 거의 보편적 될 수 있습니다.
  • 응용 프로그램이 대체를 수행하지 않도록하십시오!

    그것은 합자가 없다는 것을 의미합니다.

    또한 많은 프로그램 (Word 및 InDesign과 같은) 응용 프로그램은 인용 부호를 타이포 그래퍼 쌍으로 변경합니다. 코드를 문서에 넣기 전에 이러한 옵션이 비활성화되어 있는지 확인하십시오.

  • 한 줄에서 다른 줄로 코드가 자동으로 흐르지 않도록하십시오. 코드를 만지지 마십시오. 전문가가 아닙니다!

코드는 본문이 아니며 인쇄 규칙을 따르지 않습니다. 그림에 텍스트를 조판 하시겠습니까?

당신이 전문가라면

전문가이고 해당 언어를 알고있는 경우 다음이 적용됩니다.

참고 : 추측하거나 추측하지 말고 말한 내용을 읽으십시오. 많은 언어가 동일하게 보이고 코드는 실제 코드처럼 보이는 의사 언어 일 수 있습니다. 그럼 당신은 할 수 있습니다 :

  • 대체가 동일한 고정 너비를 가진 경우에만 키워드의 채색 / 굵게 / 활성화와 같은 편집기를 사용하십시오. 편집자가이 작업을 수행하도록하십시오 (scintilla와 같은 편집자는 형식이 지정된 코드를 내보낼 수 있습니다). 편집자는 언어, 아마도 라이브러리를 알아야합니다.

    이 잘못하면 좋은 것보다 더 많은 해를 끼칩니다.

도메인 전문가 인 경우 언어와 라이브러리를 알고 문제의 코드를 이해하십시오.

  • 그런 다음 레이아웃에 맞지 않으면 코드를 여러 줄로 다시 정렬 할 수 있습니다. 당신이 무엇을하고 있는지 정말로 알지 못한다면 이것을하지 마십시오.

    리트머스 테스트는 문제의 코드를 작성했을 수 있습니다. 그렇지 않으면 판단 할 수 없습니다. 저자에게 물어보십시오.

    이것을 다루는 방법? 프로그래머는 코드 스타일 표준을 이해합니다. 제출 지침에 한 줄에 X 자만 입력 할 수 있다고 적어주십시오. 그런 다음 프로그래머가 직접 할 수 있습니다. 코드 편집기에는 종종이를위한 도구가 있습니다. 모노 간격 글꼴을 사용해야하는 또 다른 이유입니다.

그러나 당신은이 모든 것을 알고 있었고 결국 전문가였습니다. 저자가 코드를 편집하도록하십시오.

줄 번호?

일부 프로그래밍 언어 및 사용 사례는 줄 번호의 이점을 얻을 수 있습니다. 일부 언어 에서는 가짜 pas 이므로 여기에주의하십시오 .

문제.

당신이 무엇을하든 실제로는 불가능한 기술적 장애물에 직면 할 수 있습니다. 코드는 실제로 형식화되지 않아야하며 형식화되지 않은 텍스트 여야합니다. 이로 인해 놀라운 문제가 발생합니다.

예를 들어 : Python과 같은 언어는 Adobe Acrobat과 같은 많은 PDF 뷰어에서 처리 할 수 ​​없습니다. PDF 파일에서 코드를 붙여 넣으면 복사 붙여 넣기시 편집기에서 이전 공간을 포함하지 않기로 결정합니다. 이로 인해 코드를 PDF에서 편집기로 붙여 넣을 수 없습니다. 이것을 처리하는 좋은 방법은 없습니다!


@ usr2564301 ah yes so true
joojaa

1
어쨌든, 읽을 수있는 글꼴 선택은 타이포 그래퍼가 이해해야 할 내용이라고 생각합니다. 어쨌든 도트없이 소문자 i를 구별하는 어쨌든 (그렇습니다. 우리는 소문자 'i'가 터키어 로케일의 대문자 'I'와 다른 것을 알지 못했기 때문에 한 달 동안 하나의 fo 코드를 디버깅했습니다) 1 너무
joojaa

이론적으로는“한 줄에서 다른 줄로 코드가 흐르지 않도록하십시오”는 좋은 조언입니다. 그러나 표준 6x9 인쇄 형식으로 조판하고 600 자로 된 코드 줄이 있다면주의를 기울여야합니다.
Janus Bahs Jacquet

1
@JanusBahsJacquet 코드는 일반적으로 한 줄에 80 자 미만으로 작성됩니다. 따라서 이와 같은 것을 얻는다면 제출 지침이 어려울 수 있습니다. 프로그래머는 제출 지침에 대해 알고 있으며 모든 코드베이스가 무엇인지 알고 있습니다. 줄을 끊으면 코드의 의미 변경이 끝날 수 있습니다.
joojaa

1
@JanusBahsJacquet 그렇기 때문에 저자에게 물어 보면 지침을 업데이트하여 너무 자주하지 않아도됩니다. 두 경우 모두 코드가 긴 줄로 나눌 수 없다면 조판자는 그것에 대해 아무것도 할 수 없습니다. 그런데 조판자가 크기를 조정하거나자를 수없는 너무 넓은 그림을 어떻게 처리합니까? 어쨌든 나는 코드 제출이 미래에 더 많이있을 것입니다 예상됩니다
joojaa

4

물론 대답은 여러 가지 요소에 따라 달라질 수 있지만 , 올바른 형식의 일반 텍스트 코드로 시작하면 여기에서 다소 일반화 할 수 있습니다.

소스 텍스트의 초기 '포맷'은 개행 문자 , 공백 문자입니다. 줄 바꿈과 수동 줄 바꿈 (DTP 소프트웨어에서와 같이)은 같지 않으며, 그 반대의 경우도 있지만, 일부 희귀 언어 다른 형식 문자를 허용 있습니다 .

주석은 코드의 실행 가능한 부분이 아니므로 실제로 주석인지 알고 있으면 위험없이 다시 포맷 할 수 있습니다. 먼저 살펴볼 것은 주석에 태그를 지정하는 방법입니다.

초기 일반 텍스트 형식에 대한 몇 가지 기본 사항을 알고 있으면 좋습니다. 예를 들어 Python의 경우 PEP8 스타일 안내서가 있습니다. Python 용으로 작성되었지만이 형식 안내서는 C / C ++ 및 Java와 같은 주요 언어에 대한 참조로 사용될 수 있습니다. 다양한 예제 프로젝트를 살펴보면 의심이가는 경우 도움이 될 수 있습니다.

따라서 첫 번째 원칙은 다음과 같습니다 . 소스 텍스트를 변경하지 마십시오. 체크리스트를 살펴볼 것입니다.

  • 어떤 단계에서도 문자 자동 교체 가 발생하지 않습니다.
  • 100 % 확실하지 않으면 텍스트를 편집하지 않습니다.
  • 줄 바꿈이 나타나지 않습니다.
  • 들여 쓰기는 시각적으로 유지되며 일관됩니다 (  들여 쓰기 레벨 당 4 개의 x 너비).
  • 초기 (0) 들여 쓰기 수준이 표시되어야합니다.
  • 정의 된 스타일은 구문의 서식을 손상시키지 않습니다 (구문 강조 표시가 사용되는 경우).
  • 원본 형식을 다시 확인하거나 새로 시작할 수 있도록 원본을 일반 텍스트로 백업하십시오.
  • 줄 번호 (있는 경우)는 설명에서 참조 할 경우 특히 손상되지 않아야합니다.

실제로 원본 소스의 형식이 올바른 경우 줄 바꿈이 없어야합니다. 줄 바꿈 된 줄이 여전히 나타나고 피할 수없는 경우에는 한 단계 매달린 들여 쓰기가 가장 일반적인 솔루션입니다 (위의 링크 된 PEP 참조). 줄 바꿈이 필요한 경우 스타일 가이드 나 작성자에게 문의하십시오.

여전히 일부 사소한 '공백'문자는 교체가 필요할 수 있습니다. 소스는 탭 문자를 포함 할 수 있기 때문에, 이것은 조판자가 각 줄의 시작 부분에있는 모든 탭이 일관되도록해야합니다. 즉, 중첩 된 들여 쓰기는 시각적으로 유지되고 모든 다음 들여 쓰기 레벨은 동일한 너비입니다 (약 4 x x  한 수준의 들여 쓰기 당 너비).

공백 문자 나 혼합 공백 및 탭으로 만든 들여 쓰기는 표로 바꾸어야하며, 필요한 경우 들여 쓰기를 조정하는 것이 더 쉬울 수 있습니다.
물론 공백을 남길 수는 있지만 글꼴을 변경할 때 너비를 관리하기가 어려워지고 테이블 열과 같이 내부 줄 들여 쓰기를 맞추기가 더 어려울 수 있습니다.

고정 폭 글꼴 + 공백

소스가 의도적으로 공백으로 포맷되어 있고 고정 폭 글꼴로만 읽도록 의도 된 경우 (예 : ASCII 다이어그램 또는 ASCII 아트) 공백을 완전히 변경하지 않아야하지만 처음부터 결정해야합니다. 이 경우 "Courier New"글꼴이 가장 일반적입니다. 그래도 실제로 필요하지 않다면, 오늘날에는 점점 더 적은 수의 새로운 사람들이 코딩을 위해 고정 폭을 선택하기 때문에 고정 폭에 반대하는 것이 좋습니다.

일반적으로 압축 된 (예 : Arial 좁은) 작은 글꼴은 더 ​​잘 작동 할 수 있습니다. 본문과 대조적으로 강조하고 코드를 더 작게 만들므로 원치 않는 줄 바꿈이 나타날 가능성이 줄어 듭니다.

여기에 선을 그릴 수 있다고 생각하고 위의 작업을 수행하면 적어도 색상이없는 일반 단일 글꼴 코드 블록의 경우 모든 것이 잘 될 확률이 99 %입니다.


도구 및 고급 형식

또한 구문 강조를 사용하여 모양을 크게 개선 할 수 있습니다.

  • 컬러 인쇄 또는 화면보기 : 풀 컬러 레이아웃에서는 강조 표시의 모든 기능을 사용할 수 있으므로 최상의 시나리오이지만 인쇄시 약간의 색상이 변경 될 수 있습니다.

  • 회색조 또는 흑백 인쇄 : 여기서 굵은 체 (예 : 키워드) 또는 기울임 꼴 (예 : 주석)을 사용할 수 있지만 색상은 모든 결과에서 회색으로 변환됩니다. 예를 들어 회색으로 표시된 주석은 디스플레이에서 잘 보이지만 용지에는 너무 희미해질 수 있습니다.

가장 중요한 질문은 레이아웃 제작자가 코드를 읽을 수있는 형태로 표현할 수있는 도구를 가지고 있는지 여부입니다. 다행스럽게도 코드 편집을위한 많은 무료 도구가 있으며, Windows 용으로 가장 두드러진 도구는 Notepad ++, VSCode, Visual Studio 입니다. 그러나 탭이 공백으로 암시 적으로 자동 변환 될 수 있다는 점에 유의하십시오.

메모장 ++에는 코드를 RTF내보내는 옵션 이 있으며 소스의 모든 서식과 구문 강조 표시를 유지합니다.

코드 프리젠 테이션에서 레이아웃이 텍스트 흐름을 변경하지 않아도되는 경우 이미지 (스크린 샷)를 직접 사용할 수 있습니다. 텍스트처럼 유연하지는 않지만 100 % 서식 및 줄 번호를 유지하고 많은 시간을 절약 할 수 있습니다. 예를 들어 줄 번호는 텍스트 형식으로 유지하기 까다로울 수 있습니다. PDF 로 내보내는 것도 좋은 대안입니다. 그러나 모든 DTP 소프트웨어가 PDF를 포함 할 수있는 것은 아니며 PDF로 인쇄 할 때 일부 형식이 손실 될 수 있습니다.

예를 들어 Notepad ++에서 Python 코드 설정은 다음과 같습니다.
여기에 이미지 설명을 입력하십시오

이것은 단지 스크린 샷을 직접 사용할 수 있으며 실제로 가장 쉬운 방법 일 수 있음을 설명하기위한 것입니다. 화면 캡처에 도움이되는 다양한 도구가 있습니다. 고해상도 이미지를 위해 화면을 '스티칭'해야 할 수도 있습니다.

색상 체계는 물론 지원되는 언어를 이미 알고있는 편집기의 스타일 구성자에 정의 된 개별 구성에 따라 구문을 모르더라도 잘못된 형식을 만들기가 어렵습니다. 여기에는 일반적인 타이포그래피 규칙이 적용됩니다. 너무 많은 색상, 일관된 글꼴, 들여 쓰기, 편안한 줄 간격.

사용자 정의 언어 정의를위한 추가 도구 / 플러그인도 일반적이지만 구문 지식이 필요합니다.


이것은 훌륭하고 신중하게 생각 된 답변입니다. 그러나 해상도 때문에이 스크린 샷을 인쇄하려는 경우 스크린 샷이 차선책 일 수 있습니다. 명심해야 할 것.
Jeremy Carlson

1
Np ++의 @JeremyCarlson 글꼴 크기 / 줄 간격도 조정할 수 있으므로 이론적으로 스크린 샷 해상도에는 제한이 없지만 특히 작은 디스플레이에서 생성하기가 더 어렵습니다. 가상 디스플레이를 사용하고 매우 큰 창 크기를 설정하는 데 약간의 트릭이있을 수 있습니다.
Mikhail V

오늘날 점점 더 적은 수의 새로운 사람들코딩을 위해 단일 공간을 선택하기 때문입니다 . 그러나 이것은 대부분의 사람들이 여전히 단일 공간을 사용합니다. 일반적인 조판 규칙을 코드로 변환 할 수는 없습니다. 예를 들어 구두점은 일반 텍스트보다 더 중요합니다 ( 이 답변 에서 나온 대부분의 주장 이이를 해석합니다). 모노 스페이스가 아닌 코드 서체는 일반 텍스트의 경우와 크게 다릅니다. 또한 종종 유사한 구조를 수평으로 정렬하기를 원합니다 (예 : a[i][j] = 1⮠) a[m][n] = 2.
Wrzlprmft

@Wrzlprmft 편집 해 주셔서 감사합니다. 그리고 그렇습니다. 코드 및 수학에 최적화 된 좋은 글꼴이 많지 않습니다 (Verdana는 괜찮습니다). 실제로, Times는 작은 기간과 결장 및 기타 문제가 있지만 '모든 혜택이 비용을 능가합니다'
Mikhail V

-5

HTML에는 태그 세트 <code> ... </ code>가있어 독자 / 통역가에게 문자 그대로 내용을 처리하도록 지시합니다. 또한 <pre> ... </ pre>도 거의 동일합니다. 종종 출판을 위해 공식, 방정식 및 코드를 조판 해야하는 사람으로서, 나는 이것을 수행하기 위해 IMAGES의 사용을 옹호합니다 ... 문제가있는 항목의 .gif 또는 .jpg 또는 .png를 만드십시오.

또 다른 요소는 코드가 전통적으로 Courier 모노 스페이스 또는 다른 모노 스페이스 글꼴로 렌더링된다는 것입니다. 코드는 본문이 아니라는 독자에게 세마포어 또는 전신이기 때문입니다. 나는이 스타일 선택에 가입한다, 나는 그것이 의미가 있다고 생각한다.

대부분의 "레거시"조판 시스템에서 상당히 높은 복잡도의 수학 방정식은 시간이 많이 걸리고 오류가 발생했습니다.


물론 이미지는 붙여 넣을 수 없습니다!
dwoz

3
나는 이것이 질문에 전혀 답이되지 않는지 이해하지 못한다
Zach Saucier
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.