
C
, C++
, 등과 같은 프로그래밍 언어에는 항상 일종의 정적 분석기, 소스 코드에서 도달할 수 없는 코드, 사용되지 않는 변수, 메모리 누수 및 컴파일과 관련 없는 기타 종류의 것들을 검사하는 도구가 존재합니다 C#
. Java
전혀 보고하거나 통지하지 않습니다).
LaTeX에도 비슷한 도구가 있나요?
물론 오래된 매크로나 패키지를 확인하고 onlyamsmath
사용 하지 않는 레이블을 확인하는 일부 패키지가 있습니다. 하지만 다음을 확인하거나 힌트를 주는 패키지 및/또는 도구가 있습니까?nag
refcheck
- 도달할 수 없는 코드:
\if\else\fi
하나 이상의 경로에 도달할 수 없는 구성이 있습니까? - 와 같은 비효율적인 루프를
\foreach
단순화할 수 있나요? - 사용하지 않는 매크로 정의가 있나요?
- 적절한 곳
\newcommand*
대신 사용을 제안합니까 ?\newcommand
- 대괄호나 공백이 의심스러운가요? 좋다:
a^b c
- 분명한a^{bc}
- 분명한a^bc
- 의심스럽습니다: 1.처럼 렌더링되지만 아마도 2.가 의도된 것일까요?
- 의심스러운 빈 줄(문단)이 있나요? 예를 들어 텍스트와 방정식 사이?
- 의심스럽거나 실종됨끝줄 코멘트?
- 인간의 눈에 매우 자주 잘못되거나 비효율적이거나 불분명하다고 생각할 수 있는 다른 것이 무엇입니까?
답변1
짧은 대답은 불가능하다는 것입니다.
일부 작업을 수행하는 도구가 있지만 실제로 라텍스 문서를 분석할 수는 없으므로 도구가 제공하는 조언은 힌트로만 받아들여야 하며, 잘못되었을 수도 있습니다.
LaTeX와 C, Java처럼 언급한 언어 사이의 가장 큰 차이점은 LaTeX의 구문은 분석할 수 없으며 입력의 기본 어휘 분석 및 토큰화도 런타임 동작에 따라 달라진다는 것입니다.
\section[abc}
정적 분석에서는 발견할 것으로 예상되는 구문 오류일 수 있지만 문서에서는 오류일 수 있습니다.
\documentclass{article}
\ifodd\time\catcode`[1\fi
\begin{document}
\section[abc}
aa
\end{document}
이는 자정 이후 경과된 시간(분)에 따라 유효한 문서이거나 유효하지 않음을 의미합니다. 이것은 분명히 극단적인 경우이지만 생각만큼 극단적이지는 않습니다. 많은 패키지가 문서 분석을 변경하는 유사한 작업을 수행합니다. 예를 들어 바벨 속기를 생각해 보세요. 바벨이 로드되었다는 사실은 서문을 검사하여 정적으로 감지할 수 있지만 어떤 시점에서 어떤 언어가 적용되는지 확인하려면 실제로 전체 LaTeX 인터프리터를 실행해야 합니다.
가능하다고 하더라도 귀하의 항목 중 일부가 실제로 표시되어야 하는지 의문이 듭니다.
- 도달할 수 없는 코드:
\if\else\fi
하나 이상의 경로에 도달할 수 없는 구성이 있습니까?
여기서 어려운 점은 어떤 토큰이 실제로 테스트인지 결정하는 것입니다. 대부분 검사기가 인식하기 더 어려운 \if
But 토큰 과 같은 Tex 기본 형식을 볼 수 없습니다. 이런 의미에서 시작하는 모든 토큰은 if 토큰이라고 \newif
가정할 수 있지만 예를 들어 LaTeX는 다음으로 시작 하지만 구문이 매우 다릅니다.\if..
\ifthenelse
\if....
- 와 같은 비효율적인 루프를
\foreach
단순화할 수 있나요?
\foreach
는 단순한 매크로이므로 정의에 따라 매크로를 확장하여 특정 용도를 단순화할 수 있습니다. 하지만 이는 단순화된 것으로 보이지 않을 수도 있습니다.
- 사용하지 않는 매크로 정의가 있나요?
LaTeX와 모든 해당 패키지는 매크로 정의이며 대부분의 문서는 정의된 대부분의 명령을 사용하지 않으므로 특정 문서에는 일반적으로 사용되지 않는 매크로가 수천 개 있습니다.
- 적절한 곳
\newcommand*
대신 사용을 제안합니까 ?\newcommand
주어진 문서에서 매크로의 모든 사용을 기록하고 이 경우에는 결코 동등하지 않다는 점을 기록하지 않는 한 이것이 어떻게 수행될 수 있는지 잘 모르겠습니다.
- 대괄호나 공백이 의심스러운가요? 좋다:
a^b c
- 분명한a^{bc}
- 분명한a^bc
- 의심스럽습니다: 1.처럼 렌더링되지만 아마도 2.가 의도된 것일까요?
나는 이 수표에 동의하지 않습니다. 2. 표준 라텍스 구문입니다. 1.을 허용하기로 결정했다면 코멘트 없이 3도 허용해야 합니다. 명령 이름을 종료하는 것 외에 공백이 중요하지 않다는 것은 TeX 수학 모드 구문 설계의 핵심 부분입니다.
- 의심스러운 빈 줄(문단)이 있나요? 예를 들어 텍스트와 방정식 사이?
TeX는 디스플레이 다음에 오는 텍스트가 새로운 문단인지 아닌지를 구별하기 위해 약간의 어려움을 겪으며 LaTeX는 모든 목록 환경에 대해 이 동작을 에뮬레이션합니다. 따라서 정적 분석기가 문장을 해석하고 단락의 시작이 되어서는 안 된다고 제안하지 않는 한 빈 줄에 주석을 달면 안 됩니다.
- 의심스럽거나 [끝 라인 댓글][1]이 누락되었나요?
예, latex3 구문의 시작을 인식할 수 있거나 규칙과 의미를 변경하는 유사한 패키지가 %
필요하지 않다면 가능합니다.
- 인간의 눈에 매우 자주 잘못되거나 비효율적이거나 불분명하다고 생각할 수 있는 다른 것이 무엇입니까?
사람이 문서를 교정하도록 하는 것은 좋은 생각입니다. 사람의 눈은 여전히 기계보다 더 낫습니다.